Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用wpdb在表单中插入100多个字段的最合适方法->;插入()_Php_Ajax_Wordpress - Fatal编程技术网

Php 使用wpdb在表单中插入100多个字段的最合适方法->;插入()

Php 使用wpdb在表单中插入100多个字段的最合适方法->;插入(),php,ajax,wordpress,Php,Ajax,Wordpress,我有一个WordPress表单,有100多个字段。我使用jQuery表单插件,并使用AJAX以$\u POST字符串发送数据。表中的所有列名与HTML字段中的名称相同 jQuery('#save_form').button().click(function() { jQuery('#action').val('save_form'); form = jQuery('#form'); form.ajaxSubmit({ success: function(r

我有一个WordPress表单,有100多个字段。我使用jQuery表单插件,并使用AJAX以$\u POST字符串发送数据。表中的所有列名与HTML字段中的名称相同

jQuery('#save_form').button().click(function() {
    jQuery('#action').val('save_form');
    form = jQuery('#form');
    form.ajaxSubmit({
        success: function(response) {
            console.log(response);
        }
    });
    return false;
在functions.php中

function save_form(){
    if (!isset($_POST['_nonce']) || !wp_verify_nonce($_POST['_nonce'], 'form')) {
        wp_send_json_error([
            'message' => 'Error! refresh page and try again.'
        ]);
    }

  
//我可以在这里获得$\u POST中的所有值…

//我可以将整个$\u后序列化字符串作为数组传递给数据库,还是需要逐个定义所有值。表单中有100多个值。如果有一种传递所有值的简单方法,是否可以删除不需要的字段,如$\u POST字符串中的_nonce&referer


有很多方法可以做到这一点,这取决于你有什么样的数据,它的用途,它来自哪里,等等

你说列名与字段匹配,所以一个数据库表中有大约100列

你的问题的简短回答是:

,您可以使用对齐的列将该数组传递给数据库

但是 我强调你不应该。您应该根据值的预期类型验证甚至清理这些值。如果你有电话号码,你应该确保没有时髦的符号。如果你有一个网站字段,你应该确保它是一个有效的URL。(您使用的是
wpdb->insert
,因此不必担心SQL注入,但如果使用SQL查询,则需要对其进行参数化并进行准备)

用户是叮咚人,有人将错误类型的数据放在错误的字段中。检查这一点可能会增加平台准备工作的开销,但这将避免以后的许多麻烦

另外,我也忍不住想知道你的“100+列”表是否可以设置得更好。听起来你最好使用一个更类似于WordPress“
post\u meta
table”的表格,它有:

+---------+---------+----------+------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+----------+------------+
你可以用类似的东西,比如

+----+----------+-------+-----------+
| ID | entry_id | field |   value   |
+----+----------+-------+-----------+
|  1 |        1 | email | a@123.com |
+----+----------+-------+-----------+
|  2 |        1 | phone |  123-4567 |
+----+----------+-------+-----------+
|  3 |        1 | name  |      John |
+----+----------+-------+-----------+
|  4 |        2 | email | b@xyz.com |
+----+----------+-------+-----------+

我对你的特定用例没有足够的了解,说100列是错误的(MySQL的最大列大小是4096,所以……),但是我会首先仔细考虑一些DB规范化。

+---------+---------+----------+------------+
| meta_id | post_id | meta_key | meta_value |
+---------+---------+----------+------------+
+----+----------+-------+-----------+
| ID | entry_id | field |   value   |
+----+----------+-------+-----------+
|  1 |        1 | email | a@123.com |
+----+----------+-------+-----------+
|  2 |        1 | phone |  123-4567 |
+----+----------+-------+-----------+
|  3 |        1 | name  |      John |
+----+----------+-------+-----------+
|  4 |        2 | email | b@xyz.com |
+----+----------+-------+-----------+