在PHP中一次更新多行

时间:2013-09-20 06:14:17

标签: php mysql

想在“1班”显示学生的表。用户可以更改信息并将其更新到数据库中。我想一次更新多行,但最终只更新1行(最后一行)。请帮助我..当我点击更新时,我应该如何更改代码以便一次更新多行。感谢。

这是代码:

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_DATABASE', 'test');

$connection = mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD) or die(mysql_error());
$database = mysql_select_db(DB_DATABASE) or die(mysql_error());
mysql_set_charset("utf8", $connection);
?>

    <form action='update.php' method='post'>
    <table border='1'>
        <?php
            $result = mysql_query("SELECT * FROM student WHERE class = 1 ");

                    echo "<tr>";
                        echo "<td colspan='3'>CLASS 1</td>";
                    echo "</tr>";

                    while($row = mysql_fetch_array($result)){

                    echo "<tr>";
                        echo "<td><input type='hidden' name='id' value='".$row['id']."' /></td>";
                        echo "<td>name  :<input type='text' name='name' value='".$row['name']."' /></td>";
                        echo "<td>Sex  :<input type='text' name='sex' value='".$row['sex']."' /></td>";
                        echo "<td>Age  :<input type='text' name='age' value='".$row['age']."' /></td>";
                    echo "</tr>";

            }

            echo "<input type='submit' name='update' value='UPDATE' />";
        ?>
    <table>
</form>

<?php

if(isset($_POST['update'])){
    $id  = $_POST['id'];
    $name= $_POST['name'];
    $sex = $_POST['sex'];
    $age = $_POST['age'];

    mysql_query("   UPDATE student
                       SET name= '$name', sex='$sex', age='$age'
                     WHERE id = '$id' ");   

    header("location: update.php");
    exit;
}   

?>

form

3 个答案:

答案 0 :(得分:4)

您需要使用输入数组。所以你的输入应该是这样的(注意名字属性):

echo "<td>Sex  :<input type='text' name='name[]' value='".$row['name']."' /></td>";

然后在PHP $ _POST ['name']将是一个数组:

foreach($_POST['name'] as $name){

希望这会有所帮助......

答案 1 :(得分:2)

你应该动态创建你的sql并执行最新的sql语句。您可以使用foreach循环检查所有ID,只需将每个update语句附加到字符串变量即可。你可以在这里找到一个例子: http://www.youtube.com/watch?v=ImirOX73atc

答案 2 :(得分:1)

您必须将处理已发布数据的代码更改为循环,例如

<?php
  if(isset($_POST['update'])){
    $i = 0;
    while(isset($_POST['row_'.$i.'_id')) {
      $row_id  = $_POST['row_'.$i.'_id'];
      echo $row_id;
      // do update sql
      $i++;
    }
  }
?>

并更改以下行:

<?php
  //Instead of
  //echo "<td><input type='hidden' name='id' value='".$row['id']."' /></td>";
  echo "<td><input type='hidden' name='row_'.$i.'_id' value='".$row['id']."' /></td>";
?>

同时在while循环中迭代$ i,得到MySQL的结果。

或者你可以使用另一个答案暗示的帖子数组。