使用不同数量的文本框更新 mysql 数据库
Posted
技术标签:
【中文标题】使用不同数量的文本框更新 mysql 数据库【英文标题】:Updating the mysql database with varying number of text boxes 【发布时间】:2012-08-02 01:11:23 【问题描述】:我有多个文本框显示与 mysql 数据库中的一行相对应的字符串。我希望能够通过在文本框中输入并单击提交来更改数据库中的每个字符串。
所以我在连接到数据库后使用 while 循环创建我的文本框。
<form action="<?php $self ?>" form method="post">
<?php
$query = "SELECT * FROM `table` ORDER BY table.ID DESC";
$result = @mysql_query($query) or die('
ERR: The database returned an unexpected error.
');
$num=mysql_numrows($result);
$change="";
$i=0;
while ($i < $num)
$post=mysql_result($result,$i,"post");
$id=mysql_result($result,$i,"ID");
$ts=mysql_result($result,$i,"timeStamp");
$page = html_entity_decode($post);
$output = stripslashes($page);
if ($output != "")
echo '<textarea name="' . $id . '" rows="4" cols="70">' . $output . '</textarea><div class="time"><font face="monospace">' . $ts . '</font></div>';
//creates tables for each filled entry with a name corrsponing to its auto-increment id.
$i++;
?>
<input name="send" type="hidden" />
<div class="mod">
<p><input class="master" type="submit" value="Mod" /></p></div><!--submit button is called "Mod"-->
</form>
</body>
</html>
一切正常显示。如果数据库中有 4 行包含文本,那么它将显示这 4 行,每行都在一个单独的文本框中。
现在我想用用户在文本框中输入的任何内容替换数据库中的文本。这是我尝试过的代码。它什么都不做。
<?php
$i=0;
while ($i < $num)
$id=mysql_result($result,$i,"ID");
$post=mysql_result($result,$i,"post");
if (!isset($_POST[$id]))
$_POST[$id] = "";
$change = $_POST[$id];
mysql_query("UPDATE 'database'.'table' SET 'post' = '$change' WHERE 'table'.'ID' ='$id';");
$i++;
基本上,循环将为表中的每一行运行一次。对于每个文本框,它应该使用 $_POST[1] 更新 'database'.'table' 用于 ID 为 '1' 的 'post',$_POST[2] 用于 ID 为 '2' 的 'post' 等... 相反,什么也没有发生。 任何帮助将不胜感激。
【问题讨论】:
请使用准备好的语句。您的代码不安全。 【参考方案1】:正如 Prowla 提到的,您应该使用 PDO 而不是 mysql_ 函数。 无论如何,我改进了你的代码,它现在应该可以工作了:
<form action="<?php $self ?>" form method="post">
<?php
$query = "SELECT * FROM `table` ORDER BY table.ID DESC";
$result = @mysql_query($query) or die('Query error:'.mysql_error());
$num=mysql_num_rows($result);
$change="";
while($post = mysql_fetch_array($result))
/*
$post = array(
'post' => '....',
'ID' => '...',
'timeStamp' => '...'
);
*/
$page = html_entity_decode($post['post']);
$output = stripslashes($page);
if ($output != "")
echo '<textarea name="posts['.$post['ID'].']" rows="4" cols="70">' . $output . '</textarea><div class="time"><font face="monospace">' . $post['timeStamp'] . '</font></div>';
//creates tables for each filled entry with a name corrsponing to its auto-increment id.
?>
<input name="send" type="hidden" />
<div class="mod">
<p><input class="master" type="submit" value="Mod" /></p></div><!--submit button is called "Mod"-->
</form>
</body>
</html>
php更新文件:
$query = "SELECT * FROM `table` ORDER BY table.ID DESC";
$result = @mysql_query($query) or die('Query error:'.mysql_error());
while($update_post = mysql_fetch_array($result))
$update = (isset($_POST[$update_post['ID']])) ? $_POST[$update_post['ID']] : "";
if($update != "")
mysql_query("UPDATE 'database'.'table' SET 'post' = '$update' WHERE 'table'.'ID' ='".$update_post['ID']."';");
echo "<!--POST ID ".$update_post['ID']." been updated-->\n";
我添加了一个 html 评论 (<!-- -->
),以便您检查更新是否真的发生。
这样你就可以调试你的代码。 (您还应该阅读有关 print_r 、 var_dump 的信息)
【讨论】:
谢谢!从现在开始,我将使用准备好的语句。以上是关于使用不同数量的文本框更新 mysql 数据库的主要内容,如果未能解决你的问题,请参考以下文章