Php 在$POST中使用esc#u attr或htmlspecialchars不会';不提交给DB?
我希望用户能够输入特殊字符,并且仍然提交给数据库 我已经使用输入进行了测试:Dave&'“*,但是它不存储在数据库中。如果我不按照上面的方法使用特殊字符,只使用Dave,它存储得很好 我试过两件事:Php 在$POST中使用esc#u attr或htmlspecialchars不会';不提交给DB?,php,mysql,escaping,special-characters,Php,Mysql,Escaping,Special Characters,我希望用户能够输入特殊字符,并且仍然提交给数据库 我已经使用输入进行了测试:Dave&'“*,但是它不存储在数据库中。如果我不按照上面的方法使用特殊字符,只使用Dave,它存储得很好 我试过两件事: <p class="clearfix"> <label for="name">name</label> <input class="validate[requir
<p class="clearfix">
<label for="name">name</label>
<input class="validate[required]" id="name" name="name" type="text" value="'.esc_attr($_POST['name']).'">
</p>
这里有两条非常简单的规则:
mysql\u real\u escape\u string()
。它不会更改数据库中的内容,只需确保安全输入即可
在屏幕上显示时,如第二个示例中所示,请使用htmlentities()
或mysqlspecialchars()
。如果您知道如何处理引号,则最好使用mysqlspecialchars,但如果不确定,请使用htmlenties
当我这样做时,我看到您正在发送电子邮件。请确保从添加到电子邮件标题的值中删除换行符和假边界,并从正文中删除假边界(换行符可以)。最好使用电子邮件脚本,因为它们很难防止垃圾邮件。显示更新数据库的代码。如果您没有使用准备好的语句,则需要使用
mysql\u real\u escape\u string()
@Barmar:谢谢Barmar,但是用户可以输入Dave&Jane
,所以我不想逃避&Whoops-完全错过了。现在更新了问题@Barmar。感谢marioThank你的精彩解释。所以实际上我应该为插入-'name'=>mysql\u real\u escape\u字符串($\u POST['name'])这样做,'sale\u date'=>mysql\u real\u escape\u字符串($\u POST['payment\u date']))
?是,也不是。你将ipn_数据传递给你的电子邮件函数,而你不想将mysql转义值传递给它。因此,你自己创建一个参数副本,只转义进入数据库的参数。谢谢-有意义!现在尝试一个测试:)1分钟。我已经更新了我问题中代码的“name”db插入行。仍然没有插入g如果我使用特殊字符。我可以在之后为电子邮件功能制作一个副本-只是尝试先进行插入。那么,$wpdb类在做什么呢?它可能在做一些愚蠢的事情,比如说“包含狗狗字符,所以我不插入。”“.mysql\u real\u escape\u字符串不会删除这些字符,它使它们更加安全,因此再次搜索这些字符仍然会找到它们。
<p class="clearfix">
<label for="name">name</label>
<input class="validate[required]" id="name" name="name" type="text" value="'.htmlspecialchars($_POST['name']).'">
</p>
if(strpos($response['body'], 'VERIFIED') !== false && $_POST['payment_status'] == "Completed") {
//Assign IPN Post Values to Local Variables
$comboString = $_POST['txn_id'].$_POST['payment_date'];
$data = explode('~',$_POST['custom']);
$ipn_data = array(
'name' => mysql_real_escape_string($_POST['name']),
'sale_date' => $_POST['payment_date']
);
$ipn_format = array('%s','%s');
if($ipn_business == $paypal_email) {
$wpdb->insert($wpdb->prefix.'orderdata', $ipn_data, $ipn_format);
$ipn_data['currency'] = $_POST['mc_currency'];
$ipn_data['admin_field'] = $_POST['admin_field'];
send_email($ipn_data);
}
} else {
exit("IPN Request Failure");
}