2012-12-07 49 views
0

我正在使用表格在wordpress中使用插件添加數據,但是當我輸入submitt按鈕時,它什麼都沒顯示,也沒有數據添加到表中我犯的錯誤?任何人都可以幫助我。 我對插入數據的代碼是在這裏...我想通過插件發佈WP中的數據庫

<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';} 
?> 
+0

在'global $ wpdb;'之後加上'$ wpdb-> show_errors();'你會發現你的問題是什麼。 –

+0

Multipost:http://wordpress.stackexchange.com/questions/75250/i-want-to-post-in-database-in-wp-by-plugin – fuxia

回答

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-> 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的變量是顯示插件的正確方法。如果您在該頁面上的其他內容位於插件上方,並且您只是回顯表單,那麼不管短代碼的位置如何,表單都會顯示在其他所有內容之上。
+0

然後我在我的代碼中使用?我是一個新手 –

+0

我會更新我的答案,深入一點。給我幾分鐘。 –

+0

這段代碼自動添加數據時,我刷新網頁如何擺脫? –

相關問題