【发布时间】:2016-02-18 19:19:20
【问题描述】:
我正在做一个项目,需要一些帮助:)(底部有完整代码)
项目需要使用 PDO 访问。
我需要搜索结果显示在与输入搜索相同的页面上。
使用 GET 而不是 POST 对我来说,下面的内容似乎不正确。这是正确的吗? 这可行,但我需要删除/隐藏我的页面 (index.php) 首次加载时出现的这段代码。
if(!isset($_GET['search']))
{ echo "Error, Please go back."; exit;}
我该怎么做?
另外我的第二个问题是我无法让搜索表单在表格中搜索多个字段。它只是不会让我。我也不能用这段代码
%'.$searchterm.'%
因为它不会从搜索中给我任何反馈。所以我正在使用
:searchterm
在
$searchterm = $_GET['search'];
$stmt = $conn->prepare("SELECT * FROM boxer WHERE weightclass LIKE :searchterm OR nationality ");
$stmt->bindValue(':searchterm','%'.$searchterm.'%');
$stmt->execute();
这是我的完整代码:
<?php
$servername = 'localhost';
$username = "root";
$password = "";
$dbname = "u1360138";
<?php
if(isset($_POST['search'])){
echo 'Search';
}
?>
<!-- Search facility 1 -->
<form action="index.php" method="get">
<label for="search">Enter a weight class. Need to be more than one searchs which wont work</label>
<input type="text" name="search" id="search">
<input type="submit" value="Search">
</form>
<?php
// DB Connection
try {$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);}
catch(PDOException $e)
{echo "Error conntecting to the DB: " . $e->getMessage();}
if(!isset($_GET['search']))
{ echo "Error, Please go back."; exit;}
// DB Connection
$searchterm = $_GET['search'];
$stmt = $conn->prepare("SELECT * FROM boxer WHERE weightclass LIKE :searchterm");
$stmt->bindValue(':searchterm','%'.$searchterm.'%');
$stmt->execute();
// loop displays loop
while ($boxer = $stmt->fetch(PDO::FETCH_OBJ))
{ echo "<ul>";
echo "<a href='details.php?idboxer=".$boxer->idboxer."'>";
echo "<li>".$boxer->firstname." ".$boxer->lastname."</li>";
echo "</a>";
echo "</ul>"; }
$conn=NULL;
?>
【问题讨论】:
-
LIKE %:searchterm%并从 bindValue 中删除 % -
这永远不会发生
if(isset($_POST['search'])){...}不是您在表单中使用的方法。那么你的OR nationality ");不完整。 -
为什么不使用 ajax 将表单数据处理到服务器并获得响应以在同一页面上再次显示它?
-
如果您将表单设置为发布,那么 if 应该可以正常工作。其余与搜索相关的代码也应包含在其中。
标签: php search post pdo postback