Rating script: mysql update niet

Status
Niet open voor verdere reacties.

Kproz

Gebruiker
Lid geworden
11 jul 2007
Berichten
138
PHP:
<?php

mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("awmoney") or die(mysql_error());


if (isset($_GET['mode']) && $_GET['mode'] == 'vote' && isset($_GET['id']) && isset($_GET['voted']) )
{ 
$mode = "vote";
$id=$_GET['id'];
$vote = $_GET['vote'];
 }
if ( $mode=="vote")
{

	//If the user has already voted on the particular thing, we do not allow them to vote again $cookie = "Mysite$id";
	if(isset($_COOKIE["awmoney".$id]))
	{
	echo "awmoney" . $id;
	Echo "Sorry You have already ranked that site <p>";
	}

	
	else
	{
	
	$month = 2592000 + time();
	setcookie("awmoney".$id, 'voted', $month);
	echo $vote . '<br>' ;
	echo $id . '<br>';
	
	mysql_query ("UPDATE vote SET total='total+$vote', votes ='votes+1' WHERE id = $id");
	
	
	echo "Your vote has been cast <p>";
	}
}

	
	$data = mysql_query("SELECT * FROM vote") or die(mysql_error());
	
	
	while($ratings = mysql_fetch_array( $data ))
	{


Echo "Name: " .$ratings['name']."<br>";


if ($ratings[votes] != 0) {
$current = $ratings[total] / $ratings[votes];
Echo "Current Rating: " .
round($current, 1) . "<br>";
}
else { $current = "n/a"; 
Echo "Current Rating: " .
$current. "<br>";
}


Echo "Rank Me: ";
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=1&id=".$ratings[id].">Vote 1</a> | ";
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=2&id=".$ratings[id].">Vote 2</a> | ";
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=3&id=".$ratings[id].">Vote 3</a> | ";
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=4&id=".$ratings[id].">Vote 4</a> | ";
Echo "<a href=".$_SERVER['PHP_SELF']."?mode=vote&voted=5&id=".$ratings[id].">Vote 5</a><p>";
}
?>

en als je de sql ook nog nodig zou hebben :

PHP:
CREATE TABLE vote (id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), total INTEGER, votes INTEGER)


->
PHP:
INSERT INTO vote (name, total, votes) VALUES ( "First item", 45, 10 ), ( "Second item", 15, 4 ), ( "Third thing", 25, 7 ), ( "The Forth", 20, 5 ), ( "Fifth Thing", 0, 0 )



hiij doet alles goed maar, hij wil de database maar niet updaten! kan iemand de fout vinden :/
 
Echo eens de query (voordat je m uitvoert) en post die hier? Misschien krijg je daardoor meer inzicht in de foute werking.

Krijg je verder ook nog iets van een error, of update ie enkel de record(s) niet?


Edit: probeer anders eens achter de query dit te zetten: "or die(mysql_error());"
 
misschien dat het hier aan ligt:

PHP:
mysql_query ("UPDATE vote SET total='total+$vote', votes ='votes+1' WHERE id = '$id'"); // $id tussen ' ' geplaatst
 
misschien dat het hier aan ligt:

PHP:
mysql_query ("UPDATE vote SET total='total+$vote', votes ='votes+1' WHERE id = '$id'"); // $id tussen ' ' geplaatst

Dat maakt niet uit, doe ik zelf ook altijd (hetzij op een wat nettere manier). Dit is juist nodig om o.a. mysql-injection te voorkomen.
Daarom verzoek ik de TS ook om de uitgevoerde query te printen en gebruik te maken van die or die() functie.
 
met die 'or die () er bij doet hij niets anders, er is namelijk geen error.... hij doet gewoon iets fout!
 
-> doet ie oppeens dit:


1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'votes+=1 WHERE id=1' at line 1

k
 
Echo eens de query, zoals ie ook uitgevoerd wordt? Daarmee bedoel ik dus: met alle PHP-variabelen ingevuld. Dus zoiets:
PHP:
$query = "UPDATE vote SET total='total+$vote', votes ='votes+1' WHERE id = '$id'";
echo $query . "<br/>";
mysql_query($query) or die(mysql_error());
 
Echo eens de query, zoals ie ook uitgevoerd wordt? Daarmee bedoel ik dus: met alle PHP-variabelen ingevuld. Dus zoiets:


oke dat heb ik gedaan, nu krijg ik als output:

1
UPDATE vote SET total='total+', votes ='votes+1' WHERE id = '1'
Your vote has been cast

Name: First item
Current Rating: n/a
Rank Me: Vote 1 | Vote 2 | Vote 3 | Vote 4 | Vote 5

Name: Second item
Current Rating: n/a
Rank Me: Vote 1 | Vote 2 | Vote 3 | Vote 4 | Vote 5


(ik had op FIRST ITEM VOTE 1 gedrukt)
 
Probeer de volgende query eens:

PHP:
$query = "UPDATE vote SET total = total + " . $vote . ", votes = votes + 1 WHERE id = '$id'";

Daarnaast bevat $vote geen waarde, die moet je dus even van een waarde voorzien.
 
Probeer de volgende query eens:

PHP:
$query = "UPDATE vote SET total = total + " . $vote . ", votes = votes + 1 WHERE id = '$id'";

Daarnaast bevat $vote geen waarde, die moet je dus even van een waarde voorzien.

dat werkt, voor de rest had ik dit nog fout gedaan:

$vote = $_GET['voted'];

bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan