【问题标题】:Saving user input text containing an apostrophe into a database table using $wpdb->insert使用 $wpdb->insert 将包含撇号的用户输入文本保存到数据库表中
【发布时间】:2020-05-19 17:28:02
【问题描述】:

我正在使用 Wordpress 和 MySQL。 我有一个简单的表单来允许用户输入文本字符串。在这种情况下,我要求提供供应商的名称。因此,假设用户输入“Arby's”。 Arby's 包含一个撇号。在用户提交表单后,我使用 $wpdb->insert 将其插入到数据库中的自定义表中。我得到的结果是:

ID 元键元值 13 供应商 Arby\'s

我不知道如何去掉“\”。用户没有输入“\”。当然,我不希望它出现在数据库值中。我只想要它,因为用户输入它 - “Arby's”。我花了很多时间研究这个,并尝试了很多我发现的东西,但没有任何效果。这是我的代码的精简版本,用于演示我的问题以及我尝试过的内容。 ...

global $wpdb;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

    $vendor = $_POST['vendor'];
    $vendor1 = addslashes($_POST['vendor']);
    $vendor2 = esc_attr($_POST['vendor']);
    $vendor3 = sanitize_text_field($_POST['vendor']);
    $vendor4 = esc_html_e($_POST['vendor']);

    echo '<br><br>Post Value: ' . $_POST['vendor'] . '<br>';
    echo 'With Addslashes: ' . $vendor1 . '<br>';
    echo 'With esc_attr: ' . $vendor2 . '<br>';
    echo 'With sanitize_test_field: ' . $vendor3 . '<br>';
    echo 'With esc_html_e: ' . $vendor4 . '<br>';

    $result = $wpdb->insert( 'raw_meta',
        array(
            'meta_key' => 'vendor',
            'meta_value' => $vendor,
        )
    );

} else {
    echo '<form method="post" >';
        echo 'Vendor Name:<br>';
        echo '<input style="font-size:18px;" type="text" name="vendor" autofocus required><br><br>';
        echo '<input type="submit"  value="Save New Vendor" name="submit">';
    echo '</form>';
}

... 代码回显以下内容:

Post Value: Arby\'s
With Addslashes: Arby\\\'s
With esc_attr: Arby\'s
With sanitize_test_field: Arby\'s
With esc_html_e:

我也尝试过其他的方法,但没有任何东西能提供我想要的结果。这似乎是一件很基本的事情;接受来自表单的输入并按输入的方式存储在数据库中。但我不知道为什么它不起作用。如果您有解决方案,我很想听听。但是除了这个特定问题的答案之外,如果有资源可以理解这个问题并学习如何处理它,那就太好了。我没有在教室里,只是自学,所以只是不明白这个话题。谢谢。

【问题讨论】:

    标签: php wordpress forms escaping


    【解决方案1】:

    好吧,我从来没有在这方面得到过帮助,但我终于遇到了如何解决我的问题。所以发生的事情是表单的发布在撇号之前添加了一个斜杠 ()。我在想这是 $wpdb->insert 的问题,但不是这样。

    我如何解决我的问题是使用下面的代码。首先,我找到了 stripslashes 函数,它删除了表单帖子放入的斜杠。然后,我也不得不使用 __() 。不太清楚为什么,但它奏效了。

        $translated = __( stripslashes( $_POST['vendor'] ) );
    
        $result = $wpdb->insert( 'raw_meta',
            array(
                'meta_key' => 'test_data',
                'meta_value' => $translated,
            )
        );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2015-04-25
      • 2011-05-17
      相关资源
      最近更新 更多