2017-02-10 2 views
1

Ich habe versucht, ein Formular zu erstellen, das auf meine Datenbank aktualisiert, aber ... wenn ich auf "Update" klicken, sagt nur, konnte nicht verbinden !!! WARUM??? Ich weiß es nicht aktualisiert hat, denn wenn ich auf meiner Datenbank nichts gehen hat sich verändert ... :-(.Sprichwort konnte nicht verbinden, wenn ich auf meinem Formular auf meine Datenbank drücken

<html> 

    <head> 
     <title></title> 
    </head> 

    <body> 
     <?php 

     if(isset($_POST['update'])) { 


      $dbhost = 'localhost'; 
      $dbuser = '***'; 
      $dbpass = '******'; 

      $conn = mysqli_connect($dbhost, $dbuser, $dbpass); 

      if(! $conn) { 
       die('Could not connect: ' . mysqli_error()); 
      } 

      $Userid = $_POST['UserID']; 
      $TableID = $_POST['tableID']; 
      $Life_points = $_POST['Life_points']; 
      $xp_points = $_POST['xp_points']; 

      $sql = "UPDATE points"." SET TableID = $TableID". "WHERE UserID= $UserID"."WHERE life_points= $Life_points"."WHERE xp_points= $xp_points" ; 

mysqli_select_db('womath'); 

      $retval = mysqli_query($sql, $conn); 

      if(! $retval) { 
       die('Could not update data: ' . mysqli_error()); 
      } 
      echo "Updated data successfully\n"; 

      mysqli_close($conn); 
     } 
     else { 


      ?> 
       <form method = "post" action = "<?php $_PHP_SELF ?>"> 
        <table width = "400" border =" 0" cellspacing = "1" 
        cellpadding = "2"> 

        <tr> 
         <td width = "100">UserID</td> 
         <td><input name = "UserID" type = "int" 
          id = "UserID"></td> 
        </tr> 
        <tr> 
        <td width = "100">TableID</td> 
        <td><input name = "TableID" type = "int" 
         id = "TableID"></td> 
        </tr> 
        <tr> 
        <td width = "100">life_points</td> 
        <td><input name = "life_points" type = "int" 
         id = "life_points"></td> 
        </tr> 

        <tr> 
         <td width = "100">xp_points</td> 
         <td><input name = "xp_points" type = "int" 
          id = "xp_points"></td> 
        </tr> 

        <tr> 
         <td width = "100"> </td> 
         <td> </td> 
        </tr> 

        <tr> 
         <td width = "100"> </td> 
         <td> 
          <input name = "update" type = "submit" 
           id = "update" value = "Update"> 
         </td> 
        </tr> 

        </table> 
       </form> 
       <?php 
     } 
     ?> 

    </body> 
</html> 
+1

Sie mischen 'mysql' und' mysqli' APIs, das sind zwei verschiedene Dinge. –

+0

Es wird jetzt angezeigt, konnte nicht aktualisiert werden ... –

+0

Verwenden Sie 'mysqli' oder' pdo'. Und verwenden Sie [** prepared statement **] (https://en.wikipedia.org/wiki/Prepared_statement), um jede Art von SQL-Injection-Angriff zu verhindern. –

Antwort

0

Es gibt nur wenige Dinge, die Sie in Ihrem Code, wie sich ändern:

  • Wenn Sie Nehmen Sie für alle Ihre <input> Felder nur eine ganzzahlige Eingabe vor, und stellen Sie dann type als number statt int ein.

    <input name = "UserID" type = "number" id = "UserID"> 
    <input name = "TableID" type = "number" id = "TableID"> 
    // and so on ... 
    
  • Es gibt einige Syntaxfehler in Ihrem Code. Außerdem ist Ihre SQL-Abfrage falsch. So Ihren Code in der folgenden Art und Weise ändern,

    if(isset($_POST['update'])) { 
        // your code 
        $Userid = $_POST['UserID']; 
        $TableID = $_POST['TableID']; 
        $Life_points = $_POST['life_points']; 
        $xp_points = $_POST['xp_points']; 
    
        $sql = "UPDATE points SET TableID = " . $TableID . " WHERE UserID = ". $Userid . " AND life_points = " . $Life_points . " AND xp_points= " . $xp_points; 
        // your code 
    }else{ 
        // your code 
    } 
    
  • mysqli_query($sql, $conn)mysqli_query($conn, $sql) sein sollte. mysqli_query() verwendet das erste Argument als Verbindungshandler und das zweite Argument als Abfragezeichenfolge.

  • Da Sie UPDATE Operation ausführen, verwenden Sie mysqli_affected_rows() Funktion, um zu überprüfen, wie viele Zeilen von dieser UPDATE Operation betroffen sind.

  • Zu guter Letzt, nicht mischen mysql und mysqli APIs. Verwenden Sie entweder mysqli oder pdo. Außerdem erfahren Sie mehr über prepared statement, da es Ihre Datenbank vor jeglicher Art von SQL-Injection-Angriffen schützt.

+0

Vielen Dank, aber wo stelle ich die mysqli_affected_rows() ??? –

+0

@AnwenEvans Direkt nach mysqli_query (...) 'blockieren. Bitte beachten Sie die Beispiele in der Dokumentation [http://php.net/manual/de/mysqli.affec-rows.php](http://php.net/manual/en/mysqli.affected-rows.php] –

+0

@RajeepPaul Ich habe printf eingegeben ("Betroffene Zeilen (UPDATE):% d \ n", $ mysqli-> affected_rows); Wo Sie mir gesagt haben, aber ... es zeigt jetzt = Betroffene Zeilen (UPDATE): 0 Daten konnte nicht aktualisiert werden: –

0

Es sagt, „konnte nicht aktualisiert werden ...“

Weil Ihr $ sQL sieht wie folgt aus, nachdem die Argumente übergeben werden:

"UPDATE Punkte SET TableID = yourTableIdHereWHERE UserID = yourUserIdHereWHERE life_points = yourLifePointsHereWHERE xp_points = yourXpPointsHere"

wie Sie sehen können, Sie liefen Ihre Argumente zusammen mit den nächsten Teilen die Abfrage, weil Sie keine Leerzeichen hatte sie zu trennen, (oh, und Sie verwendet auch das Schlüsselwort WHERE 3 mal.)

+0

Was benutze ich wo? –

+0

Sie würden WHERE vor der ersten Bedingung verwenden und dann AND verwenden, um zusätzliche Bedingungen wie "WHERE firstCondition AND secondCondition AND thirdCondition" hinzuzufügen, aber ebenso wichtig ist, dass Sie ein Leerzeichen einfügen müssen, damit die Wörter nicht zusammenlaufen . – TBowman

Verwandte Themen