-1

私が抱えているこの問題の論理を理解するのは難しいと感じています。

現在、送信時に Results.php に移動する search.html ページがあります。次に、検索ページに入力されたものを mysql で検索するコードがあります。

では、検索と結果を同じページに表示するにはどうすればよいでしょうか。検索ページから変数を返すにはどうすればよいですか? たとえば、使用する前に;

$search_term = $_POST['name'];

同じページにある場合、「名前」変数を取得するにはどうすればよいですか?

編集: 2 番目の問題

多くの人が答えたコードが機能しています。どうもありがとうございました! 私は今、2番目の問題に来ました。検索クエリ用のテキスト ボックスと、検索対象のドロップダウン ボックスの 2 つの入力があります。

次に、ユーザーが送信を押すと、データベースが検索されます。これはすべて正常に機能します。別のドロップダウンボックスを作成して、ユーザーが提供された結果を適切な方法で並べ替えることができるようにします。たとえば、価格が高いものから低いものなどです。

HTML コードは既に作成済みですが、ご想像のとおり、サブミットを押してページをリロードすると、ユーザーが以前に何を検索したかがわからないため、php を終了し、新しいページの読み込みのように動作します。

URL: http://helios.hud.ac.uk/u0862025/db/test.php

それをいじって、送信を押してデータベース内のすべての製品を持ち上げます。

4

4 に答える 4

2

すべてを 1 つのファイルにまとめることもできます。これは大雑把で完全に不完全ですが、次のようなものです -

<?php
$results = array();
$term = "";

if(isset($_POST['name']))
{
    $term = $_POST['name'];
    $order_by = "";

    if(isset($_POST['order'])
    {
        switch($_POST['order'])
        {
            case "price-high-low":
                $order_by = "ORDER BY `price` DESC";
            break;
            case "name":
                $order_by = "ORDER BY `name` ASC";
            break;
            default:
                $order_by = "ORDER BY `id` DESC";
            break;
        }
    }

    $sql = "SELECT * FROM `your_table` WHERE `name` LIKE '%". sanitized($_POST['name']) ."%' $order_by";

    //run query and assign the results to a variable, like $results
}
?>
<form action="" method="post">
    <input type="text" name="name" value="<?php echo $term; ?>"><br>
    <?php if(!empty($results)): ?>
    <select name="order">
        <option value="price-high-low">Price: High to Low</option>
        <option value="name">Name</option>
    </select>
    <?php endif; ?>
    <input type="submit" value="submit">
</form>

<?php if(!empty($results)): ?>
Results for term: <?php echo $term; ?><br>
<?php foreach($results AS $res): ?>
    <?php echo $res['name']; ?><br>
<?php endforeach; ?>
<?php endif; ?>

もちろん、これは非常に大雑把で、多くのことを前提としています。そのように、結果は配列です。結果に名前などのキーがあること。

しかし、あなたが尋ねたように、これはすべて 1 つのページにあり、それが基本的な考え方です。

ご不明な点がございましたら、お気軽にお問い合わせください。必要に応じて更新する場合があります。

** 更新 1 ** この例を更新して、結果が作成された後にのみ表示されるドロップダウンを検討しました。注文パラメータを追加してフォームを再送信します。この例では、ページネーションを考慮しておらず、入力をクリーンアップするサニタイズ関数があることを前提としています。明らかに、mysqli または PDO を使用する必要があります。どちらもこれに対するソリューションを提供します。mysql_real_escape_string のような mysql_ 関数に依存しないでください。すべての mysql_ は非推奨であり、今後は使用しないでください。

于 2013-01-24T01:43:17.307 に答える
1

同じページでフォームと php コードを作成してみてください。送信ボタンに「名前」を付けます。search.phpがあるとしましょう:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <input type="text" name="name" />
    <input type="submit" value="submit" name="search_button" />
</form>

<?php
if(isset($_POST['search_button'])) {
    $search_term = $_POST['name'];
    //DB query here
    //echo the result you get from query
}
?>
于 2013-01-24T01:55:54.977 に答える
1

まったく同じ方法です。唯一の違いは、フォームが送信されたかどうかを確認する必要があることです

if (!empty($_POST)) {
    // do your search here
    // and show the results
}

そして明らかに、フォーム アクションはサイト自体を指さなければなりません。空のままにしておくのが最善です。

<form method="POST" action="">
于 2013-01-24T01:40:35.113 に答える
1

Ajax 呼び出しを使用して mysql からクエリを作成し、同じページに結果を表示できます。良い例はhttp://www.w3schools.com/php/php_ajax_database.aspにあります。

于 2013-01-24T01:42:50.960 に答える