2016-03-31 2 views
-2

Я пытаюсь обновить rank столбец в таблице users в MySQL с помощью PHP, но когда я пытаюсь изменить значение и нажмите кнопку update, только последний из строк таблицы на самом деле обновляются. Вот изображение того, что таблица PHP выглядит на веб-странице:Почему обновляется только одна таблица?

Here

Вот код:

<?php 
include '../db/connect.php'; 
$con = $MySQLi_CON; 
if (!$con){ 
    die("Can not connect: " . mysql_error()); 
} 

if(isset($_POST['update'])){ 
    $UpdateQuery = "UPDATE users SET rank='$_POST[rank]' WHERE user_id='$_POST[hidden]'"; 
    $con->query($UpdateQuery); 
} 
$result = $MySQLi_CON->query("SELECT * FROM users") 
    or die(mysql_error()); 
echo "<table border=1> 
<tr> 
    <th>ID</th> 
    <th>Username</th> 
    <th>Email</th> 
    <th>Rank</th> 
</tr>"; 
echo "<form action='test3.php' method='post'"; 
while($record = $result->fetch_array()){ 

    echo '<tr>'; 
    echo '<td>' . $record['user_id'] . '</td>'; 
    echo '<td>' . $record['username'] . '</td>'; 
    echo '<td>' . $record['email'] . '</td>'; 
    echo '<td>' . '<input type="number" name="rank' . [$record['user_id']] . '" />'; 
    echo '<td>' . '<input type="hidden" name="hidden" value="' . $record['user_id'] . '"</td>'; 
    echo '<td>' . '<input type="submit" name="update" value="update"' . '</td></tr>'; 
} 
echo "</table>"; 

for($_POST['rank'] as $user_id=>$rank){ 
$UpdateQuery = "UPDATE users SET rank='$rank' WHERE user_id='$user_id'"; 
$con->query($UpdateQuery); 
} 
$con->close(); 
+0

вы создали форму в цикле while в строке таблицы .. так что, конечно, когда вы отправляете, будет отправлена ​​только одна строка. –

+0

Так 'echo'' form' вне цикла 'while', и тогда это будет работать? – Onret

+1

Это обновление только последней строки, потому что это все, что вы сказали ему сделать. Посмотрите на размещение массивов с использованием форм. – Styphon

ответ

0

Проблема всех рангов каждой строки с тем же именем rank а также hidden, браузер переопределит все ранг и скрытое значение с последним элементом.

изменение <input type="number" name="rank" /> к <input type="number" name="rank[$record['user_id']]" />

получают в PHP с $_POST['rank'] в формате массива и цикла каждого ранга.

for($_POST['rank'] as $user_id=>$rank){ 
    $UpdateQuery = "UPDATE users SET rank='$rank' WHERE user_id='$user_id'"; 
    $con->query($UpdateQuery); 
} 
+0

теперь возвращает эту ошибку: 'синтаксическая ошибка, неожиданная 'как' (T_AS), ожидающая ';'' Я также обновил код выше – Onret

+0

, я думаю, вы не поняли. '[$ record ['user_id']]' определенно будет синтаксической ошибкой, окончательный html, который нужно эхо, похож на ''. во-вторых, вы не обновили часть запроса. В-третьих, я думаю, вам нужно знать, как отправлять данные массива на сервер и как данные массива php catch из запроса «POST». – panda

Смежные вопросы