2016-03-31 26 views
-2

テーブルのrankカラムをPHPを使用してMySQLのテーブルに更新しようとしていますが、値を変更してupdateボタンを押すと、の最後の1つだけが実際に更新されています。ここではPHPの表は、Webページ上でどのように見えるかのイメージがある:ここではテーブル行が1つしか更新されないのはなぜですか?

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ループでフォームを作成しました。もちろん、送信すると1行だけが送信されます。 –

+0

'while'ループの外側にある' form'を 'echo'してから動作しますか? – Onret

+1

最後の行が更新されるのは、それだけで済むからです。フォームを使った投稿の投稿を見てください。 – Styphon

答えて

0

問題は、各行のすべてのランクが同じ名前を使用しているあるrankhiddenの場合、ブラウザはすべてのランクと隠し値を最新の要素で上書きします。

変化<input type="number" name="rank" />

<input type="number" name="rank[$record['user_id']]" />には、アレイフォーマット及びループ内 $_POST['rank']各ランクとPHPで受け取ります。

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

これで、このエラーが返されます: 'syntax error、unexpected 'as'(T_AS)、expecting ';' ' 先ほどのコードを – Onret

+0

として更新しました。 '[$ record ['user_id']]'は間違いなく構文エラーになります。エコーする必要がある最後のhtmlは ''のようなものです。第二に、クエリ部分を更新していません。第三に、配列データをサーバーに送る方法とPHPが配列データを 'POST'要求からキャッチする方法を知っておく必要があると思います。 – panda

関連する問題