0

ワードプレスのプラグインを使用してフォームを使用してテーブルにデータを追加していますが、送信ボタンを入力しても何も表示されず、テーブルにデータが追加されません。誰でも私を助けてください。データを挿入するための私のコードはここにあります...

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

1 に答える 1

1

空白のページは通常、内部50xエラーを意味し、通常はPHPまたはWebホスティングソフトウェア(おそらく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)){}ませんが、個人的には追加するのは好きではありません。別のフォームがこのページに投稿された場​​合でも、データベースは更新されるからです。

<?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;

私が追加したいくつかのことは、優れたプラグイン開発の一部のようです。

  • プラグインの最初のファイルの最初の行の1つには、のような行が必要define('PLUGIN_PREFIX', 'plugin_name_');です。他のプラグインと競合する可能性のあるものの前にプレフィックスを使用してください。
  • <label>タグは非常に重要です。ラベルの「for」が入力の「id」と一致する場合、ラベルをクリックするとその入力が選択されます。
  • HTMLを保持する変数を返すことは、プラグインを表示する適切な方法です。そのページのプラグインの上に他のコンテンツがあり、フォームをエコーするだけの場合、ショートコードの位置に関係なく、フォームは他のすべての上に表示されます。
于 2012-12-07T07:17:03.587 に答える