【问题标题】:Simple search MySQL database using php使用php简单搜索MySQL数据库
【发布时间】:2014-05-26 06:56:29
【问题描述】:

我目前有一个基于用户输入搜索数据库的小型 php 脚本。有一个 html 文件,其中有一个字段用于将搜索字符串输入数据库。本质上,您可以搜索员工。

它应该检索员工结果(如果找到),如果没有找到“未找到员工”消息。

然而,出于某种原因,无论搜索如何,查询都会返回数据库中的每个员工。

我已经为此工作了一个多小时,老实说,我很难过。这可能是一个简单的错误,但我可以通过一些帮助来解决。

<?php
    $con= new mysqli("localhost","root","","Employee");
    $name = $_post['search'];
    //$query = "SELECT * FROM employees
   // WHERE first_name LIKE '%{$name}%' OR last_name LIKE '%{$name}%'";

    // Check connection
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }

$result = mysqli_query($con, "SELECT * FROM employees
    WHERE first_name LIKE '%{$name}%' OR last_name LIKE '%{$name}%'");

while ($row = mysqli_fetch_array($result))
{
        echo $row['first_name'] . " " . $row['last_name'];
        echo "<br>";
}
    mysqli_close($con);
    ?>

任何帮助表示赞赏。

谢谢。

【问题讨论】:

  • 检查表单中发布的变量。注意search != Search,如果你弄错了,你的查询将包含LIKE '%%',它匹配所有内容。
  • 当你遇到这样的问题时,是时候使用var_dump()了。例如,在这种情况下,就在你获得 $name 变量之后,我会 var_dump($name); 看看它包含什么。如果它是空的,那么你知道为什么你会得到所有的结果 - 因为 everything 匹配 `LIKE "%%"!
  • 谢谢你们 - 从来不知道你可以这样使用 var_dump。很高兴知道。这只是POST没有被capatilized。 :P

标签: php mysql search


【解决方案1】:

您需要使用$_POST 而不是$_post

【讨论】:

    【解决方案2】:

    首先添加HTML代码:

    <form action="" method="post">
    <input type="text" name="search">
    <input type="submit" name="submit" value="Search">
    </form>
    

    现在添加 PHP 代码:

    <?php
    $search_value=$_POST["search"];
    $con=new mysqli($servername,$username,$password,$dbname);
    if($con->connect_error){
        echo 'Connection Faild: '.$con->connect_error;
        }else{
            $sql="select * from information where First_Name like '%$search_value%'";
    
            $res=$con->query($sql);
    
            while($row=$res->fetch_assoc()){
                echo 'First_name:  '.$row["First_Name"];
    
    
                }       
    
            }
    ?>
    

    【讨论】:

    • 为此使用 post 是不是不好的软件设计实践。
    【解决方案3】:

    我认为它适合所有人

    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Search</title>
    </head>
    
    <body>
        <form action="" method="post">
            <input type="text" placeholder="Search" name="search">
            <button type="submit" name="submit">Search</button>
        </form>
    </body>
    
    </html>
    <?php
    
    
    if (isset($_POST['submit'])) {
        $searchValue = $_POST['search'];
        $con = new mysqli("localhost", "root", "", "testing");
        if ($con->connect_error) {
            echo "connection Failed: " . $con->connect_error;
        } else {
            $sql = "SELECT * FROM customer_info WHERE name OR email LIKE '%$searchValue%'";
    
            $result = $con->query($sql);
            while ($row = $result->fetch_assoc()) {
                echo $row['name'] . "<br>";
                echo $row['email'] . "<br>";
            }
    
          
        }   
    }
    
    
    
    ?>
    

    【讨论】:

    • 请在您的答案中添加一些描述和上下文
    • 谢谢老哥告诉我
    【解决方案4】:

    只要上面的答案,我希望是问题所在。

    $_POST['search'] 而不是$_post['search']

    再次使用LIKE '%$name%' 而不是LIKE '%{$name}%'

    【讨论】:

    • 嗨,欢迎来到 StackOverflow。您已经回答了这个问题,所以如果您想添加一些信息,请编辑您之前的答案。谢谢。
    【解决方案5】:

    `

    require_once('functions.php');
    
    $errors = FALSE;
    $errorMessage = "";
    
    if(mysqli_connect_error()){
      $errors = TRUE;
      $errorMessage .= "There was a connection error <br/>";
      errorDisplay($errorMessage);
      die($errors);
    } else if($errors != "TRUE"){
      $errors .= FALSE;
    }
    
    if(isset(mysqli_real_escape_string($_POST['search']))){
      $search = mysqli_real_escape_string($_POST['search']);
      search(search);
    }
    
    
    
    ?>
    <?php
    //This is functions.php
    function search($searchQuery){
      echo "<div class="col-md-10 col-md-offset-1">";
      $searchTerm
      $query = query("SELECT * FROM `index` WHERE `keywords` LIKE '".$searchTerm."' ");
      while($row = mysqli_fetch_array($query)){
        $results = <<< DELIMITER
          <div class="result col-md-12">
            <a href="index.php?search={$row['id']}"> {$row['Title']} </a>
            <p class="searchDesc">{$row['description']}</p>
          </div>
    DELIMITER;
        echo $results;
      }
      echo "</div>";
    }
    
    function errorDisplay($msg){
      if(!isset($_SESSION['errors'])){
        $_SESSION['errors'] = $msg;
        showError($msg);
      } else if() {
        $_SESSION['errors'] .= $msg . "<br>";
        showError($msg);
      }
    }
    function showError($msg) {
      return $msg;
      unset($_SESSION['errors']);
    }
    
    
    ?>`
    Perhaps That Helps?
    

    【讨论】:

    • 我认为它是从某个地方复制的,请修复错误并添加解释。
    【解决方案6】:

    如果你写mysqli_fetch_array(),你必须在$row index ex.($row[3])中输入整数。如果你读$row['id']$row['example'],你必须使用mysqli_fetch_assoc

    【讨论】:

    • 不是一个合适的答案。
    【解决方案7】:

    这是一个更好的代码,可以帮助您完成。
    用你的数据库,而是我用的mysql不是mysqli
    尽情享受吧。

    <body>
    
    <form action="" method="post">
    
      <input name="search" type="search" autofocus><input type="submit" name="button">
    
    </form>
    
    <table>
      <tr><td><b>First Name</td><td></td><td><b>Last Name</td></tr>
    
    <?php
    
    $con=mysql_connect('localhost', 'root', '');
    $db=mysql_select_db('employee');
    
    
    if(isset($_POST['button'])){    //trigger button click
    
      $search=$_POST['search'];
    
      $query=mysql_query("select * from employees where first_name like '%{$search}%' || last_name like '%{$search}%' ");
    
    if (mysql_num_rows($query) > 0) {
      while ($row = mysql_fetch_array($query)) {
        echo "<tr><td>".$row['first_name']."</td><td></td><td>".$row['last_name']."</td></tr>";
      }
    }else{
        echo "No employee Found<br><br>";
      }
    
    }else{                          //while not in use of search  returns all the values
      $query=mysql_query("select * from employees");
    
      while ($row = mysql_fetch_array($query)) {
        echo "<tr><td>".$row['first_name']."</td><td></td><td>".$row['last_name']."</td></tr>";
      }
    }
    
    mysql_close();
    ?>
    

    【讨论】:

    • 请使用 MSQLi bcoz MYSQL 已被弃用,现在已不再使用。
    • 请在您的答案中添加一些解释,以便其他人可以从中学习。此外,不应使用此代码,因为它对 SQL 注入广泛开放
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多