MySQL - Ik heb twee vragen, maar één werkt niet en dat doet men. Help me alsjeblieft?

if ($_GET['action'] == "like")
{
mysql_query("UPDATE blog SET like=like+1 WHERE id=".$_GET['id']."");
header('Location: blog.php?id='.$_GET['id'].'');
}
else if ($_GET['action'] == "dislike")
{
mysql_query("UPDATE blog SET dislike = dislike+1 WHERE id = ".$_GET['id']."");
header('Location: blog.php?id='.$_GET['id'].'');
}

De "afkeer" -actie werkt geweldig! Maar de "soortgelijke" doet dat niet. Het is bijna hetzelfde?

Kan iemand mij helpen???

2
Welkom bij Stack Overflow! U voert geen foutcontrole uit in uw query's, dus het is geen wonder dat u niet kunt zien wat er gebeurt als een query mislukt. Hoe fouten correct worden weergegeven, wordt beschreven in de handleiding op mysql_query() of in deze referentievraag.
toegevoegd de auteur Pekka 웃, de bron
De code die u weergeeft, is ook kwetsbaar voor SQL-injectie . Gebruik de juiste sanitaire methode van uw bibliotheek (zoals mysql_real_escape_string() voor de klassieke mysql-bibliotheek), of schakel over naar PDO en voorbereide instructies.
toegevoegd de auteur Pekka 웃, de bron
Wat is het gevoel hiervan? "" Na uw vraag?
toegevoegd de auteur Aurelio De Rosa, de bron
Ik hoop dat je je realiseert dat het accepteren van gebruikersinvoer zonder te ontsnappen voor MySQL een ernstig beveiligingsrisico vormt ... Maar over het onderwerp: wat zegt MySQL als je de query plakt in (bijv.) Phpmyadmin (of echo mysql_error() zoals @Dagon suggereert)?
toegevoegd de auteur Bart, de bron
voeg basisfoutcontrole toe met mysql_error ()
toegevoegd de auteur user557846, de bron

2 antwoord

LIKE is een sleutelwoord. Gebruik backticks:

UPDATE blog SET `like`=`like`+1 ...

Over het algemeen is het veel beter om kolom na sleutelwoorden ( LIKE, CASE, SELECT, WHERE , etc.) niet te noemen.

Voorbeeld

mysql_query("UPDATE blog SET `like`=`like`+1 WHERE id='".
       mysql_real_escape_string($_GET['id'])."'");

Or if your id is integer, you can do in this particular case just .... WHERE id=".(int)$_GET['id']

6
toegevoegd
Gebruik je een backtick-personage voor hetzelfde? Het is geen enkel citaat.
toegevoegd de auteur a1ex07, de bron
@Frederick Marcoux: Toegevoegd voorbeeld met mysql_real_escape_string
toegevoegd de auteur a1ex07, de bron
Zeker zorgen voor backtick zoals hier geadviseerd. Het doet geen pijn om de standaard gereserveerde termen voor MySQL te kennen.
toegevoegd de auteur Kai Qing, de bron
Dank u zeer!
toegevoegd de auteur Frederick Marcoux, de bron
Het werkt!!!!!!!!!!!!
toegevoegd de auteur Frederick Marcoux, de bron
if ($ _GET ['action'] == "like") {mysql_query ("UPDATE blog SET 'like' = 'like' + 1 WHERE id =". mysql_real_escape_string ($ _ GET ['id']). "") ; header ('Locatie: blog.php? id ='. $ _ GET ['id']. ''); } En het werkt niet.
toegevoegd de auteur Frederick Marcoux, de bron
Bedankt voor het voorbeeld, ik heb het toegevoegd.
toegevoegd de auteur Frederick Marcoux, de bron
@ a1ex07 Het werkt niet ... -__- 'Maar kunt u mij helpen met "mysql_real_escape_string ()"?
toegevoegd de auteur Frederick Marcoux, de bron
Bedankt a1ex07 !!! Ik zal het proberen! Maar ik kan "mysql_real_escape_string ()" gebruiken ?? Het is mijn eerste PHP- en MySQL-website ..
toegevoegd de auteur Frederick Marcoux, de bron

Een goed plan zou zijn om de geretourneerde waarde van mysql_error() te controleren om de eigenlijke fout van MySQL te krijgen (u kunt dit controleren door mysql_error ()) simpelweg te echoën.

Anders dan dat je echt wilt gooien in een exit() na de aanroep van header() om de uitvoering van het script daar te beëindigen, en je ook mysql_real_escape_string wilt toevoegen om te ontsnappen aan de GET-argumenten die je doorgeeft aan MySQL. U wilt geen door de gebruiker aangeleverde gegevens gebruiken zoals die zonder bescherming of ongefilterd zijn.

1
toegevoegd
Alle goede en goede punten, maar mysql_real_escape_string zou in dit specifieke geval niet beschermen tegen kwetsbaarheid. Kijk goed
toegevoegd de auteur Pekka 웃, de bron
@Frederick je moet nog steeds aan de SQL ontsnappen. Het is triviaal om de URL te zien voor iedereen met een beetje technische kennis
toegevoegd de auteur Pekka 웃, de bron
Ik voegde de ontsnapping toe.
toegevoegd de auteur Frederick Marcoux, de bron
Het komt van een link en de gebruiker ziet de URL niet, ik redirect tussen twee pagina's ...
toegevoegd de auteur Frederick Marcoux, de bron