web-dev-qa-db-ja.com

データベースにテキストボックスの値を保存する

私はWordPressの初心者ですが、テキストボックスから値を取得してWordPressのデータベースに保存したいのであれば、PHPプログラミングに長けています。

元の

form1.html

<form name="form" method="post" action="value_get.php">
<input type="text" id="t1" name="t1">
<input type="submit" value="submit">
</form>

value_get.php

<?php

$firstname = mysqli_real_escape_string($con, $_POST['tb1']);

$con=mysqli_connect("localhost","root","","wordpress");
// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

mysqli_query($con,"INSERT INTO wp_exTable (FirstName)
VALUES ('$firstname')");


if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "1 record added";

mysqli_close($con);
?>

WordPressでこれらのことができますか?少し調整して

2
lost_in_magento

PHPからWordPressへ

プログラミングとPHPの経験がある場合、フォームからのデータの保存には基本的に次の手順が含まれることを知っています。

  • 検証
  • 除菌
  • データベースへの接続
  • データベースに値を保存する

「プレーン」PHPがすべての場合に機能する場合でも、WordPressにはヘルパーと特定のベストプラクティスがあります。

検証

これは、WordPressがあまり役に立たない唯一の部分です。 PHPはあなたの友達です。

消毒

WordPressには、サニタイズ用のさまざまなヘルパーがあります。

フォームからのデータには、使用できるsanitize_text_field()などのさまざまなsanitize_ *関数があります。それらを見つける here 。リンクにあるすべての関数がスコープに役立つわけではないことに注意してください。

データベースへの接続

WordPressコンテキストでは、データベースに接続しません。 WordPressに任せてから、データベースAPIを使用してデータベースでクエリを実行します。

WordPressデータベースAPIは、グローバル$wpdb変数で使用可能なwpdbオブジェクトにまとめられています。

他に何もする必要はありません。 WordPressも必要に応じて接続を閉じます。

データベースに値を保存

global $wpdb APIのドキュメントが利用可能です here 。ご覧のとおり、多くの方法があります。

おそらく最も有用なのは、CRUDの操作のヘルパーです。

  • get_results()/get_row()/get_col()/get_var()
  • insert()
  • update()
  • delete()

上記で紹介したsanitize_*関数でサニタイズされたデータは、データベースに保存する前にデータベース固有のメソッドでエスケープする必要があることに注意することは重要ではありません。

スコープには、メソッド prepare() があり、sprintfのような構文を使用してSQLステートメントをエスケープする方法を提供します。

フォームページとフォーム処理ルーチン

フォームからのデータをprocessするには、上記のすべてが必要です。

ただし、次のものも必要です。

  • フォームを配置する「ページ」
  • 配置する「場所」フォーム処理ルーチン

フロントエンドおよびバックエンドのフォームページ

WordPressでは、フロントエンドに属するフォームとバックエンドに属するフォームの2つのカテゴリのフォームを区別できます。

フロンエントフォームの場合、おそらくすべてのHTMLをテンプレートの1つに配置し、それで終わりです。

バックエンドフォームの場合、多くの可能性があります。

投稿に関連する値を保存する場合は、おそらく メタボックスを追加 にして、そこにフォームを配置します。実際、この場合、「完全な」フォームを使用するのではなく、投稿編集フォーム全体の一部となるフォーム入力のみを使用します。

特定の「フック」を使用して、分類法、ユーザーなどの編集/作成フォームにフィールドを追加するために、同じアプローチをとることができます。このWebサイトおよびWeb全般には、これに関する例とガイダンスが多数あります。

保存するデータがWordPressコアの「エンティティ」と完全に無関係である場合(たとえば、カスタムプラグインのオプションページを作成する場合)、おそらく 管理ページを登録する そしてフォームをそこに配置します。

フォーム処理

フォームからのデータを処理する方法は、printedの方法によって異なります。

既存のWordPressフォームにフィールドを追加する方法を使用した場合、独自のルーチンを使用することはできませんが、hook既存のルーチンとデータを処理します。

たとえば、投稿メタボックスを追加した場合、フィールドは投稿の編集/作成フォームに追加され、 save_post または WordPressの保存時に起動される他のフックをフックする必要があります投稿yourフォームフィールドからのデータをチェックして処理します。

フォームがフロントエンドから来た場合、またはバックエンドで完全に新しいフォームを作成した場合、フォームを処理するファイルを作成したくなるかもしれません。

WordPress環境($wpdbオブジェクトを覚えていますか?)を使用するため、これは実際には機能しません。したがって、手動でbootstrap WordPressが必要になります。

代わりに次のことができます。

  • フォームを含む同じページにフォームを送信し、マークアップの上に処理コードを配置します。処理コードとマークアップコードの混在は維持するのが面倒なので、これは実際には推奨されません。
  • フォームをadmin-ajax.phpに送信し(完全なURLはadmin_url('admin-ajax.php')を介して取得されます)、"admin_ajax_{$action}"/admin_ajax_nopriv_{$action}を使用してルーチンをフックします。 AJAX_in_Pluginsに関するコーデックス を参照してください。
  • フォームをadmin-post.phpに送信し(完全なURLはadmin_url('admin-post.php')を介して取得されます)、"admin_post_{$action}"/admin_post_nopriv_{$action}を使用してルーチンをフックします
  • REST API を使用してカスタムルートを登録し、RESTルートハンドラーでフォームを処理します

データ構造について

WordPressには独自のテーブルと特定のデータ構造があります。

dbDelta 関数を使用すると、カスタムテーブルを作成でき、$wpdbオブジェクトは引き続きそれらを操作できますが、これはできるだけ避ける必要があります。

理由は、WordPressのカスタムテーブルは維持するのが面倒であり(WPには移行やフィクスチャのようなものが欠けている)、カスタムテーブルを使用すると、適合する場合に利用可能なWordPress APIの多くを使用する可能性が失われるためですデータをWordPressコアの「エンティティ」に入れます。

たとえば、データが投稿に関連している場合は、分類法を使用するか、メタを投稿して保存できます。

データがユーザー関連のデータである場合、ユーザーメタ、または分類用語に関連するデータの用語メタを使用できます。

「汎用」データの場合は、オプションを使用するか、テーマ固有の統合の場合はテーマの変更を使用できます。

そうすると、データを取得/保存する必要があるときに、wpdbメソッドを使用する代わりに、特定のAPIを使用できます。

タクソノミポストメタタームメタユーザーメタオプション 、- テーマの変更 ...データへのアクセスを簡素化し、キャッシュ、フィルタリング機能、コアの他の部分との互換性(カスタマイザーやREST APIなど)を提供します。 )、プラグインとの互換性...

