我真的很感激我能得到的任何帮助。
我在使用表单时遇到了麻烦,我似乎无法让mysql_real_escape_string工作。
我正在使用带有PHP的MySQL 5.5并测试它我创建了一个简单的表单 Magic Quotes根本没有打开。
使用此表格:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form name="event_ad" action="test.php" method="post">
<table>
<tr>
<td>Event Name:</td>
<td><input name="event_name" type="text" size="90" /></td>
</tr>
<tr>
<td>Start Date:</td>
<td><input name="start_date" type="text" size="90" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input name="Submit" type="submit" id="Submit" value="Add New Event" /></td>
</tr>
</table>
</form>
</body>
</html>
然后使用test.php
将数据输入到表中<?php
mysql_connect("localhost","username","password") or die(mysql_error());
mysql_select_db("databasename") or die(mysql_error());
$name = $_POST['event_name'];
$sdate = $_POST['start_date'];
$name = mysql_real_escape_string($name);
$sql = "INSERT INTO tblevents (event_name, event_date) VALUES ('" . $name . "','" . $sdate . "')";
mysql_query($sql);
echo "success";
?>
(连接详情已更改)
当我输入事件名称O'Rielly“Smith”时,它将作为O'Rielly“Smith”插入MySQL表中
没有反斜杠,也没有逃脱。
我真的已经在互联网上试图解决这个问题,但它似乎适用于其他所有人。
我想知道一些基本的东西吗? 如果有人能引导我朝着正确的方向前进,我会非常感激。
这是我在这个论坛上发表的第一篇文章,html和代码格式化似乎与我访问过的大多数论坛都不一样,而你无法预览,所以我希望结果没问题。
提前向任何提供帮助的人提供帮助。 干杯Al。
答案 0 :(得分:3)
这是按设计的,您不应该在表格中看到任何转义输入。它只是用于插入。使用mysql_real_escape_string
,您的查询就像
INSERT INTO tblevents (event_name, event_date) VALUES ('O\'Rielly \"Smith\"','1.4.2001')";
这些反斜杠确保你不破坏撇号
MySQL“删除”所有反斜杠,直到它们被反斜杠转义:)
答案 1 :(得分:2)
当我输入事件名称O'Rielly“Smith”时,它将作为O'Rielly“Smith”插入MySQL表中
这是应该发生的事情。
转义使数据通过查询,以便原始数据最终在数据库中。目的不是为存储的数据添加额外的字符,而是通过破坏SQL来阻止具有特殊含义的字符。
答案 2 :(得分:0)
想想在生日礼物上逃避相当于包装纸。
您可以转义数据,以便数据中的任何特殊字符在传输过程中失去其特殊含义。一旦他们“进入”目标系统(html页面,数据库记录等......),就不再需要转义,因为它们可能影响该过程的地方现在已经结束了。
与包装礼物相同 - 收到礼物后,您不再需要包装纸,因此将其移除。
答案 3 :(得分:0)
它运作良好。
删除mysql_real_escape_string
会阻止插入数据。
答案 4 :(得分:0)
$name = $_POST['event_name'];
$sdate = $_POST['start_date'];
$db = new mysqli("localhost", "username", "password", "databasename");
$query = "INSERT INTO tblevents (event_name, event_date) VALUES (?, ?)";
$statement = $db->prepare($query);
$statement->bind_param("ss", $name, $sdate);
$statement->execute();
$statement->close();
$db->close();
(我遗漏了连接错误检查)