【问题标题】:Search form with PHP and PDO then display results on page使用 PHP 和 PDO 搜索表单,然后在页面上显示结果
【发布时间】:2019-07-22 06:43:43
【问题描述】:

我正在尝试使用简单的搜索表单搜索我的 SQL 数据库,然后将数据返回到屏幕。

例如,用户可以选择一个年份,然后表格中的所有行结果都会显示该条目的所有信息。这是我的表格:

<form class="" method="POST" action="availability.php"  enctype="multipart/form-data">

                    <select class="form-control mb-3"  name="year" id="year">
                      <option disabled selected>Year</option>
                      <option value="2019">2019</option>
                      <option value="2020">2020</option>
                      <option value="2021">2021</option>

                    </select>

                    <input class="btn btn-blue-grey" type="submit" value="submit">Search
                    <i class="fas fa-search ml-1"></i>
                    </input>

                    </form>

这是我的 PHP

if(isset($_POST['submit'])) {

$year = $_POST['year'];

var_dump($year);
var_dump($_POST);

$sql = "SELECT * FROM availability WHERE year = :year";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':year',$year,PDO::PARAM_STR);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute();
$data = $stmt->fetchAll(); }

和我的 HTML

<ul>
                            <?php foreach($data as $stmt)  { ?>
                                <li><?php echo $stmt['cruise'];?></li>
                                <li><?php echo $stmt['year'];?></li>
                            <?php } ?>
                        </ul>

此时,表单已提交,但我在列表中一无所获。任何帮助将不胜感激。

【问题讨论】:

  • 我没有看到您在哪里将$query 设置为任何实际值?
  • 应该不是$stmt-&gt;execute(array("%$year%"));
  • year 列包含什么,如果它只是像 2019 这样的值,则查询可以写成 SELECT * FROM availability WHERE year = :year,这样会更有效
  • 我已经改变了那个值..但仍然没有得到任何回报:(
  • 也许你应该向我们展示availability 表的架构,也许还有一些示例行

标签: php sql search pdo


【解决方案1】:

您可以尝试使用此查询:

$year = $_POST['year'];
$sql = "SELECT * FROM availability WHERE year = :year";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':year',$year,PDO::PARAM_STR);
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute();
$data = $stmt->fetchAll();

【讨论】:

  • 我已经更新了搜索查询,但仍然没有想要在 html 中显示的内容 :(
  • @ChrisWare 我编辑了查询,请在最后使用var_dump($data) 并与我们分享结果,如果您可以请与我们分享您在数据库中的availability 表的结构
【解决方案2】:

$stmt->bindParam(':year',$year,PDO::PARAM_STR);

你也有 var_dump'ed $year = $_POST['year'];以确保您获得价值?

您可以打开 error_reporting 并查看是否有任何有用的错误

【讨论】:

  • 还有,这可能是一个愚蠢的问题,但我已经看到它发生了 - 您的数据库中是否真的有您选择的年份的任何数据?
  • 表中肯定有当年的条目。数据库列是一个 INT,所以我将 PARAM_STR 更改为 PARAM_INT 没有运气。原谅我的无知..我得看看如何 var_dump 哈哈
  • 在你的 php 顶部添加 error_reporting(E_ALL) 并在 $year = ... write (var_dump($year)); 之后你也可以 var_dump($_POST) :)
  • 我添加了error_reporting(E_ALL);到页面顶部并添加 var_dump 如上所示。我需要在任何地方回显这些以查看结果吗?因为什么都没有出现..
  • 克里斯,您的 php 是否在与您的 html 不同的脚本上运行?即您是否提交表单,运行 php,然后重定向回 html 页面?
【解决方案3】:

你必须改变一些事情, 首先,将选择标签编辑为:

<select class="form-control mb-3"  name="year" id="year">
                      <option disabled selected>Year</option>
                      <option value="2019">2019</option>
                      <option value="2020">2020</option>
                      <option value="2021">2021</option>

                    </select>

有一个条件似乎是错误的。 因此,将您的 html 代码更改为

if($_POST) {

$year = $_POST['year'];

$stmt = $pdo->prepare("SELECT * FROM availability WHERE year = :year");
$stmt->execute(array("%$year%"));
// fetching rows into array
$data = $stmt->fetchAll();}

【讨论】:

  • 你没有回答问题 m8
猜你喜欢
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-06-23
  • 2016-04-07
  • 1970-01-01
相关资源
最近更新 更多