3
gmazzap

データベースに値を保存する簡単な解決策はWordPressのadd_option()関数を使うことです。データベースのwp_optionsテーブルに値を格納します。

$firstname = mysqli_real_escape_string( $con, $_POST[ 'tb1' ] );
add_option( 'first_name' , $firstname );
echo "1 record added";

その後、get_option( 'first_name' )を使用していつでも値にアクセスできます。

よりカスタマイズされたクエリを実行したい場合は$wpdb->query()を使用してください。詳しくは ẁpdb Codexのページを読んでください。

2
Ram Shengale

フロントエンドにテキストボックスを表示し、データベースにデータを保存するには、次の手順に従います。

  1. アクティブ化されたテーマフォルダにphpファイルを作成し、次のコードを入力してください: enter image description here 

  2. 今すぐバックエンドのページメニューを使用してWordpressにページを作成し、あなたはページの右側に "Page Attribute"セクションを得るでしょう。 。

  3. 今すぐページを表示すると、ページ上にテキストボックスが表示されます。

  4. 値を入力して保存すると、値はカスタマイズされたテーブルのデータベースに保存されます。
2
Arpita Hunka

mysqli_connectのようなネイティブのPHP関数を使う代わりに、WordPressが提供する可能性を利用するべきです。これは互換性と保守容易性の理由からより優れています。つまり、 wpdbクラス を使用することができます。これはWordPress自身のデータベーステーブルだけでなく外部のものにも使用できます。新しいエントリを追加するには、クラスのinsert()メソッドを使用します - 詳細については、wpdb Codexページの INSERT rows セクションを参照してください。以下にいくつかの例示的なコードがあります。

global $wpdb;
$fname  = $_POST[ 'txt_fname' ];
$lname  = $_POST[ 'txt_lname' ];
$tbl    = 'wp_exTable';
$others = $_POST[ 'txt_email' ];
$wpdb->insert(
    'wp_exTable',
    array(
        'first_name' => $fname,
        'last_name'  => $lname,
        'email'      => $others
    ),
    array(
        '%s',
        '%s',
        '%s'
    )
);

大事なことを言い忘れましたが、あなたが実際に追加のテーブルを必要としているのなら、あなたはおそらくその事実について考えるべきです。たとえば、@ RamShengaleが提案したようなポストメタを利用できます。

Wordpressでデータベースのレコードを更新するためにこのコードを試してください。これのために最初にあなたの選択されたwordpressフォルダの中にfile.phpを作成しそしてそれからテンプレートとしてこのファイルを使用しなさい。そしてこのコードは完璧に動作します、そして名前を検証するための正しい正規表現を誰かが知っているなら私に示唆してください。皆さん、ありがとうございました。

<?php /* Template Name: your template name */ ?>
<style>
.error {color: #FF0000;}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"
        type="text/javascript"></script>
    <link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css"
        rel="Stylesheet" type="text/css" />
<script type="text/javascript">
    $(document).ready(function() {
            //this calculates values automatically 
            $("#name").keypress(function() {
            validate();
            });
            });
function validate() {

            /*=============== Validate The Name ======================*/
                var fname =document.forms["abc"]["name"].value; 
                var name_regex = /^[a-z A-Z]+$/;
            if(fname == 0||fname==null )
            {
                    document.getElementById('nameErr').innerHTML = "* Please fill your name";
                    return false;
            }
            else
            {
                    if (!fname.match(name_regex)) {
                    document.getElementById('nameErr').innerHTML = "* Name should be alphabet";
                    return false;
                    }
                    else{
                                document.getElementById('nameErr').innerHTML = "";
                    }
            }
}

        <?php get_header(); ?>
        <?php
        if (!empty($_POST)) {
        global $wpdb;
            $table = wp_tablename;
            $data = array(
                'firstname' => $_POST['yourname']
            );
            $format = array(
                '%s'
            );
            $success=$wpdb->insert( $table, $data, $format );
            if($success){
            echo 'Thanks for submitting your information soon we will contact to you'; 
        }
        }
        else   {
        ?>
        <div class="container">
            <div class="row">
                <form method="post" class="form-horizontal" id="abc" onsubmit="return validate(this)">
                <div class="col-md-3">Full name: </div><div class="col-md-8"> <input type="text" name="yourname" class="form-control" id="name"><span class="error" id="nameErr"></span></div>

                <div class="col-md-6"><input type="reset" name="reset" class="btn btn-danger"></div><div class="col-md-6"><input type="submit" value="Register" class="btn btn-success"></div>
                </form>
            </div>
        </div>
        <?php }  ?>

<?php get_footer(); ?>
0
ABHISHEK GUPTA