我希望用户能够输入特殊字符并仍然可以提交给数据库。
我已经使用输入进行了测试: Dave& '“* ,但它不存储在数据库中。如果我不使用上面的特殊字符,只需使用 Dave ,它就可以存储得很好。
我尝试了两件事:
<p class="clearfix">
<label for="name">name</label>
<input class="validate[required]" id="name" name="name" type="text" value="'.esc_attr($_POST['name']).'">
</p>
和
<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");
}
答案 0 :(得分:0)
这里适用的两个非常简单的规则:
(添加到XML,添加到URL / GET参数,将数据放入电子邮件等的类似规则 - 每种都有处理它的方法。)
因此,在插入数据库时,请使用PDO预处理语句或mysqli预处理语句,因为这将使数据安全。如果不能,则将字符串包装在mysql_real_escape_string()
中。它不会改变进入(并因此出现)数据库的内容,只是让它安全进入。
当您在第二个示例中显示屏幕时,请使用htmlentities()
或mysqlspecialchars()
。如果你知道如何处理报价,mysqlspecialchars是最好的,但如果不确定,请使用htmlentities。
我在看的时候,我看到你正在发送一封电子邮件。确保从添加到电子邮件标题的值中删除换行符和伪边界,并从正文中删除伪边界(换行符确定)。最好使用脚本来发送电子邮件,因为它们很难用来证明垃圾邮件。