Jump to content
php.lv forumi

Skatījumu reizes


forSilence

Recommended Posts

Uztaisīju video skriptu un tagad gribu uzlikt, lai rāda cik reizes skatīts. Tabulā izveidoju atsevišķu rowu views un ar query padevu, lai updeito viewus tabulā, bet kko esu izdarījis nepareizi, jo tabulā nekas neupdeitojas. Reku query's:

 

$id = $_GET['id'];
mysql_query ("UPDATE video SET views = views+1 WHERE id = $id");

Ceru uz jūsu palīdzību. Jau iepriekš, paldies.

Link to comment
Share on other sites

Labākais risinājums būtu veidot atsevišķu tabulu, kurā būtu video ieraksta identifikators(video_id) un IP adrese(ip).

MySQL vaicājums būtu attiecīgi:

mysql_query("INSERT INTO video_views(video_id,ip) VALUES($id,$_SERVER['REMOTE_ADDR'])");

Pie video parādīšanas attiecīgi if vaicājums:

$sql = mysql_query("SELECT * FROM video_views WHERE video_id = $id AND ip = $_SERVER['REMOTE_ADDR']");
if(!mysql_num_rows($sql)) {
mysql_query("INSERT INTO video_views(video_id,ip) VALUES($id,$_SERVER['REMOTE_ADDR'])");
}

Kopējo skatījumu skaitu noskaidrojam attiecīgi:

$sql = mysql_query("SELECT * FROM video_views WHERE video_id = $id");
$views = mysql_num_rows($sql);

 

P.S IP adrese nav labākais lietotāju identifikators, piemēram, Rīgas domes lietotāji būs vairāk kā 1000, bet IP adrese viena.

Edited by werd
Link to comment
Share on other sites

werd - ļoti slikts un neefektīvs risinājums! Iedomājies, lai uzzinātu viena video skatījumus, db tiks prasīta VESELA TABULA ar datiem, tikai, lai uzzinātu viena video skatījumu skaitu. Tas nozīmē papildus slodzi db serverim, papildus bezjēdzīgu datu sūtīšana.

 

forSilence, tavam variantam būtu jāstrādā. Kāds ir kolonnas datu tips? Nav kaut kāds varchar? Būtu jābūt (long) INT (un, vēlams unsigned)

Edited by briedis
Link to comment
Share on other sites

Es STIPRI ieteiktu padomāt pie šīs konstrukcijas. Klasiska SQL injekcija. Padodot skripts.php?id=1 or 1 Tev pieskaitīsies skatījumi VISIEM VIDEO.

 

$id = $_GET['id'];
mysql_query ("UPDATE video SET views = views+1 WHERE id = $id");

Link to comment
Share on other sites

Es STIPRI ieteiktu padomāt pie šīs konstrukcijas. Klasiska SQL injekcija. Padodot skripts.php?id=1 or 1 Tev pieskaitīsies skatījumi VISIEM VIDEO.

 

$id = $_GET['id'];
mysql_query ("UPDATE video SET views = views+1 WHERE id = $id");

 

..un lieta atrisināta...

$id = (int)$_GET['id'];
mysql_query ("UPDATE video SET views = views+1 WHERE id = $id");

Link to comment
Share on other sites

Paldies Kaklz par aizrādījumu un paldies briedim, ka pateica kā to izlabot.

 

Bet meigināju es, lai pieskaita vienu skatījmu tikai vienu reizi no vienas ip adreses, bet nekas nesanāca.

Meigināju visu padot ar If'u, bet nekas nesanāca. Pieskaita skatījumus kā refrešo lapu, un neievada ip adreses un video id iekš db. Reku kods:

 

$ip = quote_smart($_SERVER['REMOTE_ADDR']);
if($row['ip'] != $ip){
mysql_query("UPDATE video SET views = views+1 WHERE id = {$_GET['id']} ") or die(mysql_error());
mysql_query("INSERT INTO video (ip,video_id) VALUES ($ip,{$_GET['id']} ) WHERE video_id = {$_GET['id']} ");
}

Link to comment
Share on other sites

No query'a

$result = mysql_query("SELECT * FROM video WHERE id = {$_GET['id']}");
while($row = mysql_fetch_assoc ($result)){
$ip = quote_smart($_SERVER['REMOTE_ADDR']);
if($row['ip'] != $ip){
mysql_query("UPDATE video SET views = views+1 WHERE id = {$_GET['id']} ") or die(mysql_error());
mysql_query("INSERT INTO video (ip,video_id) VALUES ('$ip',{$_GET['id']} ) WHERE video_id = {$_GET['id']} ");
}
//te cits kods
}

Edited by forSilence
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...