空白页通常意味着内部 50 倍错误,通常由 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->query 是一个函数,而不是一个变量。
更新:(更深入)
首先,让我从链接到wpdb 文档开始。为了您的目的,您需要这样做:
$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 注入很重要。这就是它的全部内容。
更新2:(回复下一条评论)
然后您需要让 PHP 检查表单是否已提交。您可以简单地添加if(isset($_POST)){}
,但我个人不喜欢这样做,因为如果另一个表单通过 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 的变量是显示插件的正确方法。如果您在插件上方的该页面上有其他内容并且您只是回显表单,则表单将出现在其他所有内容之上,无论短代码的位置如何。