2016-03-30 3 views
-1

Я пытаюсь обновить столбец rank в таблице users в моей базе данных, представив данные в форме PHP и используя кнопку для отправки. Однако, как только я редактирую данные в своей форме PHP и нажимаю submit, данные в базе данных остаются неизменными. Я добавляю (ссылку на) изображение веб-страницы, и код размещен ниже. Webpage imageОбновление таблицы mysqli с формой php

<!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

Ваш код полностью уязвима для 'SQL Injections'. Это означает, что хакеры легко могут захватывать данные из вашей базы данных без входа в систему. Посмотрите, как избежать: http://php.net/manual/en/mysqli.real-escape-string.php. Вторая часть: вам нужно зациклировать запрос на обновление, потому что вы не можете получить доступ к переменной '$ row' вне цикла while(). – Jer

+0

Я рассмотрю это, спасибо. – Onret

+0

[Что вы пробовали?] (Http://mattgemmell.com/what-have-you-tried/) и [ask]. Почитайте их PLS. – Pred

ответ

0

Кажется есть ошибка в вашем query заявлении

Изменить это: if ($$MySQLi_CON->query($sql) === TRUE) {

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

+0

Благодарим за быстрый ответ. Я изменил это, но он все еще не работает. – Onret

+0

@Onret Я думаю, ваша форма не отправляется. Напишите тег '

+0

Я сделал это, все еще не работая. – Onret

0

Вам нужно разобрать идентификатор вы хотите изменить в $ _POST , Кроме того, в вашем коде необходимо использовать <form action="" method="POST">.

Не проверял, но должно работать:

<!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

Когда я пытаюсь его обновить, он возвращает следующее: 'Undefined index: id on line 44' – Onret

+0

@ Прежде, чем мы все предложим ответы, как выглядит URL-адрес? Что-то вроде 'edit.php? Id = 1' или у URL есть какие-то параметры? Вы хотите обновить все строки сразу? – Jer

+0

Чтобы обновить все строки сразу, это то, что я имел в виду. URL-адрес выглядит так же, как 'edit.php' без'? Id = 1'. – Onret