Я хочу отобразить таблицу ученика в «классе 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; } ?>
Вам нужно использовать входные массивы. Поэтому ваши входы должны выглядеть так (обратите внимание на атрибут name):
echo "<td>Sex :<input type='text' name='name[]' value='".$row['name']."' /></td>";
Тогда в PHP $ _POST ['name'] будет массив:
foreach($_POST['name'] as $name){
Надеюсь это поможет…
Вы должны создать свой sql динамически и выполнить последнее предложение sql. Вы можете использовать цикл foreach для проверки всех идентификаторов и просто присоединить каждую инструкцию к строковой переменной. Вы можете найти здесь пример: http://www.youtube.com/watch?v=ImirOX73atc
Вы должны изменить код, который обрабатывает опубликованные данные в цикле, например
<?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>"; ?>
а также итерацию $ i в цикле while, в которую вы получаете результаты MySQL.
Или вы можете использовать пост-массивы, как это подразумевается в другом ответе.