2016-07-23 3 views
-8

Ich weiß nicht, warum dieses Stück Code nicht funktionierte, wenn ich Wert über Eingabetext übergebe, wenn ich gegen die Regeln verstoße, dann ist es das richtige Format.Warum funktioniert dieses Stück Code nicht, wenn ich Wert durch Eingabetext übergebe?

<?php   

$id1 = $_POST["id1"]; 
      $name = $_POST["name"]; 
      $update = $_POST["update"]; 
      echo $id1; //working 
      echo $name; //working 
      echo $update; //working 



    mysqli_query($conn , 'update insert1 set '.$name.' = '.$update.' 
    where id-1 = '.$id1.''); //not working 
     // but if I manually use this as follows it works correctly 
     mysqli_query($conn , 'update insert1 set name = "new" where id-1 = '1''); 

    ?> 
+0

Sie müssen ** $ id1 ** in der SQL verwenden – user2182349

+3

Sie fehlen Anführungszeichen rund um Ihre Zeichenfolge Werte und Sie sind weit offen für SQL-Injektion –

+0

ich meine, dass es nicht aktualisiert die Werte, die ich aktualisieren möchte. –

Antwort

1

I $update mit einfachen Anführungszeichen wickeln würde (man beachte, dass ich die Notierungen leicht geschlagen) und änderte id1 in $id1:

mysqli_query($conn , "update insert1 set ".$name." = '".$update."' 
where id-1 = ".$id1); 

Wenn id-1 wird ein String-Spalte Typ in der Datenbank, dann würde ich wickeln $id1 mit Einzelzitate. wie folgt aus:

mysqli_query($conn , "update insert1 set ".$name." = '".$update."' 
where id-1 = '".$id1."'"); 

Hinweise: in dieser Spalte

  • ich überprüfen würde, wenn id-1 im WHERE Zustand bestimmt ist, weil es 2 ist vielmehr, wenn der Wert überprüft als 1 WHERE id - 1 = 1 ist äquivalent zu WHERE id = 2, aber verwirrender für den Leser (Danke an FirstOne für den Hinweis darauf).
  • Wie in einer anderen Antwort erwähnt, ist Ihr Code ist anfällig für SQL-Injection, würde ich dies überprüfen: https://stackoverflow.com/a/16282269/4283725
+0

Danke, Sir, das funktioniert jetzt. –

+1

Das 'where id-1 = something' bedeutet _wenn der ** Wert ** von id minus 1 gleich something_ ist. Schauen Sie sich ein Beispiel an: [http://sqlfiddle.com/#!9/2b720/3](http://sqlfiddle.com/#!9/2b720/3) – FirstOne

-1

Es scheint, dass Sie keine Variable in Ihrer SQL-Anweisung deklarieren.

Das Dollarzeichen ($) hinzufügen, um das zu deklarieren.

$id1 = $_POST["id1"]; 
       $name = $_POST["name"]; 
       $update = $_POST["update"]; 
       echo $id1; //working 
       echo $name; //working 
       echo $update; //working 



     mysqli_query($conn , 'update insert1 set '.$name.' = '.$update.' 
     where id-1 = '.$id1.''); //not working 
      //but if i manually use this as folwing it works correctly mysqli_query($conn , 'update insert1 set name = "new" where id-1 = 
     '1''); 

    ?> 

Auch Ihr Code für SQL injection offen.

+0

Worte der Weisheit dort. Vielleicht kannst du erklären, warum es für die SQL-Injektion offen ist. Zu oft sehe ich, wie Leute die Beobachtungen anderer in ihre Antwort einfließen lassen ... ohne sie selbst zu verstehen. – Jonathan

0

Zunächst einmal einrücken bitte richtig Code.

Dann lernen (oder zumindest versuchen zu verstehen), wie Strings Verkettung funktioniert. In PHP können Sie einfache oder doppelte Anführungszeichen für Strings verwenden.

Was ich immer zu meiner Kollegin wiederhole, ist, (wenn möglich) eine Zeichenfolge in die richtige Art von Zitat zu schreiben, was die Zeichenfolge (möglicherweise) enthalten kann.

Wenn Sie ein einfaches Anführungszeichen in Ihrer Zeichenfolge (oder in einer der verketteten Variablen) haben, wickeln Sie es in Doppel.

Wenn Sie eine doppelte Anführungszeichen in Ihrer Zeichenfolge (oder in einer der verketteten Variablen) haben, wickeln Sie es in Singles.

Dies kann offensichtlich erscheinen, aber wenn Sie dies bei jeder Manipulation von Strings beachten, sind Sie auf dem richtigen Weg, Strings UND Variablen gut miteinander zu verknüpfen.

Auch so übergeben Sie eine vollständige unbearbeitete Abfrage als Parameter ist nicht sehr lesbar. in einer separaten Variable Put in und versuchen wie folgt aus:

<?php   
$id1 = $_POST["id1"]; 
$name = $_POST["name"]; 
$update = $_POST["update"]; 

$query = ' 
    UPDATE insert1 
    SET ' . $name . ' = "' . $update . '" 
    WHERE id-1 = ' . $id1 . ' 
'; 

mysqli_query($conn, $query); 
?> 

Sie feststellen, dass $name nicht mit Anführungszeichen umgeben, da es ein Feldname ist und kein Wert.

Auch hier ist $id1 nicht in Anführungszeichen eingeschlossen, da es sich um einen Integer-Wert und nicht um einen String-Wert handelt. Aber wenn aus irgendeinem Grund die id-1 Feld oder Ihre insert1 Tabelle speichert Nummern AS Zeichenfolgen, so wollen Sie es mit doppelten Anführungszeichen umgeben.

Verwandte Themen