0

I want users to have the ability to enter special characters and for it to still submit to the DB.

I have tested using the input: Dave & ' " *, however it doesn't store in the database. If I don't use special characters as per the above and just use Dave, it stores just fine.

I have tried 2 things:

<p class="clearfix">
                        <label for="name">name</label>
                        <input class="validate[required]" id="name" name="name" type="text" value="'.esc_attr($_POST['name']).'">
                    </p>  

and

<p class="clearfix">
                        <label for="name">name</label>
                        <input class="validate[required]" id="name" name="name" type="text" value="'.htmlspecialchars($_POST['name']).'">
                    </p>  

Neither work.

Database insertion code after payment:

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");
}
4

1 回答 1

0

两个非常简单的规则适用于此:

  1. 当且仅当插入数据库时​​,使字符串安全地插入数据库
  2. 当且仅当在屏幕上显示时,使字符串安全地显示在屏幕上。

(添加到 XML、添加到 URL/GET 参数、将数据放入电子邮件等的类似规则 - 每个都有处理它的方法。)

因此,当插入数据库时​​,请使用 PDO 准备语句或 mysqli 准备语句,因为这将使您的数据安全。如果不能,则将字符串包装在mysql_real_escape_string(). 它不会改变进入(并因此出来)数据库的内容,只是让它安全进入。

当在屏幕上显示时,就像你在第二个例子中一样,使用htmlentities()or mysqlspecialchars()。如果您知道如何处理引号,则最好使用 mysqlspecialchars,但如果不确定,请使用 htmlentities。

当我在做的时候,我看到你正在发送一封电子邮件。确保从添加到电子邮件标题的值中删除换行符和假边界,并从正文中删除假边界(换行符OK)。最好使用电子邮件脚本,因为它们很难防止垃圾邮件。

于 2012-11-16T02:59:03.477 回答