2016-03-31 15 views
0

Ich habe Probleme mit der Verwendung eines alten MySQL-Befehls von einer Website.Warum funktioniert dieser MySQL-Befehl nicht?

INSERT INTO 
     users(user_name, user_pass, user_email ,user_date, user_level) 
VALUES('" . mysql_real_escape_string($_POST['user_name']) . "', 
     '" . sha1($_POST['user_pass']) . "', 
     '" . mysql_real_escape_string($_POST['user_email']) . "', 
     NOW(), 
     0); 

Es wird mit diesem Fehler zurückgegeben.

#1064 - 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 'user_name']) . "', 
     '" . sha1($_POST['user_pass']) . "', 
     '" . mys' at line 3 

Der Artikel auf der Website war von Mai 2010, also könnte ein Grund sein, warum es nicht funktioniert. Hier ist die Website: http://code.tutsplus.com/tutorials/how-to-create-a-phpmysql-powered-forum-from-scratch--net-10188. Wenn Sie weitere Informationen benötigen, werde ich diese Frage bearbeiten.

+0

Es gibt nichts falsch mit dem SQL aus diesem Tutorial. Vielleicht sollten Sie den eigentlichen Code genau so posten, wie Sie ihn haben. Das Tutorial erstellt eine Variable in PHP - wenn Sie es genauso geschrieben hätten wie der Autor, würde Ihre db niemals die Variablen '$ _POST' sehen - stattdessen würden die Werte von diesen in der Abfrage verkettet werden. – billynoah

+0

** WARNUNG **: Es ist nicht einfach, eine eigene Zugriffssteuerungsschicht zu erstellen, und es gibt viele Möglichkeiten, dies völlig falsch zu machen. Bitte schreiben Sie nicht Ihr eigenes Authentifizierungssystem, wenn Sie ein modernes [Entwicklungsframework] (http://codegeekz.com/best-php-frameworks-for-developers/) wie [Laravel] (http://laravel.com/) verfügt über ein robustes [Authentifizierungssystem] (https://laravel.com/docs/5.2/authentication). Am absolutesten folgen Sie [empfohlenen Best Practices für die Sicherheit] (http://www.phptherightway.com/#security) und speichern Sie niemals Passwörter mit nur SHA1 angewendet. – tadman

+0

** WARNUNG **: Wenn Sie nur PHP lernen, lernen Sie nicht die obsolete ['mysql_query'] (http://php.net/manual/en/function.mysql-query.php) Schnittstelle. Es ist schrecklich und wurde in PHP 7 entfernt. Ein Ersatz wie [PDO ist nicht schwer zu erlernen] (http://net.tutsplus.com/tutorials/php/why-you-should-beusing-phps-pdo- for-database-access /) und ein Leitfaden wie [PHP The Right Way] (http://www.phptherightway.com/) hilft Best Practices zu erklären. Wenn Sie keine vorbereiteten Anweisungen verwenden, sind Sie nur einen Fehler entfernt von einem riesigen SQL-Injektionsloch. – tadman

Antwort

-1

Sie müssen die einfachen Anführungszeichen innerhalb Ihrer Werte (nach jedem POST [) zu entkommen.

INSERT INTO 
     users(user_name, user_pass, user_email ,user_date, user_level) 
VALUES('" . mysql_real_escape_string($_POST[''user_name'']) . "', 
     '" . sha1($_POST[''user_pass'']) . "', 
     '" . mysql_real_escape_string($_POST[''user_email'']) . "', 
     NOW(), 
     0); 
+0

'$ _POST ['' user_name '']' ?? Bist du dir sicher oder ist das ein Tippfehler? – billynoah

+0

@billynoah Ich bin bei dir. Das ergibt überhaupt keinen Sinn. – tadman

+0

@tadman es funktioniert. – SkrillexNukehulk

Verwandte Themen