eevan79 Posted October 22, 2009 Share Posted October 22, 2009 I have problem with code where users can rate random photos. But when user already rate photo he can refresh page and rate again for same photo twice. For example index.php shows 2 photos. User can rate one photo: .../index.php?vote=1,2 //rate first photo or .../index.php?vote=2,1 //rate second photo Here is part of the code for vote: require_once('mysqlvalues.inc.php'); require_once('mysqlfunc.inc.php'); open_conn(); $res=mysql_query("SELECT ID, Name, Thumbnail, LinkText, LinkUrl FROM Models WHERE Status='1' ORDER BY RAND() LIMIT 2"); while($row=mysql_fetch_assoc($res)) { $ID[] = $row[iD]; $Thumbnail[] = $row[Thumbnail]; $Name[] = $row[Name]; if($row['LinkText'] != '' && $row['LinkUrl'] != '') {$Url[]="<br><br><a href=\"$row[LinkUrl]\">$row[LinkText]</a><br><br>";}else{$Url[]='';} } echo"<td valign=\"top\"> <a href=\"index.php?vote=$ID[0],$ID[1]\"><img src=\"images/uploads/$Thumbnail[0]\" alt=\"$Name[0]\" title=\"$Name[0]\" border=\"0\" width=\"320\" height=\"320\" /></a> <br /><strong>$Name[0]</strong> $Url[0] </td> <td align=\"center\"> <img src=\"images/vs.jpg\" alt=\"vs\" title=\"vs\"/> </td> <td valign=\"top\"> <a href=\"index.php?vote=$ID[1],$ID[0]\"><img src=\"images/uploads/$Thumbnail[1]\" alt=\"$Name[1]\" title=\"$Name[1]\" border=\"0\" width=\"320\" height=\"320\" /></a> <br /><strong>$Name[1]</strong> $Url[1] </td>"; close_conn(); ?> How can I prevent refresh page (or avoid somehow) so users cant vote infinity times one photo? Regards, Ivan [attachment deleted by admin] Quote Link to comment Share on other sites More sharing options...
cbolson Posted October 22, 2009 Share Posted October 22, 2009 Create a session variable to store the id photo when a user votes for it. Then, each time a user votes, check that the photo being voted upon isn't in the session already. The user will be unable to vote for the same photo again until they begin a new session. Something like this: if(!isset($_SESSION["vote"]["id_photo"])){ // your vote save code // save id photo into the session $_SESSION["vote"]["id_photo"] =1; } Quote Link to comment Share on other sites More sharing options...
eevan79 Posted October 22, 2009 Author Share Posted October 22, 2009 cbolson, thanks for reply. ...yes that can be solution, but what happen when stored ID photo displayed again (images are displayed by random). Here is how it works: when user visit website (index.php) he can vote for one of two images. One image is "winner", second is "looser". When he vote for one image (example: index.php?vote=1,2) page reload with new vote and in left corner display result of previous vote. So sometimes it's possible to display same image from previous vote. Note: I am not familiar with .php, but know Java, html/css and editing some .php code (using php tutorial). This "photobattle" script is some open source example script which i have edited a lot. Quote Link to comment Share on other sites More sharing options...
cbolson Posted October 22, 2009 Share Posted October 22, 2009 So, if the user can't vote for the same photo more than once, surely the best option would be to not show it again, wouldn't it? If this is the case you would need to condition the database query to not select the photos whose id is in the session variable array. To achieve this you can loop through the ids in the array to add a condition for your database query something like this: $sql_condition=""; foreach($_SESSSION["vote"] AS $id_photo){ $sql_condition.=" AND ID!=$id_photo"; } $res=mysql_query("SELECT ID, Name, Thumbnail, LinkText, LinkUrl FROM Models WHERE Status='1' ".$sql_condition." ORDER BY RAND() LIMIT 2"); Chris Quote Link to comment Share on other sites More sharing options...
eevan79 Posted October 22, 2009 Author Share Posted October 22, 2009 I tried but it doesnt work. Also tried to read some tutorials, but w/o result. I need to start session with 2 IDs ($ID[0] and $ID[1]) where $ID[0] is first image, and $ID[1] is second image. When user refresh page, he cant vote again. Example: user vote (click) for image[1] than image[1] gain +1, and image[2] gain -1. When he refresh page image[1] again gain +1, and image[2] gain -1. So he can ifinity refresh page. It's really annoying. Please look at attached file (index.php, first post) and help me to implement session to prevent same vote when page is refreshed. Code where user vote begin @91 line. cbolson, your solution may work but I do not know if it is properly implemented. Thanks. Quote Link to comment Share on other sites More sharing options...
cbolson Posted October 22, 2009 Share Posted October 22, 2009 OK, I have taken a quick look at your file and made a few changes. You should be able to find my code as I have added a comment before starting "// chris - " Basically I have used session_start() at the top of the page to start the php session (without this it will never work) When the user votes a session variable is defined with the id of the photo. This session variable is used to prevent the mysql_query() that updates the votes from being exectued more than once if the page is reloaded. It is also used to stop the photos from being shown again once they have been voted. Clearly I haven't tested this code as there is a lot of other stuff in there which relates to your other database stuff. Let me know how it goes Chris [attachment deleted by admin] Quote Link to comment Share on other sites More sharing options...
eevan79 Posted October 22, 2009 Author Share Posted October 22, 2009 It doesnt work. mysql_query() is updated with refresh page. I got blank page now... I already tried session_start() and some different code but i cant find right solution. Thanks for trying... Quote Link to comment Share on other sites More sharing options...
cbolson Posted October 22, 2009 Share Posted October 22, 2009 add print_r($_SESSION); right before the queries and tell me what you get. Chris Quote Link to comment Share on other sites More sharing options...
eevan79 Posted October 22, 2009 Author Share Posted October 22, 2009 Added add print_r($_SESSION); before query and still blank page. Quote Link to comment Share on other sites More sharing options...
cbolson Posted October 22, 2009 Share Posted October 22, 2009 are you getting a blank page on page load - ie can you even see the photos for voting? A blank page normally means that there is some php error. It sounds like you server has php error reporting turned off. If you add these lines at the beginning of your page you should start to see some useful php errors: error_reporting(E_ALL ^ E_NOTICE); ini_set("display_errors", 1); Chris Quote Link to comment Share on other sites More sharing options...
eevan79 Posted October 22, 2009 Author Share Posted October 22, 2009 I cant see error reporting, so i test it localy (wamp server). It seems that "]" is missing @ line 23. I fixed it and now testing online. EDIT:... Its working. Chris, I appreciate your help. Regards, Ivan Quote Link to comment Share on other sites More sharing options...
cbolson Posted October 22, 2009 Share Posted October 22, 2009 Good news! Glad to be able to help Quote Link to comment Share on other sites More sharing options...
eevan79 Posted October 22, 2009 Author Share Posted October 22, 2009 Now I noticed that it was partially resolved...Only second refresh works, but first refresh (after vote) still updating queries...Not big deal but maybe it can be fixed ... It's strange, but now it working fine (i didnt touch anything). But on previous test update queries after first refresh...(thats why i never understand .php) I mark this "solved". Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.