【问题标题】:Post results back to same page as search form将结果发布回与搜索表单相同的页面
【发布时间】: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


【解决方案1】:

所以我想通了

<!-- 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>"; }

【讨论】:

    【解决方案2】:

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

    这取决于您何时想使用GET 或POST。 POST 更安全,所以提交表单时我总是使用POST。在这种情况下,您可以留下以下代码:

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

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

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

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

    $searchterm = $_POST['search'];
    

    【讨论】:

      【解决方案3】:

      在良好的实践中,当用户向服务器发送将更改服务器上数据的内容时,使用 POST 发送参数(例如存储在数据库中或发送电子邮件)。当用户从服务器检索某些内容时使用 GET 来读取数据(查询数据库)。所以更喜欢 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;
       }
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-03
        • 2013-07-22
        • 1970-01-01
        相关资源
        最近更新 更多