webForumDet fria alternativet

Problem med redan röstat koll ?

2 svar · 162 visningar · startad av Pellefant

PellefantMedlem sedan maj 20023 372 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 472 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 20023 372 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);
141 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)