Ver Mensaje Individual
  #9 (permalink)  
Antiguo 01/08/2014, 17:14
Avatar de Djoaq
Djoaq
 
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: Buscador, si no hay nada entonces es todo

Cita:
Iniciado por Alexis88 Ver Mensaje
No había alcanzado a leer bien lo que escribiste, por lo que te puse una respuesta que ya había dado a otra persona en el pasado cuyo hilo tenía un título similar. No hay necesidad de hacer global a la variable que contiene la consulta, bastaba con definir la consulta general al inicio y en cada condición (los if), crear la condición que luego se añadiría a la consulta.

Código PHP:
Ver original
  1. $interno = $_POST['txt1'];
  2. $desde = strlen($_POST['txt2']) ? $_POST['txt2'] : '20000101';
  3. $hasta = strlen($_POST['txt3']) ? $_POST['txt3'] : date('Y,m,d');
  4. $consulta = 'SELECT * FROM tabla1 ';
  5. $condicion = '';
  6.  
  7. if (!strlen($interno))
  8.     $condicion = "WHERE fecha BETWEEN '{$desde}' AND '{$hasta}'";
  9. else if (!strlen($desde) and !strlen($hasta))
  10.     $condicion = "WHERE interno = {$interno}";
  11. else
  12.     $condicion = "WHERE interno = {$interno} AND (fecha BETWEEN '{$desde}' AND '{$hasta}')";
  13.  
  14. $consulta .= $condicion;
  15. $rst = mysql_query($consulta, $conexion);

Ojo, ten cuidado al momento de mezclar las condiciones de la fecha y el campo 'interno' pues en ambos casos usas el operador lógico AND, el cual puede ser malinterpretado al momento de ejecutar la consulta, es por esa razón que encierro entre paréntesis a la consulta de la fecha a fin de evitar conflictos lógicos. También ten cuidado con el formato con el que obtienes la fecha actual, quizá sea incompatible con el del campo 'fecha' en la tabla de tu BD. Y por último, te aconsejo mudarte a la extensión mejorada MySQLi pues MySQL está obsoleta a partir de PHP 5.5.0.

Saludos
Me gusta esta solución aunque no la entiendo bien, seria como usar ternarias no? Si viene vacio strlen seria falso y haria la otra condicion, pero viene informada strlen no devolveria la longitud de la cadena?