我想在插件的WP中发布数据库

时间:2012-12-07 06:42:42

标签: php wordpress wordpress-plugin

我正在使用一个表单在wordpress中使用插件添加数据,但是当我输入submitt按钮时它没有显示任何内容并且没有数据添加到表中我做错了?任何人都可以帮助我。 我的插入数据代码在这里......

  <form id="form1" name="form1" method="post" action="">
  Name
  <input type="text" name="name" /> </br>
  Website 
    <input type="text" name="website" /> </br>
    Description
    <input type="text" name="description" /> </br>
    <input type="submit" value="Submit Form" />
     </form>
    <?php
    global $wpdb;
    $wpdb->query($structure);
    $wpdb->query="insert into ".PRO_TABLE_PREFIX."tutorial ( name, website, description )
    values('{$_POST['name']}','{$_POST['website']}','{$_POST['description']}')";
    if (is_object($wpdb) && is_a($wpdb, 'wpdb')) {
    if (!$wpdb->insert('.PRO_TABLE_PREFIX.tutorial',
    array(
                            'name'=>$_POST[name]
                            ,'website'=>$_POST[website]
                            ,'description'=>$_POST[description]
                ))) exit; 
                } 
else {echo 'Form Submitted';}
?>

1 个答案:

答案 0 :(得分:1)

空白页通常表示内部50x错误,通常由PHP或您的网络托管软件(可能是Apache)引起。

$wpdb->query="insert into ".PRO_TABLE_PREFIX."tutorial ( name, website, description )
    values('{$_POST['name']}','{$_POST['website']}','{$_POST['description']}')";

$wpdb->query=无效。代码应为:

 $wpdb->query("insert into ".PRO_TABLE_PREFIX."tutorial ( name, website, description )
values('{$_POST['name']}','{$_POST['website']}','{$_POST['description']}')");

因为$ wpdb-&gt;查询是一个函数,而不是一个变量。

更新:(更深入)

首先,让我首先链接到wpdb documentation。为了您的目的,您需要这样做:

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

注意:在输入表名时,不要包含“wp_”前缀。 “wp_”前缀可以通过许多内容进行更改,但它始终存储在$wpdb->prefix中,因此请始终使用此前缀而不是键入默认前缀。

global $wpdb;

$wpdb->insert($table,array(
    "name" => mysql_real_escape_string($_POST['name']),
    "website" => mysql_real_escape_string($_POST['website']),
    "description" => mysql_real_escape_string($_POST['description'])
));

这会将记录输入您的数据库。 mysql_real_escape_string对于保护自己不受MYSQL Injection的影响很重要。这就是它的全部内容。

更新2:(对下一条评论的回复)

然后您需要进行PHP检查以查看表单是否已提交。您可以简单地添加if(isset($_POST)){},但我个人不喜欢这样做,因为如果另一个表单通过帖子提交到此页面,数据库仍会更新。

<?php if(!isset($_POST[PLUGIN_PREFIX.'submit'])){ 

    global $wpdb;
    $table = $wpdb->prefix.PLUGIN_PREFIX."my_table";

    // $wpdb->insert will return true or false based on if the query was successful.
    $success = $wpdb->insert($table,array(
        "name" => mysql_real_escape_string($_POST[PLUGIN_PREFIX.'name']),
        "website" => mysql_real_escape_string($_POST[PLUGIN_PREFIX.'website']),
        "description" => mysql_real_escape_string($_POST[PLUGIN_PREFIX.'description'])
    ));

    if($success){
        $display = '<div class="'.PLUGIN_PREFIX.'submit_success">
            Your data has been saved.
        </div>';
    }else{
        $display = '<div class="'.PLUGIN_PREFIX;.'submit_fail">
            Your data failed to save. Please try again.
        </div>';
    }
}

$display .= '<form id="form1" name="form1" method="post" action="">
    <label for="name">Name</label>
    <input id="name" type="text" name="'.PLUGIN_PREFIX.'name" /> </br>

    <label for="website">Website</label> 
    <input id="website" type="text" name="'.PLUGIN_PREFIX.'website" /> </br>

    <label for="description">Description</label>
    <input id="description" type="text" name="'.PLUGIN_PREFIX.'description" /> </br>

    <input type="hidden" name="'.PLUGIN_PREFIX.'submit" />
    <input type="submit" value="Submit Form" />
</form>';

return $display;

我添加的一些内容似乎是良好的插件开发的一部分:

  • 插件中第一个文件的第一行之一应该有一行类似于define('PLUGIN_PREFIX', 'plugin_name_');的行。在可能与其他插件冲突的任何内容之前使用前缀。
  • <label>标签非常重要。如果标签的“for”与输入的“id”匹配,则单击标签将选择该输入。
  • 返回包含HTML的变量是显示插件的正确方法。如果您在插件上方的该页面上有其他内容,并且您只是回显表单,则无论短代码的位置如何,表单都将显示在其他所有内容之上。