我正在尝试使用简单的搜索表单搜索我的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>
目前,表单已提交,但列表中没有任何内容。任何帮助将不胜感激。
答案 0 :(得分:2)
您可以尝试使用此查询:
$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();
答案 1 :(得分:0)
您必须更改一些内容, 首先,将选择标签编辑为:
<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();}
答案 2 :(得分:0)
$ stmt-> bindParam(':year',$ year,PDO :: PARAM_STR); <-是否需要为PARAM_INT?
您也有var_dump'ed $ year = $ _POST ['year'];确保您获得了价值?
您可以打开error_reporting并查看是否收到任何有用的错误