Поле комбинированного списка довода "против" Error al filtrar dos veces

Trato de realizar filtros por Carrera, turno y трехколесное такси, подставляет поле комбинированного списка ООН меня продажа pero cuando trato de insertar otro y también filtrar el anterior ya не меня funcionan, espero меня ayuden.

Ми Éste es código:

<form action="busquedaadmin.php" method="post">
  <select name="filtro"><option value="todos">
    <option value="Ingenieria de Sistemas">Ingenieria de Sistemas</option>
    <option value="Contabilidad">Contabilidad</option></select>
  <select name="filtro2"><option value="todos"></option>
    <option value="Manana">Mañana</option>
    <option value="Noche">Noche</option></select>
  <button type="submit">Filtrar</button></form>
<?php
if(isset($_POST['filtro'])){
  $filtro=$_POST['filtro'];
  switch($_POST['filtro']){
    case "todos":
      $sql = "select * from alumnos;";
      break;
    case "Ingenieria de Sistemas":
      $sql = "select * from alumnos WHERE carreraal='$filtro'";
      break;
    case "Contabilidad":
      $sql = "select * from alumnos WHERE carrera='$filtro'";
  }
}
if(isset($_POST['filtro2'])){
  $filtro2=$_POST['filtro2'];
  switch($_POST['filtro2']){
    case "todos":
      $sql = "select * from alumnos;";
      break;
    case "Manana":
      $sql = "select * from alumnos WHERE carreraal='$filtro' AND turnoal='$filtro2'";
      break;
    case "Noche":
      $sql = "select * from alumnos WHERE carreraal='$filtro' AND turnoal='$filtro2'";
      break;
  }
}
else{
  $sql = "select * from alumnos;";
}
$resultado=$mysqli->query($sql);
echo "<center><table><th>Id</th><th>Nombre</th><th>Descripcion</th>   <th>Precio</th><th>Fecha de Registro</th>";
while($row = mysqli_fetch_array($resultado))
{
  echo "<tr><td>{$row['codal']}</td> ".
       "<td>{$row['nombresal']} </td> ".
       "<td>{$row['apellidosal']} </td> ".
       "<td>{$row['carreraal']} </td> ".
       "<td>{$row['cicloal']} </td> ".
       "<td>{$row['turnoal']} </td></tr>";
} 
echo "</table></center>";
?>
2
задан 01.01.2017, 06:09
0 ответов

Его форматировав код оказывается более легкой ошибка. Как ты это делаешь сейчас, это - то, что происходит (я знаю, что он будет являться немного сложным):

  1. Если у первого фильтра есть какая-то стоимость, создай консультацию SQL.

  1. Если у второго фильтра есть какая-то стоимость, создай консультацию SQL.
  2. Если не существует второй фильтр, создай консультацию SQL.

Заметь, как я помещаю "думайте консультацию" во всех точках и он не обновляет или увеличивает, и как я помещаю расставание между точками 1 и 2 (если не, он применяется только к 2, не к 1). Это, потому что консультация заменяется полностью, если выполняется (или не) какое-то из условий. В самом деле, консультация SQL первого if (точка 1) никогда он не был бы должен работать, потому что, когда 2 прибывает в точку, если выполняется условие, консультация SQL будет заменена в switch... и если он не будет выполнен, она будет заменена в else (точка 3).

Не только это но есть другая неудача. Если первый фильтр ($_POST['filtro']) у него нет стоимости и проходит во второй фильтр ($_POST['filtro2']), ты был бы должен получать ошибку, потому что ты использовал бы переменную, которая не существует ($filtro) что инициализируется в первом if (где он не был бы введен).

И все это, не входя в то, что он верно помещает Error404 в комментарии: этот код уязвимый в атаки вставки SQL. Что-то, что, хотя ты, кажется, не даешь важности, по моему мнению должно бы быть всегда твоим первым первенством.

Другая неудача, которая есть, состоит в том, что кажется, что во втором фильтре, не важно, если смена завтра или поздно, консультация SQL - та же самая в обоих случаях.


Моя рекомендация была бы что, если ты хочешь применить два фильтра, вместо того, чтобы повторно писать консультацию каждый раз, что ты заставил увеличивать снаружи консультацию с каждым фильтром. Например (и глаз, потому что этот код может продолжать переносить проблемы вставки SQL):

$sql = "SELECT * FROM alumnos WHERE 1=1 ";

if(isset($_POST['filtro'])){
  $filtro=$_POST['filtro'];
  switch($filtro){
    case "Ingenieria de Sistemas":
      $sql = $sql . " AND carreraal='$filtro' ";
      break;
    case "Contabilidad":
      $sql = $sql . " AND carrera='$filtro' ";
  }
}

if(isset($_POST['filtro2'])){
  $filtro2=$_POST['filtro2'];
  switch($filtro2){
    case "Manana":
      $sql = $sql . " AND turnoal='$filtro2'";
      break;
    case "Noche":
      $sql = $sql . " AND turnoal='$filtro2'";
      break;
  }
}
1
ответ дан 03.12.2019, 17:54