0

送信したいフォームがあるとします。私はそれとフォームを構築しましたaction=""。そのため、投稿されたデータには次の方法でアクセスできますif(isset($_POST['something']))

例 form.php (コードはチェックされておらず、要点を説明するためのものです):

<?php
    $result = '';

    if (isset($_POST['something']) {
        $sql = 'SELECT * FROM aTable WHERE Name = :name';
    $stmt = $db->prepare($sql); 
    $stmt->execute(array(':name' => $_POST['something']);   
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    
    }
?>

<form action="" method="post">
    <input type="text" name="something" />
    <input type="submit" value="post" />
</form>

<div id="result">
    <pre>
    <?php echo $result; ?>
    </pre>
</div>

ユーザーがjsを有効にしている場合、jquery/jsでフォームを処理したいと思います。

私はこれを行う方法を知っています。ただし、2 つの php ファイルで同じクエリを実行するなど、データベース アクセスに問題があります。jsがオフになり、データの連想配列を返すときに使用される元のフォームページの1つ。次に、json を返す ajaxData.php がありますが、基本的には同じ SQL クエリです。

例 AJAXDATA.php

<?php
    $result = '';

    if (isset($_POST['something']) {
        $sql = 'SELECT * FROM aTable WHERE Name = :name';
    $stmt = $db->prepare($sql); 
    $stmt->execute(array(':name' => $_POST['something']);   
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    

    echo json_encode($result);
    }

?>      

私の意見では、同じコード、同じデータアクセスなどを 2 回 (form.php 用に 1 回、ajaxdata.php 用に 1 回) 書いているため、これは非効率的です。

ajaxが通常のフォーム送信と同じデータベースアクセスとSQLコードを使用するように、フォーム/ファイルをどのように構成すればよいですか?

4

1 に答える 1

1

HTMLの場合、有効化/無効化を処理するためにイベントを
追加しますonSubmitjs

     <form action="" method="post" onSubmit="return process_ajax();">
       <input type="text" name="something" />
       <input type="submit" value="post" />
     </form>

precess_ajax()フォームが送信されないようにfalseを返し、js無効になっている場合はフォームが送信されます。すべてのパラメータは、フォームが投稿された場​​合と同じである必要があります。投稿がフォームによるものか、サーバー側でテストするために、追加のパラメータを送信しAJAXます。ajaxFormAJAX

次に、サーバー側のPHPコードについて、追加のパラメーターが設定されているか、 送信応答で送信ajaxFormした値があるかどうかを確認します。それ以外の場合は、 HTMLページを送信します。コードは次のようになります AJAXJSON

      if (isset($_POST['something']){
        $sql = 'SELECT * FROM aTable WHERE Name = :name';
        $stmt = $db->prepare($sql); 
        $stmt->execute(array(':name' => $_POST['something']);   
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);    
        if(isset($_POST['ajaxForm'])){
          //send JSON response
        }
        else{
          //show html page here
        }   
      }

    ?> 
于 2013-01-02T05:53:29.777 に答える