поиск в разных полях с различными inputs mysql php


Добрый день, я попытался выполнить поиск в базе данных следующим образом.. у меня есть база данных с X столбцами (предположим, что для удобства база данных имеет только два столбца, один столбец с именем день и один столбец с именем месяц), что я хочу сделать, это то, что с помощью input поиск только в столбце dia и с помощью другого input поиск только в столбце месяц, что если я хочу искать только в dia, нет никаких проблем, что если я хочу искать только в месяце нет проблем, и если я хочу искать как в день, так и в месяц одновременно, нет проблем. Здесь я прикрепляю код, который у меня есть, который не работает : (

это часть кода страницы, которая выполняет поиск (где находятся два input):

<title>busqueda</title>
<p>
<form name="form1" method="POST" action="busqueda.php" id="cdr">
<h2>Buscar Usuario</h2>
<input name="dia" type="text" id="busqueda">
<input name="mes" type="text" id="mesqueda">
<input type="submit" name="submit" value="Buscar"> 
</p>
</form>

это часть кода, с которой связаны php и mysql и с которой выполняется поиск в базе данных (я на 100% уверен, что $query должен быть исправлен, где выполняет поиск в базе данных, но я не знаю, как сделать так, чтобы он оставался таким, каким я хочу):

<?php
error_reporting(E_ALL ^ E_NOTICE);
$dia="";
$mes="";
$dia=$_POST['dia'];
$mes=$_POST['mes'];
$con=mysqli_connect('localhost','root','');
mysqli_select_db($con,"tutorial");
if(($dia And $mes) !=""){
 $query = "SELECT * FROM entrada WHERE dia LIKE '%$dia%' and mes LIKE 
 '%$mes%'";
 $busqueda=mysqli_query($con,$query);
}
?>

и это часть html-кода, которая создает таблицу, в которую будут вставлены Результаты поиска, и php, который вставляет эти результаты поиска в таблицу:

<table width="805" border="1">
<tr>
    <td width="75">Día</td>
    <td width="136">Mes</td>
    <td width="225">Año</td>
</tr>

<?php
while($muestra=mysqli_fetch_array($busqueda)){
echo'<tr>';
echo'<td>'.$muestra['dia'].'</td>';
echo'<td>'.$muestra['mes'].'</td>';
echo'<td>'.$muestra['anio'].'</td>';
}
?>
</table>

любая помощь будет очень благодарна.

Author: julian vargas, 2018-03-22

2 answers

Probe el query y no me marco ningun error, intenta algo asi
<?php
if(!empty($dia) && !empty($mes)){
?>
<table width="805" border="1">
<thead>
<tr>
    <td width="75">Día</td>
    <td width="136">Mes</td>
    <td width="225">Año</td>
</tr>
</thead>
<tbody>
<?php
    $s = "localhost";
    $bd = "nombreBD";
    $u = "root"; //usuario
    $p = ""; //contraseña

    $conexion = new mysqli($s, $u, $p, $bd);
    if ($conexion->connect_errno) {
        echo "no conectado";
    }
    $conexion->real_query("SELECT * FROM entrada WHERE dia LIKE '%$dia%' and mes LIKE '%$mes%'"); 
    $resultado = $conexion->use_result();
    while ($muestra = $resultado->fetch_assoc()) { ?>
    <tr>
      <td><?php echo $muestra['dia']; ?></td>
      <td><?php echo $muestra['mes']; ?></td>
    </tr>
<?php }
$resultado->close(); 
?>
 </tbody>
 </table>
<?php
}
?>
 1
Author: Juan Daniel, 2018-03-22 03:59:10

Концепция Query Builder или "конструктор запросов". В основном вы собираете sql запроса на основе полей, которые у вас есть.

  • Примечание1: "доступно" в этом случае не является пустым строковым значением или не было отправлено post
  • Примечание2: я использую realescape по привычке , но поскольку ожидается, что и день, и месяц будут числами, я действительно очищаю входные данные, используя intval
  • Примечание3: я держу вас dia LIKE '%$dia%' но будучи числами с одного dia=$dia было бы достаточно

1 для поиска по dia=а, месяц=B или оба соответствующих поля(dia=а и месяц=B)

 $dia=isset($_POST['dia'])?trim($_POST['dia']):""; // dia es lo que se recibe o cadena vacía
 $dia=isset($_POST['mes'])?trim($_POST['mes']):""; // mes es lo que se recibe o cadena vacía

 $con=mysqli_connect('localhost','root','');
 mysqli_select_db($con,"tutorial");

 $SQL="SELECT * FROM entrada WHERE ";
 if (""==$dia&&""==$mes) : // si no hay dia ni mes definidos mostramos todo 
   $where = "1"; // (cambiar a 0=1 para no mostrar nada)
 else : // dia y mes estan definidos o uno solo de los dos
   $where = "";
   $separador = ""; // la primer condicion no lleva separador

   if (""!=$dia) : // si dia está definido lo agregamos al where
     $dia = mysqli_real_escape_string($con, intval($dia));  // escapeamos el valor convertido a número
     $where .= $separador." dia LIKE '%$dia%'";
     $separador = " AND ";
   endif;

   if (""!=$mes) : // si mes está definido lo agregamos al where
     $mes = mysqli_real_escape_string($con, intval($mes)); // escapeamos el valor convertido a número
     $where .= $separador." mes LIKE '%$mes%'"; 
     //$separador = " AND "; // esta línea no es necesaria con dos columnas pero si para mas ifs si hay mas campos
   endif;

 endif;

 // completamos el SQL
 $query = $SQL.$where.";";
 $busqueda = msqli_query($con, $query);

2 поиск по dia=а, месяц=B или любому из соответствующих полей (dia=А или месяц=B)

Изменить, где он говорит $separador = " AND "; на $separador = " OR ";

 0
Author: alo Malbarez, 2018-04-01 20:39:19