Avatar billede frustrator Nybegynder
24. februar 2010 - 12:26 Der er 10 kommentarer

WHERE syntaks

Jeg har et lille problem med min WHERE-syntaks i dette stykke kode:

<?php
require_once('config.php');
mysql_connect($db_server, $db_username, $db_password) or die(mysql_error());
mysql_select_db($db_database) or die(mysql_error());

$div_id = $_GET['id'];
$rating = $_GET['rating'];

if($rating){
//Check that this person hasn't already left a rating
$result = mysql_query("SELECT id FROM v2_sang WHERE div_id = '" . $div_id . "' AND ip = '" . $_SERVER['REMOTE_ADDR'] . "'") or die(mysql_error()); 
$row = mysql_fetch_array( $result );
if(!$row['id']){
    $result = mysql_query("INSERT INTO v2_sang (rating,div_id,ip) VALUES('" . $rating . "','" . $div_id . "','" . $_SERVER['REMOTE_ADDR'] . "') WHERE id = '$div_id'") or die(mysql_error());      if($result){ $report = "<span style=\"color: green;\"> You rated this: $rating</span>"; }
} else {
$report = "<span style=\"color: red;\"> You have already rated this.</span>";
}
}
?>

Det er et rating-script, der skal indsætte data fra brugerens rating i allerede eksisterende rækker i en tabel (hvis der f.eks. rates på id nr. 300, skal ratingen indsættes i denne række). Jeg får imidlertid denne fejl:

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 'WHERE id = '300'' at line 1

Jeg har læst, studeret, researchet og prøvet mig frem, men kan åbenbart bare ikke få syntaksen rigtig. Nogle gode bud? Scriptet gør også brug af et javascript, som jeg kan smide op, hvis det skulle være relevant...
Avatar billede michael_stim Ekspert
24. februar 2010 - 12:30 #1
Du kan ikke lave en insert med WHERE. Der skal du bruge UPDATE.
Avatar billede michael_stim Ekspert
24. februar 2010 - 12:34 #2
Og du skal passe på med SQL injections. Du kan google det.
Avatar billede majbom Novice
24. februar 2010 - 12:36 #3
prøv lige at ret:

$result = mysql_query("INSERT INTO v2_sang (rating,div_id,ip) VALUES('" . $rating . "','" . $div_id . "','" . $_SERVER['REMOTE_ADDR'] . "') WHERE id = '$div_id'") or die(mysql_error());


til:

$query = "INSERT INTO v2_sang(rating,div_id,ip) VALUES('".$rating."','".$div_id."','".$_SERVER['REMOTE_ADDR']."') WHERE id='".$div_id."'";
echo $query;
$result = mysql_query($query) or die(mysql_error());


og smid strengen ind her...
Avatar billede majbom Novice
24. februar 2010 - 12:37 #4
-> michael - lol, det overså jeg fuldstændigt :S sad og kiggede på den linje så længe for at finde en fejl...

flot!
Avatar billede majbom Novice
24. februar 2010 - 12:37 #5
-> #0 - du skal slet ikke læse hvad jeg har skrevet! hehe...
Avatar billede michael_stim Ekspert
24. februar 2010 - 12:39 #6
Been there, done that ;o)
Avatar billede frustrator Nybegynder
24. februar 2010 - 14:19 #7
Thanx, det funker :o)
Avatar billede frustrator Nybegynder
24. februar 2010 - 14:29 #8
Tillægsspørgsmål... kom til at tænke på, at det bliver svært at regne en gennemsnitlig (avg) rating ud når der bruges UPDATE, da det jo blot overskriver tidligere ratings i tabellen. Lad os så sige at jeg laver en NY tabel, der udelukkende registrerer alle ratings med tabellerne rækkerne id, rating, div_id og ip. Koden vil så se således ud:

<?php
require_once('config.php');
mysql_connect($db_server, $db_username, $db_password) or die(mysql_error());
mysql_select_db($db_database) or die(mysql_error());

$div_id = $_GET['id'];
$rating = $_GET['rating'];

if($rating){
//Check that this person hasn't already left a rating
$result = mysql_query("SELECT id FROM ratings WHERE div_id = '" . $div_id . "' AND ip = '" . $_SERVER['REMOTE_ADDR'] . "'") or die(mysql_error()); 
$row = mysql_fetch_array( $result );
if(!$row['id']){
    $result = mysql_query("INSERT INTO ratings (rating,div_id,ip) VALUES('" . $rating . "','" . $div_id . "','" . $_SERVER['REMOTE_ADDR'] . "')") or die(mysql_error());      if($result){ $report = "<span style=\"color: green;\"> You rated this: $rating</span>"; }
} else {
$report = "<span style=\"color: red;\"> You have already rated this.</span>";
}
}
?>

Jeg vil imidlertid herne have tilføjet en ekstra række til tabellen; rækken cat_id. Denne række skal registrere hvilken kategori, der stemmes i (f.eks. film, tv, musik etc.). Værdierne hertil skal være statiske, f.eks. film = 1, tv = 2 osv.

Hvorledes får jeg dette indarbejdet i ovenstående script? Det må da kunne gøres relativt simpelt, oder wie?

Formålet med dette er, at jeg senere kan lave en JOIN-select på denne og en anden tabel (f.eks. v2_sang-tabellen) og dermed få lavet en Top 10 over ratede emner...
Avatar billede frustrator Nybegynder
24. februar 2010 - 14:38 #9
Argh, never mind.... fandt hurtigt ud af det selv ;o)
Avatar billede majbom Novice
04. november 2010 - 13:25 #10
husk at lukke spørgsmålet :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester