2016-04-22 3 views
-1

In meiner Datenbank, in 'Benutzer' Tabelle gibt es columns als uname, name, sname, Passwort und E-Mail. 'uname' ist einzigartig.
Ich konnte die Werte für Name, Sname und E-Mail nicht aktualisieren.
I "PHP-MYSQL Update Fehler

Error updating record: Erreur de syntaxe près de 'manager''' à la ligne 2 

Zum einen nicht erhalte weiß ich, warum es in Französisch ist. Und 'Manager' ist der Benutzername, die ich in der Datenbank definiert.
$uname = $_SESSION['username']; Wert von anderen Skript kommt.

<?php 
require_once("db_functions.php"); 
session_start(); 

$uname = $_SESSION['username']; 
$new_name=""; 
$new_sname=""; 
$new_email=""; 

if(!(isset($_SESSION['update'])) || $_SESSION['update'] != "1") 
{ 
$errorMsg= "Problem has occured in Update page"; 
echo $errorMsg; 
// header can be added. 
} 

else 
{ 

if(isset($_POST['Submit_update'])) 
    { 
     $conn=db_connect(); 
     if ($conn) 
     { 
     $SQL_select="SELECT * FROM users WHERE username=$uname"; 
     $select_result=mysqli_query($conn,$SQL_select); 

     $new_name=mysqli_real_escape_string($conn,$_POST['name']); 
     $new_sname=mysqli_real_escape_string($conn,$_POST['sname']); 
     $new_email=mysqli_real_escape_string($conn,$_POST['email']); 

     $SQL_update="UPDATE users SET name='$new_name', sname='$new_sname', 
     email='$new_email' WHERE uname='$uname'"; 
     $update_result=mysqli_query($conn,$SQL_update); 

     if ($update_result) { echo "Record updated successfully"; } 
     else { echo "Error updating record: " . mysqli_error($conn); }  
    mysqli_close($conn); 

     } 
else { 
    $errorMsg=" Fail to Connect Database"; 
    echo $errorMsg; 
    } 

    } 


    } 


?> 

<!DOCTYPE html> 
<html> 
<head> 
<title>Upload Page</title> 
</head> 
<body> 
<form name="Update_Form" method="post" action="update.php"> 
    Name:<input type="text" name="name" value=""/><br/> 
    <P> 
    Surname:<input type="text" name="sname" value=""/><br/> 
    <P> 
    E-Mail:<input type="text" name="email" value=""/><br/> 

    <input type="submit" name="Submit_update" value="Update"/> 
</form> 
</body> 


</html> 
+0

Fügen Sie die Zeile no/filename ein Sie erhalten den Fehler. Es scheint nicht aus dem Ausschnitt zu stammen, den Sie gepostet haben. –

+0

Falls sich jemand wundert, warum ich die Frage beendet habe. 'WHERE username = $ uname"; '

+0

@ Fred-ii- Das ist nicht die Abfrage, die den Fehler bekommt, der Fehler ist auf der' UPDATE'. Aber wenn die 'SELECT' funktioniert, bedeutet dies, dass $ "uname" enthält Anführungszeichen, die dann ein Problem verursachen, wenn er im "UPDATE" zusätzliche Anführungszeichen hinzufügt. – Barmar

Antwort

1

ich vermute, in $uname ein Zitat da ist. Da Sie $uname nicht entkommen sind, ist es den String-Wert ist beendet.

Sie sollte eine vorbereitete Abfrage verwenden, anstatt Variablen zu ersetzen, dann müssen Sie nichts entgehen.

$stmt_update = mysqli_prepare($conn, "UPDATE users SET name= ?, sname= ?, 
    email=? WHERE uname=?") or die("Error preparing update: " . mysqli_error($conn); 
mysqli_stmt_bind_param($stmt_update, "ssss", $_POST['name'], $_POST['sname'], $_POST['email'], $uname); 
mysqli_stmt_execute($stmt_update) or die(echo "Error updating record: " . mysqli_stmt_error($stmt_update)); 

Wenn Sie Anführungszeichen um den Wert in $uname haben, so dass where username=$uname Werke ohne Anführungszeichen in die Abfrage zu setzen, Sie sollten das nicht tun, macht es die Variable schwieriger für den Rest des Codes. Dadurch wird verhindert, dass die obige Abfrage funktioniert, da nach den literalen Anführungszeichen im Tabelleninhalt gesucht wird.

+0

Es ist eine gute Wette, dass $ uname einfache Anführungszeichen enthält. Sehr wahrscheinlich, wenn die SELECT-Anweisung erfolgreich war. Wahrscheinlich wird der Wert von '$ _SESSION ['username']' bereits zitiert. (Ich verabscheue das Muster des Einschließens von Werten in einfache Anführungszeichen und entziehe sie, bevor sie in einer SQL-Anweisung verwendet werden. Die Verwendung vorbereiteter Anweisungen mit Bind-Platzhaltern vermeidet diesen ganzen Unsinn. Wenn wir das nicht tun, dann ist der Job von quoting und escaping gehört dorthin, wo die Werte in den SQL-Text verkettet sind, wozu die 'mysqli_real_escape_string'-Wrapperfunktion gehört. +10 – spencer7593

+0

@Barmar Ich habe meinen Code so geändert, wie du geschrieben hast. Jetzt gibt es keinen Fehler, aber die Werte werden nicht aktualisiert Datenbank – Elvan

+0

@Elvan Stellen Sie sicher, dass Sie keine Anführungszeichen in '$ uname' gesetzt haben. Ich habe meine Antwort aktualisiert, um das Problem damit zu erklären. – Barmar