一個空白頁通常意味着內部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-> query是一個函數,而不是一個變量。
更新:(更深入的)
首先,讓我通過鏈接到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的變量是顯示插件的正確方法。如果您在該頁面上的其他內容位於插件上方,並且您只是回顯表單,那麼不管短代碼的位置如何,表單都會顯示在其他所有內容之上。
在'global $ wpdb;'之後加上'$ wpdb-> show_errors();'你會發現你的問題是什麼。 –
Multipost:http://wordpress.stackexchange.com/questions/75250/i-want-to-post-in-database-in-wp-by-plugin – fuxia