使用单个提交按钮更新多个SQL记录

时间:2011-10-21 02:47:55

标签: php mysql

场景:我有多个文本框,用户可以将数据输入其中一些/全部/或者都不是。

目标:我需要能够根据用户输入数据的文本框中的内容更新多条记录。

问题:当我尝试更新每个文本框的每条记录时,更新语句不起作用。

以下是代码:     

$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的更新语句没有用我放入的内容更新数据库。

我不确定它有什么问题:(。

感谢任何帮助!

谢谢!

2 个答案:

答案 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数组那样从零开始。