繁体   English   中英

将结果发回到与搜索表单相同的页面

[英]Post results back to same page as search form

我正在做一个项目,需要一些帮助:)(底部的完整代码)

需要使用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;
?>

在良好实践中,当用户向服务器发送一些东西时,使用POST发送参数,这将更改服务器上的数据(例如,存储在db中或发送电子邮件)。 用户从服务器检索某些内容时,请使用GET读取数据(查询数据库)。 因此,最好在这里获取。

要解决您的问题,只需将处理研究的整个代码放在“ if(isset($ _ GET ['search'])){}”部分中,如下所示:

<?php

$servername = 'localhost';
$username = "root";
$password = "";
$dbname = "u1360138";

<?php
if(isset($_GET['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

if(isset($_GET['search'])){
  // DB Connection
  try {$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);}
  catch(PDOException $e)
  {echo "Error conntecting to the DB: " . $e->getMessage();}
  // 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;
 }
?>

使用GET而不是POST,这对我来说似乎不正确。这是正确的吗? 这可行,但是我需要删除/隐藏我的页面(index.php)首次加载时出现的这段代码。

这取决于您何时要使用GETPOST POST更安全,因此对于提交表单,我始终使用POST 在这种情况下,您可以保留以下代码:

if(isset($_POST['search'])){
    echo 'Search';
}

您确实需要将表单的action类型更改为POST

<form action="index.php" method="post">
....

然后添加您需要从POST而不是GET获取搜索值的末尾,因为我们更改了action类型。

$searchterm = $_POST['search'];

所以我想通了

<!-- HTML FORM SEARCH BAR -->
<form action="index.php" method="post">
<label for="enteredterm">Enter a Weight-class or a Nationality:</label>
<input type="text" name="enteredterm">
<input type="submit" name="search">
</form>
<!-- HTML FORM SEARCH BAR -->

if(isset($_POST['search'])){
$enteredterm = $_POST['enteredterm'];

if ($enteredterm ===""){
echo "error, enter something.";
} else {

$stmt = $conn->prepare("SELECT * FROM boxer WHERE weightclass LIKE     :enteredterm OR nationality LIKE :enteredterm or lastname LIKE :enteredterm     ORDER BY year");
$stmt->bindValue(':enteredterm','%'.$enteredterm.'%');
$stmt->execute();
$count= $stmt->rowCount();

echo "You entered ".$enteredterm." and returned ";
if($count <= 1){
echo $count." result.";
}else{
echo $count." results.";
}
// 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>"; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM