webForumDet fria alternativet

Problem med redan röstat koll ?

2 svar · 162 visningar · startad av Pellefant

PellefantMedlem sedan maj 20022 614 inlägg
#1

Hej!

Försöker göra ett script som kollar om en person röstat innan, och om så är fallet så får han/hon inte göra det igen förrän 60 sekunder har gått. (För att undvika "flooding".

mySQL databastabellen består av fälten: id(int), ip(varchar), lastvote(int)

Som det är nu, så åker nya rader in i databasen hela tiden, så kollen fungerar inte. (varje ip nummer ska förekomma högst en gång)

Får inte ordnning på det riktigt, här är några frågor, där jag tror felet ligger.

if(mysql_affected_rows!=0){

Är detta tokigt för att kolla om det blivit någon träff med SELECT satsen?

if(($timenow-$row['lastvote'])<60){

Fungerar detta för att kolla om mer än 60 sekunder gått? (Värdena är ju i "unix" tid, dvs ett int värde, så det borde väl gå?)

Hela koden


$ip=$_SERVER['REMOTE_ADDR'];
$timenow=time();

              Databaskoppling

	$Query = "SELECT * FROM songvotecheck WHERE ip='$ip'" or die (mysql_error());
	$Result = mysql_query($Query) or die("Error: ".mysql_error()." in query: ".$Query);
	$row=mysql_fetch_array($Result);
	
	if(mysql_affected_rows!=0){
			//Träff på ip-numret i databasen
  			if(($timenow-$row['lastvote'])<60){
				//Det har inte gått 60 sekunder sedan sist detta ip försökte rösta
				echo "You have already  voted, you have to wait a while until you vote again";
			}else{
				//Det har gått mer än 60 sekunder, ip-numret får rösta
				$Query = "UPDATE songvotecheck SET lastvote='$timenow' WHERE ip='$ip'" or die (mysql_error());
				mysql_db_query ("modernidiot", $Query, $Link) or die (mysql_error());
			    $vote=1;
			}
	}
	
	elseif(mysql_affected_rows==0){
			//Ingen träff på ip numret i databasen, ip-numret får rösta
			$Query = "INSERT INTO songvotecheck(ip, lastvote) values('$ip', '$timenow')" or die (mysql_error());
			mysql_db_query ("xxxx", $Query, $Link) or die (mysql_error());
			$vote=1;
	}

	mysql_close($Link); 

if($vote==1){
Här sker röstningen, den koden funkar bra.
}
$vote=0;
greyhoundMedlem sedan maj 20031 399 inlägg
#2

Jag skulle göra så att man tar med tiden i SQL satsen då får du bara 2 fall, ett fall där personen får rösta och ett där den inte får rösta, blir lättare att jobba med då kanske.

/r Kolla på http://se2.php.net/manual/sv/function.mysql-db-query.php "Not: This function has been deprecated since PHP 4.0.6. Do not use this function. Use mysql_select_db() and mysql_query() instead."

PellefantMedlem sedan maj 20022 614 inlägg
#3

Fick ordning på det nu. :)

if(mysql_num_rows()!=0){

Ska vara:

if(mysql_num_rows($Result)!=0){

Tack för tipset om mysql_db_query greyhound, ska kolla upp det, då sidorna ska flyttas till en ny webhost snart.

Här är den fungerande koden, kanske kan någon ha nytta av den. :)

$Link = mysql_connect("localhost", "xxxx", "xxx");
	mysql_select_db("xxx", $Link);

	$ip=$_SERVER['REMOTE_ADDR'];
	$timenow=time();

	$Query = "SELECT * FROM songvotecheck WHERE ip='$ip'" or die (mysql_error());
	$Result = mysql_query($Query) or die("Error: ".mysql_error()." in query: ".$Query);
	$row=mysql_fetch_array($Result);
	

	if(mysql_num_rows($Result)!=0){
			//Träff på ip-numret i databasen
  			if(($timenow-$row['lastvote'])<60){
				//Det har inte gått 60 sekunder sedan sist detta ip försökte rösta
				echo '<p><center><b>You have just voted, you have to wait a while until you can vote again<p><A HREF="index.php">Continue</A>';
			}else{
				//Det har gått mer än 60 sekunder, ip-numret får rösta
				$Query = "UPDATE songvotecheck SET lastvote='$timenow' WHERE ip='$ip'" or die (mysql_error());
				mysql_db_query ("xxx", $Query, $Link) or die (mysql_error());
			    $vote=1;
			}
	}
	
	elseif(mysql_num_rows($Result)==0){
			//Ingen träff på ip numret i databasen, ip-numret får rösta
			$Query = "INSERT INTO songvotecheck(ip, lastvote) values('$ip', '$timenow')" or die (mysql_error());
			mysql_db_query ("xxx", $Query, $Link) or die (mysql_error());
			$vote=1;
	}

	mysql_close($Link);
122 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
120 ms — hämta tråd, inlägg och bilagor (db)