相当新的php,请原谅我,如果我的代码不是很有说服力的话。
我有一个包含多行/单元格的表格/表格。每个单元格都是一个下拉框。我已将其构建为UPDATE现有的mysql-rows。
我无法弄清楚如何按下表单上的提交按钮并更新所有mysql行。我已经成功地单独更新了mysql字段,但这是我第一次尝试同时更新多个sql行。
在我的前端(让我知道你是否需要我发布),我运行以下代码为每个输入创建一个新的增量变量type =“submit”name =“blah”...-
$namefieldname = 'name'.$i;
$positionfieldname = 'position'.$i;
$hoursdropdown = 'hours'.$i;
$overtimedropdown = 'overtime'.$i;
所以name =“blah”我写的是name =“'。$ namefieldname。'”例如。我有一个不同的形式,使用相同的$ i概念来INSERT信息,它工作正常。
下面是我没有开始工作的代码。这就是-form行动的目的。页面处理没有错误 - 但不更新mysql。我已经仔细检查了所有名字,所有内容拼写正确。
现在我已经减少了列,试图让这一列更新mysql。
<?php
include_once('toolbox.php');
//mysql connect info
$projectid = $_POST['projectid'];
$transcriberid = $_POST['transcriberid'];
for($i=0; $i<$staffcount; $i++) {
$positionfieldname = 'position'.$i;
//is a drop down of 5 choices
$thisposition = $_POST[$positionfieldname];
mysql_query("UPDATE transcribers SET transcriber_position='$thisposition' WHERE transcriber_id= '$transcriberid'");
}
header('Location: ./);
?>
答案 0 :(得分:1)
首先,您不应再在新程序中使用mysql
扩展名,因为它自5.5版以来已弃用,并且已在PHP 7.0.0中删除。相反,请使用MySQLi
或PDO_MySQL
扩展名。
其次,在使用它们连接sql语句之前,适当地处理用户给定的数据(例如来自$_POST
)是很重要的。如果用户给出了引号,他/她可以更改您的语句,例如终止它并更新其他表中的其他一些数据。如果您使用PDO_MySQL,函数PDO::quote()可以帮助您防止这种情况:
$thisposition = $mysql_connection->quote($_POST[$positionfieldname]);
更好的是使用准备好的声明。它仅包含使用用户提供的数据的占位符,并且实际数据绑定到此占位符。
$stmt = $mysql_connection->prepare("UPDATE transcribers SET transcriber_position=:value");
$stmt->bindValue(':value', $transcriber_position, PDO::PARAM_INT);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
要更新表中的多个列,您只需列出它们,用逗号分隔,这里有一个示例:
mysql_query("UPDATE transcribers SET transcriber_position='$thisposition', transcriber_value=5 WHERE transcriber_id= '$transcriberid'");