поиск в разных полях с различными 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>
любая помощь будет очень благодарна.
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
}
?>
Концепция 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 ";