我有一张表打印出我桌子上的所有用户。每个用户旁边是一个选择框和一个更新按钮。我遇到的问题是脚本只从最后一个选择框中读取。如何使选择框动态化,以便脚本知道选择框来自哪一行?
选择框的代码:
<select name="level" >
<option value="basic" SELECTED>Basic</option>
<option value="premium">Premium</option>
<option value="platinum">Platinum</option>
</select>
<button type="submit" name="update" value="<?php echo $row['id'] ?>">Update</button>
按下提交按钮时生效的另一个脚本中的代码:
if ( isset( $_POST['update'] ) ) {
//Get the ID of the account that will be updated
$userID = $_POST['update'];
//Get the level that the admin wishes to change to
$level= $_POST['level'];
//Connect to the DB
mysql_connect("localhost", "xxxx", "xxxx")or die("Cannot connect to database");
mysql_select_db("xxxx")or die("Database cannot be selected or it doesnt exist");
//Updates the users access level
mysql_query("UPDATE users SET level='$level' WHERE id='$userID' ");
答案 0 :(得分:0)
只需查看html,就会覆盖您的选择框值,因为它们都具有相同的名称。
最简单的解决方案是转换数组中选择框的名称:
<select name="level[<?php echo $row['id']; ?>]" >
不,您可以在服务器端访问它们:
$_POST['level'][$userID]
您还需要切换到PDO / mysqli和带有绑定变量的预处理语句,以避免出现sql注入问题。
答案 1 :(得分:0)
你可以使用jquery。试试这个,
$(document).ready(function(){
var values = [];
$('select[name=level]').each(function() {
values[] = $(this).val();
});
$('button[name=update]').val(values);
});
它只读取最后一行的原因是$row['id']
只包含迭代结果集的最后一行。
答案 2 :(得分:0)
使用此:
<input type="hidden" name="userid[]" value="#THEUSERID"/>
<select name="level[]" >
<option value="basic" SELECTED>Basic</option>
<option value="premium">Premium</option>
<option value="platinum">Platinum</option>
</select>
if ( isset( $_POST['update'] ) ) {
foreach($_POST['userid'] as $k=>$userID){
//Get the level that the admin wishes to change to
$level= $_POST['level'][$k];
//Connect to the DB
mysql_connect("localhost", "xxxx", "xxxx")or die("Cannot connect to database");
mysql_select_db("xxxx")or die("Database cannot be selected or it doesnt exist");
//Updates the users access level
mysql_query("UPDATE users SET level='$level' WHERE id='$userID' ");
}
}