【问题标题】:I'm trying to create a search option in my website but nothing displayed . I'm a beginner我正在尝试在我的网站中创建搜索选项,但没有显示任何内容。我是初学者
【发布时间】:2015-12-24 06:54:38
【问题描述】:

这是我的标题中用于搜索选项的 html 代码

<div class="nav search-row" id="top_menu">
            <!--  search form start -->
            <ul class="nav top-menu">                    
                <li>
                    <form class="navbar-form">
                    <a href="search.php">
                        <input class="form-control" placeholder="Search" type="text">
                        </a>
                    </form>
                </li>                    
            </ul>
            <!--  search form end -->                
        </div>

这是我的 search.php 页面。功能/代码在哪里。我不确定我哪里出错了,或者这就是搜索代码的工作方式。我正在根据搜索输入中输入的内容从数据库中检索数据

<?php
        include("head.php");
        global $conn;
        $search = $_POST['search'];
             if ($stmt = $conn->prepare("SELECT gig_id, user_id, category_id, description, price, img, deliverytime, created_at, updated_at, language from advertisement WHERE description = 'search' ")) 
                {
                  $result = $stmt->execute();
                 $stmt->bind_result($gig_id, $user_id, $category_id, $description, $price, $img, $deliverytime, $created_at, $updated_at, $language);
                while ($stmt->fetch()) 
                  {
                    $rows[] = array('gig_id' => $gig_id, 'user_id' => $user_id, 'category_id' => $category_id, 'description' => $description, 'price' => $price, 'img' => $img, 'deliverytime' => $deliverytime, 'created_at' => $created_at, 'updated_at' => $updated_at, 'language' => $language);
                 }
                  $stmt->close();
                }
                else
                echo "error";
        ?>

我在这里获取我输入的内容并在容器中显示信息

<?php
 if(isset($_POST['search']))
            {
              $search = $_POST['search'];
  <?php foreach ($rows as $row): ?>
  <div class="col-sm-4 col-md-4 col-lg-4 col-xs-6">
    <div class="thumbnail"> <img src="<?php echo 'GigUploads/'.$row['img']; ?>" alt="<?php echo $row['description']; ?>" height="200" width="400">
      <div class="caption">
        <h3><?php echo $row['description']; ?></h3>
        <!-- Passing the gig_id through the URL. Get the gig_id from the URL in the detail page using $_GET['gig_id'] -->
        <p><a href="detail.php?gig_id=<?php echo $row['gig_id']; ?>" class="btn btn-primary" role="button"><span class="glyphicon glyphicon-shopping-cart" aria-hidden="true"></span> Request</a></p>
      </div>
    </div>
  </div>
  ?>
<?php endforeach; ?>
}

【问题讨论】:

  • WHERE description LIKE '%search%'

标签: php html sql search


【解决方案1】:

试一试,您之前一直在寻找完全匹配的内容,但没有发送用户输入的值。如果您要包含用户搜索,您就会对 SQL 注入持开放态度。您需要将用户输入与作为准备查询点的 SQL 分开。此处查询中的 ? 是占位符。 PDO 驱动程序稍后会添加该值,因此输入无法操纵查询。

<?php
include("head.php");
global $conn;
$search = $_POST['search'];
if ($stmt = $conn->prepare("SELECT gig_id, user_id, category_id, description, price, img, deliverytime, created_at, updated_at, language from advertisement WHERE description like ? "))  {
    $result = $stmt->execute(array('%' . $search . '%'));
    $stmt->bind_result($gig_id, $user_id, $category_id, $description, $price, $img, $deliverytime, $created_at, $updated_at, $language);
    while ($stmt->fetch()) {
        $rows[] = array('gig_id' => $gig_id, 'user_id' => $user_id, 'category_id' => $category_id, 'description' => $description, 'price' => $price, 'img' => $img, 'deliverytime' => $deliverytime, 'created_at' => $created_at, 'updated_at' => $updated_at, 'language' => $language);
}
$stmt->close();
} else {
    echo "error";
}

如果您想要准确地取消%s 并将like 更改为=

更新

您还需要提交表单。 PHP 仅在服务器上,一旦页面加载,它就无法使用。这个表单的action应该是上面PHP所在的位置。

<form action="search.php" method="post" class="navbar-form">
      <input class="form-control" placeholder="Search" type="text" />
      <input type="submit" value="Search" />
</form>

【讨论】:

  • 既不工作,它只是重新加载当前页面,或者它在 search.php 上回显错误
  • 我不确定我到底哪里出错了,是我从 header.php 链接的原因还是我的搜索查询有问题
  • 使用if(isset($_POST['search'])) 的位在哪里使用?与if ($stmt = $conn-&gt;prepare("... 相同的页面?您在此代码中是否有 header 调用?
  • 是 if(isset($_POST['search'])) 和 if ($stmt = $conn->prepare("...? 在同一页面上,即 search.php。我调用 include(head.php); 就是顶部 search.php 的头页
  • 您需要提交表单然后处理数据;或者您可以使用 ajax 将数据发送到 PHP 代码。
【解决方案2】:

改变你的mysql查询使用like

SELECT gig_id, user_id, category_id, description, price, img, deliverytime, created_at, updated_at, language from advertisement WHERE description like '%search%'

【讨论】:

  • description = '%search%',认真的吗?
  • 对不起,请尝试像'%search%'这样的描述
猜你喜欢
  • 1970-01-01
  • 2020-09-10
  • 2023-02-11
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 2023-02-21
相关资源
最近更新 更多