php更新脚本无法正常工作

时间:2014-04-17 21:03:20

标签: php sql edit

bellow是PHP编辑脚本的代码。我知道它没有受到保护,因为它是一个例子,但它似乎无法工作,从我能在语法上看到它可以,但我可能会遗漏一些东西。

代码:

<?php
$connect = mysql_connect("localhost","root","");
if (!$connect){
die("Connection failed:" . mysql_error());
}
mysql_select_db("test",$connect);


if (isset($_POST['update'])){
$UpdateQuery = "UPDATE tbl_venues SET venue_id='$_POST[id]', venue_name='$_POST[name]', venue_description ='$_POST[desc]', venue_address ='$_POST[address]', venue_type ='$_POST[type]' WHERE venue_id='$_POST[hidden]'"; 
mysql_query($UpdateQuery, $connect);


};

$sql = "SELECT * FROM tbl_venues ORDER BY venue_id";
$mydata = mysql_query($sql,$connect);
echo "<table border=1>
<tr>
<th>Venue ID</th>
<th>Venue Name</th>
<th>Venue Description</th>
<th>Venue Address</th>
<th>Venue Type</th>
</tr>";
while($record = mysql_fetch_array($mydata)){

echo"<form action=venuelist.php method=post>";
echo "<tr>";
echo "<td><input type='text' name='id' value='" . $record['venue_id'] . "'> </td>";
echo "<td><input type='text' name='name' value='"  . $record['venue_name'] . "'> </td>";
echo "<td><input type='text' name='desc' value='"  . $record['venue_description'] . "'> </td>";
echo "<td><input type='text' name='address' value='"  . $record['venue_adress'] . "'> </td>";
echo "<td><input type='text' name='type' value='"  . $record['venue_type'] . "'> </td>";
echo "<td><input type='hidden' name='hidden' value='" . $record['venue_id'] . "'> </td>";
echo "<td><input type='submit' name='update' value='update' " . "'> </td>";
echo "</form>";
}

echo "</table>";
mysql_close($connect);
?>

它显示的数据证明它不是连接问题,但数据在行中存在撇号时停止显示。主要问题是它拒绝更新该领域。

有什么建议吗?感谢

2 个答案:

答案 0 :(得分:1)

如果值包含撇号,则会破坏html。

e.g。你渲染的html看起来像这样:

<input type='hidden' name='hidden' value='it's a problem'>

大多数框架会通过自动转义有问题的字符来自动阻止此类问题,因此您无需手动执行此操作。 (例如CakePHP和许多其他人)

答案 1 :(得分:0)

这是一种在输出中转义单引号的方法。它使用the php function str_replace

$myString = "testing 'this' is a problem";
$myString = str_replace('\'', '\\\'', $myString);
echo $myString;

至于如何在进入数据库的途中删除那些单引号,请查看预处理语句。它是保护数据库免受SQL注入的可靠方法。特别要看看this canonical question and answer on the topic。您的更新语句不起作用,因为单引号会破坏SQL查询。因此,您必须以某种方式处理这些问题,准备好的声明是最佳实践。