2016-03-30 6 views
-1

Ich versuche, die rank Spalte in der users Tabelle in meiner Datenbank zu aktualisieren, indem Sie Daten in einem PHP-Formular präsentieren und eine Schaltfläche zum Übermitteln verwenden. Sobald ich jedoch die Daten in meinem PHP-Formular bearbeite und auf Senden klicke, bleiben die Daten in der Datenbank unverändert. Ich füge ein (Link zum) Bild der Webseite hinzu, und der Code wird unten veröffentlicht. Webpage imageAktualisierung einer Mysqli-Tabelle mit einem PHP-Formular

<!DOCTYPE HTML> 
<html> 
<head> 
    <title>View Records</title> 
</head> 
<body> 
<?php 
/* 
    Displays all data from 'users' table 
*/ 
    // connect to the database 
    include('../db/connect.php'); 

    // get results from database 
    $result = $MySQLi_CON->query("SELECT * FROM users") 
     or die(mysql_error()); 

    // display data in table  
    echo "<table border='1' cellpadding='10'>"; 
    echo "<tr> <th>ID</th> <th>Username</th> <th>Email</th> <th>Rank</th> <th></th></tr>"; 

    // loop through results of database query, displaying them in the table 
    while($row = $result->fetch_array()) { 
     // echo out the contents of each row into a table 
    echo "<tr>"; 
    echo '<td>' . $row['user_id'] . '</td>'; 
    echo '<td>' . $row['username'] . '</td>'; 
    echo '<td>' . $row['email'] . '</td>'; 
    echo '<td><input type="hidden" name="user_id[]" id="newrank" width="20px" min="0" max="100" value="' . $row['user_id'] . '"></td>'; 
    echo '<td><form method="POST" action=""><input type="number" name="newrank[]" id="newrank" width="20px" min="0" max="100" value="' . $row['rank'] . '"></form></td>'; 
    echo '<td><a href="delete.php?id=' . $row['user_id'] . '">Delete</a></td>'; 
    echo "</tr>"; 
} 
// close table> 
echo "</table>"; 
if(isset($_POST['btn-update'])) { 
    for($i = 0; count($_POST["user_id"]); $i++) { 
     $_POST['newrank'][$i] = $MySQLi_CON->real_escape_string($_POST['newrank'][$i]); # If this function exists either, if not comment or remove this line! 
    $_POST['user_id'][$i] = $MySQLi_CON->real_escape_string($_POST['user_id'][$i]); # If this function exists either, if not comment or remove this line! 

    $MySQLi_CON->query('UPDATE users SET rank=' . $_POST['newrank'][$i] . ' WHERE user_id=' . $row['user_id'][$i] . ''); 

} 
echo "Updated the rows."; 
} 
?> 
<br> 

<button type="submit" class="btn btn-default" name="btn-update" id="btn-update">Update</button></a> 
<p><a href="ny.php">Add a new record</a></p> 

</body> 
</html> 
+0

Ihr Code zu 'SQL Injections' vollständig verwundbar ist. Das bedeutet, dass Hacker problemlos Daten aus Ihrer Datenbank ohne Login abrufen können. Sehen Sie, wie Sie vermeiden können: http://php.net/manual/en/mysqli.real-escape-string.php. Zweiter Teil: Sie müssen die Aktualisierungsabfrage wiederholen, weil Sie nicht auf die '$ row'-Variable außerhalb der 'while()' - Schleife zugreifen können. – Jer

+0

Ich werde das prüfen, danke. – Onret

+0

[Was haben Sie versucht?] (Http://mattgemammell.com/what-have-you-tried/) und [fragen]. Lesen Sie sie bitte. – Pred

Antwort

0

scheint es einen Fehler in Ihrer query Anweisung

dies ändern: if ($$MySQLi_CON->query($sql) === TRUE) {

mit if ($MySQLi_CON->query($sql) === TRUE) {

+0

Vielen Dank für Ihre schnelle Antwort. Ich habe das geändert, aber es funktioniert immer noch nicht. – Onret

+0

@Onret Ich denke, Ihr Formular reicht nicht ein. Schreiben Sie ein '

+0

Ich habe das gemacht, immer noch nicht funktioniert. – Onret

0

Sie müssen die ID analysieren Sie möchten die $ _POST ändern . Außerdem müssen Sie <form action="" method="POST"> in Ihrem Code verwenden.

Hat es nicht getestet, aber die folgenden sollte funktionieren:

<!DOCTYPE HTML> 
<html> 
<head> 
<title>View Records</title> 
</head> 
<body> 
<table border='1' cellpadding='10'> 
<thead> <th>ID</th> <th>Username</th> <th>Email</th> <th>Rank</th> <th colspan="3"></th></thead> 
<tbody> 

<?php 
//Displays all data from 'users' table 
// connect to the database 
include('../db/connect.php'); 

// get results from database 
$result = $MySQLi_CON->query("SELECT * FROM users") 
    or die(mysql_error()); 

// loop through results of database query, displaying them in the table 
while($row = $result->fetch_assoc()) { 
    // echo out the contents of each row into a table 
    ?> 
    <form action="" method="POST"> 
     <tr> 
      <td><?php echo $row['user_id']; ?></td> 
      <td><?php echo $row['username']; ?></td> 
      <td><?php echo $row['email'];?></td> 
      <td><input type="number" name="newrank" id="newrank" value="<?php echo $row['rank']; ?>"></td>   
      <td><input type="hidden" name="id" value="<?php echo $row['user_id']; ?>"><button type="submit" class="btn btn-default" name="btn-update" id="btn-update">Update</button></td> 
      <td><a href="delete.php?id=<?php echo $row['user_id']; ?>">Delete</a></td> 
     </tr> 
    </form> 
    <?php 
} 
?> 

</tbody> 
</table> 
<?php 

if(isset($_POST['btn-update'])) 
{ 
$sql = 'UPDATE users SET rank=' . $_POST['newrank'] . ' WHERE user_id=' . $_GET['id'] . ''; 

if ($MySQLi_CON->query($sql) === TRUE) { 
    echo "Record updated successfully"; 
} else { 
    echo "Error updating record: " . $MySQLi_CON->error; 
} 
} 
?> 

<p><a href="ny.php">Add a new record</a></p> 

</body> 
</html> 
+0

Wenn ich versuche, es zu aktualisieren, gibt Folgendes zurück: 'Undefinierter Index: ID in Zeile 44' – Onret

+0

@Onret bevor wir alle Antworten vorschlagen, wie sieht die URL aus? Etwas wie 'edit.php? Id = 1' oder hat die URL irgendwelche Parameter? Möchten Sie alle Zeilen gleichzeitig aktualisieren? – Jer

+0

Um alle Zeilen gleichzeitig zu aktualisieren, habe ich mir vorgenommen. Die URL sieht wie 'edit.php' ohne'? Id = 1' aus. – Onret

Verwandte Themen