0

私はおそらく20時間の研究と試行錯誤のためにこれに取り組んできましたが、解決策が見えません.

これがセットアップです。HTML フォームを持つページ (customer_search.php) があります。ユーザーが $last_name で DB を検索し、結果を同じページのテーブルに表示できるようにしたいと考えています。

最初:これは可能ですか?私は過去数日間、非常に多くのことを読んできました。私は自分自身を疑っていますが、Java を使用せずに、純粋に PHP/HTML を使用して実行できると思います。

私もMVCモデルを使用しています。

これはメインページです (customer_search.php)

<?php include '../view/header.php';


?>

<div id="main">
        <h1>Customer Search</h1>


            <div id="content">
  <form action="" method="post" id="aligned"

        <label>&nbsp Last Name</label>
        <input type="text" name="last_name"/>
        <br />
        <label>&nbsp;<label>
        <input type="submit" value="Search" />


            </div>
        <div id="content">
      <h2>Results</h2>

        <table>
        <tr>
            <th>Name</th>
            <th>Email Address</th>
            <th>City</th>
            <th>&nbsp;</th>
        </tr>
        <tr>
            <td><?php echo $_POST['firstName'] .' '. $_POST['last_name']; ?></td>
            <td><?php echo $_POST['email']; ?></td>
            <td><?php echo $_POST['city']; ?></td>
            <td><form action="customer_display.php" method="post">
                <input type="hidden" name="action" value="get_customer" />
                <input type="hidden" name="customer_id"
                       value="<?php echo $_POST['customer_ID']; ?>" />
                <input type="submit" value="Select" />

            </form>
            </td>

        </tr>
        </table>
      <br />
 </div>

</div>    
<?php include '../view/footer.php'; ?>

これは、使用したい関数 get_customers_by_last_name($last_name) を含む MODEL フォルダー内の customer_db.php です。

<?php
function get_customers() {
global $db;
$query = 'SELECT * FROM customers
            ORDER BY lastName';
$customers = $db->query($query);
    return $customers;
}

function get_customers_by_last_name($last_name) {
global $db;
$query = "SELECT * FROM customers
        WHERE lastName = '$last_name'
        ORDER BY lastName";
$customers = $db->query($query);
return $customers;
 }

コードのオーバーロードをお詫びしますが、これは私の最初の投稿であり、考えられることはすべて試しました。HTMLフォームの姓でDBを検索し、結果をテーブル(同じページ)に表示したいだけで、ページを更新する必要があるかどうかは気にしません。PHP はクライアント側ではなくサーバー側であることを知っているので、更新する必要があります。結果を実際にテーブルに表示することができないようです。結果を取得できた場合、次のステップは顧客を選択して次のページ customer_display.php に渡すことですが、それを超えますそこにブリッジ。ご協力いただきありがとうございます。これに関するヘルプ/レッスンを本当にお願いしています。私は絶望的です!!!!:(

4

4 に答える 4

2

過去にJQueryとjTableを使用してこれと同じことを成功させました。

これは、ページをリロードせずに PHP スクリプトを呼び出すことができる AJAX 呼び出しを使用します。

ここで知る必要があるすべてを見つけることができます: http://www.jtable.org/

于 2012-12-11T04:52:06.627 に答える
2

こんにちは、あなたは宿題をしました。ページを更新する必要があることは正しいです。javascrcipt (たとえばjQuery ) でAjax 呼び出しを使用する予定がない限り

あなたが求めることをするためには、PHP を最初に置く必要があります。

If()フォームが投稿された場​​合にのみ有効になるステートメントに入れます。

あなたのコードで私がすることは次のとおりです。

<?php
if(isset($_POST['last_name'])){
include_once 'customer_db.php';
$customers = get_customers_by_last_name($_POST['last_name']);
 }
 include '../view/header.php';


?>

<div id="main">
        <h1>Customer Search</h1>


 <div id="Search">
  <form action="" method="post" id="aligned"

        <label>&nbsp Last Name</label>
        <input type="text" name="last_name"/>
        <br />
        <label>&nbsp;<label>
        <input type="submit" value="Search" />
  </form>

</div>
<?php if(isset($customers)){ ?>
 <div id="Results">
      <h2>Results</h2>

        <table>
        <tr>
            <th>Name</th>
            <th>Email Address</th>
            <th>City</th>
            <th>&nbsp;</th>
        </tr>
        <tr>
            <?php while ($a_customer = mysql_fetch_assoc($customer)) { ?>

            <td><?php echo $a_customer['firstName'] .' '. $a_customer['last_name']; ?></td>
            <td><?php echo $a_customer['email']; ?></td>
            <td><?php echo $a_customer['city']; ?></td>
            <td><form action="customer_display.php" method="post">
                <input type="hidden" name="action" value="get_customer" />
                <input type="hidden" name="customer_id"
                       value="<?php $a_customer['customer_ID']; ?>" />
                <input type="submit" value="Select" />

            <?php } ?>
            </td>

        </tr>
        </table>
      <br />
 </div>
<?php }?>

</div>    
<?php include '../view/footer.php'; ?>

いくつかの重要なアドバイス:

  1. Msql for php の代わりにMysqli (またはPDO ) ライブラリを使用する
  2. 検索フォームのユーザー入力データを信頼しないでください。投稿をサニタイズするためにjanitor.classを使用できます。
  3. 時間があれば、PHP セキュリティに関する次のリンクを確認してください: Evil UserPHP セキュリティPHP セキュア コーディング
  4. おー!同じページの 2 つの要素に同じid 値を与えないでください。idの目的は、各要素に一意の識別子を与えることです。
于 2012-12-11T05:22:19.077 に答える
0

これがAJAXの目的です...サーバーとの非同期通信(つまり、ページの読み込みではありません)。あなたの最善の策は、おそらく AJAX 呼び出しを簡単にする JQuery または別の JS フレームワークを使用することです$.ajax();:

何かのようなもの:

$.ajax({
  type: "POST",
  url: '/directory/to/php_script_that_outputs_the_table_html.php',
  data: { name: "Smith"},
  success: function(data) {
    $('.class_of_div_to_recieve_code').html(data);
  }
});
于 2012-12-11T04:50:55.187 に答える
0

AJAX を使用して、モデルをインスタンス化し、結果を JSON 文字列で返す PHP オブジェクトを呼び出します。結果を受け取ったら、JavaScript ループを使用して JSON を反復処理し、テーブルを出力します。

独自の .ajax() 関数を持つ jQuery をお勧めします。結果セットで DOM を簡単に操作できます。jQuery ドキュメントを読んでください。

于 2012-12-11T04:55:59.873 に答える