-1

我发现很难理解我遇到的这个问题的逻辑。

目前,我有一个 search.html 页面,在提交时会转到 Results.php。然后有一些代码在 mysql 中搜索输入到搜索页面中的任何内容。

现在,我将如何在同一页面上进行搜索和结果?我将如何从搜索页面返回变量?例如在我使用之前;

$search_term = $_POST['name'];

如果它在同一页面上,我将如何获得“名称”变量?

编辑:第二期

我有很多人回答的代码,非常感谢!我现在遇到了第二个问题。我有两个输入,一个用于搜索查询的文本框,一个用于搜索主题的下拉框。

然后用户然后按提交并搜索数据库,这一切正常。我现在想创建另一个下拉框,以便用户可以按照他们认为合适的方式对提供的结果进行排序,例如价格从高到低等。

我已经完成了 HTML 代码,但正如您可以想象的那样,第二次我按下提交它重新加载页面,并且由于它不知道用户之前搜索过的内容,它退出了 php 并表现得好像它是一个新的页面加载。

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

玩弄它,按提交以解除数据库中的所有产品。

4

4 回答 4

2

您可以将整个内容放在一个文件中。这是粗略且完全不完整的,但是像这样-

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

当然,这是非常粗略的,并且假设了很多事情。就像你的结果是一个数组一样。您的结果有一个名为 name 等的键。

但正如你所问的,这一切都在一页上,这是基本思想。

随时提出任何问题,我可能会根据需要进行更新。

** 更新 1 ** 我更新了此示例以考虑仅在生成结果后显示的下拉列表。它将使用添加的订单参数重新提交表单。此示例不考虑分页,并假设您有一个清理输入的清理函数。显然,您应该使用 mysqli 或 PDO,因为它们都会为此提供解决方案。不要依赖 mysql_ 函数,如 mysql_real_escape_string。所有 mysql_ 都已弃用,不应再使用。

于 2013-01-24T01:43:17.307 回答
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 回答
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 回答