2017-05-22 4 views
0

Ich bin in PHP/MySQL-Code und ich habe überall nach einer Lösung für dieses Problem gesucht, aber keine Antworten zu meinem Problem.SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 anmelden

Mein Code ist sehr einfach, aber ich kann

<?php 

    $servername = "localhost"; 
    $username = "langalungalangalunga"; 
    $password = "langalungalangalunga"; 
    $dbname = "user_main"; 

    $client_username = $client_password = $client_email = ""; 
    $usernameErr = $passwordErr = $emailErr = ""; 

    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 

    if (!empty($_POST['username'])) { 
     $client_username = test_input($_POST['username']); 
    } else { 
     $usernameErr = "No input on UserName"; 
    } 

    if (!empty($_POST['password'])) { 
     $client_password = test_input($_POST['password']); 
    } else { 
     $passwordErr = "No input on Password"; 
    } 

    if (!empty($_POST['email'])) { 
     $client_email = test_input($_POST['email']); 
    } else { 
     $emailErr = "No input on Email"; 
    } 
    } 

    function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
    } 

    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    try { 
     $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
     // set the PDO error mode to exception 
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "INSERT INTO user_main (UserName, Password, Email) 
     VALUES ($client_username, $client_password, $client_email)"; 
     // use exec() because no results are returned 
     $conn->exec($sql); 
     echo "<script> alert('Success!');</script>"; 
     } 
     catch(PDOException $e) 
     { 
     echo $sql . "<br>" . $e->getMessage(); 
     } 
     $conn = null; 
    } 
    ?> 

Die Fehlerpunkte in Zeile 2 der E-Mail-Teil

Sie in der Bedienungsanleitung zu Ihrem MySQL-Server-Version entspricht was verursacht diesen Fehler nicht gefunden für die richtige Syntax in der Nähe zu verwenden, in Zeile ‚[email protected])‘ 2

<form class="" action='<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>' method="post"> 
    <label for="username">Username</label> 
    <input type="text" name="username" value="<?php echo htmlspecialchars($_SERVER['username']) ?>"> 
    <label for="password">Password</label> 
    <input type="password" name="password" value=""> 
    <label for="email">Email</label> 
    <input type="email" name="email" value=""> 
    <button type="submit" name="button">Register</button> 
</form> 

es tut mir leid, wenn es irgendwo mein Fehler, aber ich bin alle PHP zusammen, um neue so nicht, daß ich wirklich h ave ein Gefühl für die Syntax

+0

Zeichenfolge durch einfache Anführungszeichen in mysql eingeschlossen werden und keine Benutzerdaten einfügen wie this.it zu SQL führen Injektionsmöglichkeiten verwenden PDO Bind Parameter Methode – JYoThI

Antwort

1
$sql = "INSERT INTO user_main (`UserName`, `Password`, `Email`) 
     VALUES ('$client_username', '$client_password', '$client_email')"; 

     $conn->query($sql); 

Der obige Code für SQL-Injection verwundbar ist. Verwenden Sie vorbereitete Anweisungen wie

$stmt = $conn->prepare("INSERT INTO user_main (`UserName`, `Password`, `Email`) 
VALUES (:UserName, :Password, :Email)");//placeholders 
$stmt->bindParam(':UserName', $client_username);//you do not need to escape inputs 
$stmt->bindParam(':Password', $client_password); 
$stmt->bindParam(':Email', $client_email); 

if($stmt->execute() == true){ 
//all good 
echo'Data successfully saved Securely!'; 
} else { 
print_r($stmt->errorInfo()); 
exit; 
} 

Ein zusätzliches Tipp. Speichern Sie Ihre Passwörter nicht im Klartext. Verwenden password_hash

$hashedPassword = password_hash($client_password, PASSWORD_DEFAULT); 

Bei der Kontrolle, wenn das Passwort des Hash übereinstimmt, verwenden password_verify

if(password_verify($client_password, $hashedPassword)){// do this when logging in or during some other authentication 
    //all good 
    echo 'Password is Correct'; 

    } else { 
    echo 'Password is InCorrect.Sorry'; 
} 
+0

Got uncaught Fehler Das sieht nicht zu gut, etwas falsch mit meinem PDO-Treiber? –

+0

Getting SQLSTATE [HY000]: Allgemeiner Fehler: versuchen, eine leere Abfrage auszuführen Mit der endgültigen Aktualisierung Ihrer Antwort ...? –

+0

hat gerade die Anweisung execute hinzugefügt. Ich hoffe, Sie kopieren nicht den ganzen Code. Kopieren Sie nur den vorbereiteten Anweisungsabschnitt meiner Antwort. – Akintunde007

1

ändern Sie SQL-Code einfügen wie unten:

Try this:

$sql = "INSERT INTO user_main (UserName, Password, Email) 
     VALUES ('".$client_username."', '".$client_password."', '".$client_email."')"; 
+0

Ich werde Gott schmatzen, das funktioniert. Danke Mahesh Singh Chouhan. Was ist die Logik dahinter? Sie verwenden sogar doppelte Anführungszeichen. Wie funktioniert das und wann sollte ich es benutzen? –

Verwandte Themen