将表单值插入数据库时出错

时间:2013-08-27 作者:sun

您好,我决定在一个单独的表中存储几个值,所以我创建了它,现在我使用一个表单来存储值,但当我处理该表单时,我遇到了错误Trying to get property of non-objectCall to a member function insert() on a non-object 即使我宣布global $wpdb;

这是表格

<form action="formaction.php" method="post">
    <input type="text" name="name1" value="">
    <input type="text" name="name2" value="">
    <input type="submit" name="submit" value="add">
</form>
形成作用。php

if(isset($_POST[\'name1\']))
{
    $db_data1=$_POST[\'name1\'];
}
if(isset($_POST[\'name2\']))
{
    $db_data2=$_POST[\'name2\'];
}
function res()
{
 global $wpdb,$db_data1,$db_data2;
        $my_table_name=$wpdb->prefix."my_table";
        $name1=$db_data1;
        $name2=$db_data2;
        $rows_affected = $wpdb->insert( $my_table_name, array( \'first\' => $name1, \'last\' => $name2 ) );
}

res();
根据错误$wpdb不是对象,但我使用了global,这段代码中的错误是什么?我做得对吗?

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

您直接发布到formaction.php, 因此,WordPress从未加载,因此您无权访问其任何API,包括存储在中的数据库APIglobal $wpdb (导致错误的原因)。我建议将所有内容都保存在WordPress中。。。一种有用的表单处理方法是使用admin-post.php (如果您熟悉WordPress的ajax处理,这是一个类似的想法)。

这个想法是你发布到url

 .../wp-admin/admin-post.php
你可以通过admin_url(\'admin-post.php\');. 然后你发布了一个unique 的值action 变量(比如说wpse111797_form_submitted). 当表单提交给admin-post.php, WordPress将触发挂钩:

  • admin_post_wpse111797_form_submitted - 如果您已登录in
  • admin_post_nopriv_wpse111797_form_submitted - 如果您已登录out
因此您的表单可能如下所示:

<form action="<?php echo admin_url(\'admin-post.php\'); ?>" method="post">
    <input type="hidden" name="action" value="wpse111797_form_submitted">

    <input type="text" name="name1" value="">
    <input type="text" name="name2" value="">

    <input type="submit" name="submit" value="add">

</form>
请不要忘记使用nonces 验证意图。

然后,您可以挂接上述任何一个挂接(或两者都挂接),具体取决于您是要处理登录用户、来宾提交的表单,还是同时处理这两个用户提交的表单。

function wpse111797_form_handler(){

   global $wpdb;
   $name1 = isset( $_POST[\'name1\'] ) ? $_POST[\'name1\'] : null;
   $name2 = isset( $_POST[\'name2\'] ) ? $_POST[\'name2\'] : null;

   //TODO Check nonces & permissions first!

   $my_table_name=$wpdb->prefix."my_table";

   $rows_affected = $wpdb->insert( $my_table_name, array( \'first\' => $name1, \'last\' => $name2 ) );

   //Redirect user to a \'success\' page, or from back whence they came!
}

//Attach callback to hook (in this case, the hook for logged-in users)
add_action( \'admin_post_wpse111797_form_submitted\', \'wpse111797_form_handler\' );

结束

相关推荐

使用$wpdb获取带Term的自定义帖子类型

我正在尝试获取第一个自定义帖子类型的标题,其中包含分类法中的特定术语<但是我不擅长SQL,因此使用$wpdb.这是我的代码:$posts = $wpdb->get_results(\" SELECT ID, post_title FROM $wpdb->posts LEFT JOIN $wpdb->term_relationships LEFT JOIN $wpdb->term_taxonomy