Actualmente tengo un pequeño script php que busca en una base de datos a partir de la entrada del usuario. Hay un archivo html que tiene un campo que se utiliza para la entrada de cadenas de búsqueda en la base de datos. Esencialmente, usted puede buscar para los empleados.

Se supone que es para recuperar el empleado resultado, si se encuentra, y un «empleado no encontrado» mensaje, si no.

Por alguna razón, sin embargo, no importa la búsqueda, la consulta devuelve todos los empleados en la base de datos.

He estado trabajando en esto durante más de una hora, y francamente, estoy perplejo. Puede ser un simple error, pero yo podría hacer con un poco de ayuda.

<?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);
    ?>

Cualquier ayuda es apreciada.

Gracias.

  • Compruebe la variable de ser publicado a partir de su forma. Nota search != Search, y si lo haces mal tu consulta contendrá LIKE '%%', que coincide con todo.
  • Cuando usted tiene este tipo de problemas, es el momento de utilizar var_dump(). Por ejemplo, en este caso, sólo después de obtener su $name variable, me gustaría var_dump($name); para ver lo que contiene. Si es vacío, entonces usted sabe por qué usted está recibiendo todos los resultados – porque todo coincide con `LIKE «%%»!
  • Gracias a ambos – no sabía que se podía usar var_dump así. Gran saber. Era simplemente el POST no se capatilized. 😛

6 Comentarios

  1. 5

    Primer añadir código HTML:

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

    Que ahora se añade el código 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"];
    
    
                }       
    
            }
    ?>
    • no es malo el software de diseño de practicar el uso de post para esto.
  2. -1

    Sólo con la respuesta anterior, espero que se fue el problema.

    $_POST['search'] en lugar de $_post['search']

    Y de nuevo uso LIKE '%$name%' en lugar de LIKE '%{$name}%'

    • Hola, bienvenido a StackOverflow. Usted ya respondió a esta pregunta, así que por favor edita tu respuesta anterior si desea agregar alguna información. Gracias.
  3. -1

    Este es un mejor código que le ayudará a través de.

    Con su base de datos, sino más bien, yo he usado mysql no mysqli

    Disfrutar de ella.

    <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();
    ?>
  4. -1

    `

    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?
  5. -1

    Si usted mysqli_fetch_array(), usted debe poner entero en $row index ex.($row[3]).Si usted lee $row['id'] o $row['example'], debe utilizar mysqli_fetch_assoc.

Dejar respuesta

Please enter your comment!
Please enter your name here