场景:我有多个文本框,用户可以将数据输入其中一些/全部/或者都不是。
目标:我需要能够根据用户输入数据的文本框中的内容更新多条记录。
问题:当我尝试更新每个文本框的每条记录时,更新语句不起作用。
以下是代码:
$conn = mysql_connect ($localhost, $user, $pass);
mysql_select_db($db_name, $conn) or die (mysql_error());
$myFile = "/var/www/html/JG/LSP/lsp_ref.txt";
$fh = fopen($myFile, 'r');
$theData = fread($fh, 5);
fclose($fh);
if (isset($_POST['submit'])) {
foreach ($_POST['notes'] as $key=>$value) {
echo $_POST['notes'][$key];
#echo "<br/>";
//echo "$key";
//echo "<br/>";
$query_update = "UPDATE lsp_active SET Notes = ".$_POST['notes'][$key];
$result_update = mysql_query($query_update);
}
#header ('Location:lsp_display.php');
}
$query = "SELECT * FROM lsp_active";
$result = mysql_query($query);
$field_num = mysql_num_fields($result);
echo "<form method='post' action='lsp_display.php'>";
echo "<table border=1>";
$cols = 0;
while ($row = mysql_fetch_assoc($result)) {
if ( $cols == 0) {
$cols = 1;
echo "<tr>";
foreach ($row as $col => $value) {
print "<th>$col</th>";
}
print "<th>Insert Ticket / Notes</th>";
echo "</tr>";
}
echo "<tr>";
foreach ($row as $cell) {
echo "<td>$cell</td>";
}
echo "<td><input type='text' name='notes[]'/></td>";
echo "</tr>\n";
}
echo "<tr><td colspan=8><input type='submit' name='submit' value='Update'/></td></tr>";
echo "</form>";
mysql_free_result($result);
?>
现在,当我打印出$ _POST ['notes'] [$ key]时,它会在文本框中吐出我给出的内容。
但是,我对SQL的更新语句没有用我放入的内容更新数据库。
我不确定它有什么问题:(。
感谢任何帮助!
谢谢!
答案 0 :(得分:4)
看起来您可能需要在单引号中包围$ _POST。
还可以使用函数来清理$ _POST变量。
例如:
function escape($data) {
$magicQuotes = get_magic_quotes_gpc();
if(function_exists('mysql_real_escape_string')) {
if($magicQuotes) {
$data = stripslashes($data);
}
$data = mysql_real_escape_string($data);
}
else {
if(!$magicQuotes) {
$data = addslashes($data);
}
}
return $data;
}
然后你的查询:
$query_update = "UPDATE lsp_active SET Notes = '" . escape($_POST['notes'][$key]) . "'";
修改强>
您还可能希望在UPDATE查询的末尾添加WHERE语句,这样就不会更新表中的所有内容。
答案 1 :(得分:1)
"UPDATE lsp_active a SET a.Notes = '" . mysql_real_escape_string($_POST['notes'][$key]) ."' WHERE a.Index = '" . ($key + 1). "'"
索引是关键字thar是指索引,而不是您的列。所以我定义了一个别名,并明确指出我引用了这个列。此外,Where $ key上的+ 1,因为Index不像PHP数组那样从零开始。