Foros del Web » Programando para Internet » PHP »

Terminar buscador desplegable

Estas en el tema de Terminar buscador desplegable en el foro de PHP en Foros del Web. Hola, os pido ayuda para poder terminar un buscador a una base de datos mysql. Os explico como lo tengo: Tengo un formulario html mediante ...
  #1 (permalink)  
Antiguo 02/10/2013, 15:23
 
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 127
Antigüedad: 12 años, 8 meses
Puntos: 2
Terminar buscador desplegable

Hola, os pido ayuda para poder terminar un buscador a una base de datos mysql.

Os explico como lo tengo:

Tengo un formulario html mediante opciones desplegables
Código:
<form action="buscar.php" method="post">
<select name="categoriaA"
style="font-family: Arial; font-weight: normal; font-style: normal; font-size: 11px;">
<option value="A">Opcion A</option>
<option value="B">Opcion B</option>
<option value="C">Opcion C</option>
<option value="D">Opcion D</option>
</select>

<select name="categoriaB"
style="font-family: Arial; font-weight: normal; font-style: normal; font-size: 11px;">
<option value="M">Opcion M</option>
<option value="W">Opcion W</option>
</select>

<input
value="buscar" type="submit">
</form>
Este form está enlazado al siguiente PHP para pedir la búsqueda a la base de datos:

Código PHP:
<?

$categoriaA
$_POST['categoriaA'];
$categoriaB$_POST['categoriaB'];



$buscar $_POST;

$con=mysql_connect("servidor","usuario","contraseña");
$sql "SELECT * FROM TABLE 3 WHERE CategoriaA like $categoriaA & Categoria B like $categoriaB";
mysql_select_db("bd"$con); 

$result mysql_query($sql$con); 



if (
$total>0){
echo 
"<table border=1 cellspacing=0 cellpadding=2 bordercolor='cc9933'>";
echo 
"<tr align='center' bgcolor='cc9933'><td>Categoria_A</td><td>Categoria_B</td></tr>";
while (
$row mysql_fetch_array($result)) { 
?>
<tr bgcolor="#fdfdbf" align='center'><td><?=$row['CategoriaA'];?></td><td><?=$row['CategoriaB'];?></td></tr>
<?
}
echo 
"</table>";
} else { 

echo 
"No se encontraron resultados"
}

?>
Si le doy a buscar me sale que "No se encontraron resultados" y no puede ser ya que hay opciones seleccionadas del desplegable.

En la base de datos hay columna 1 llamada CategoriaA, con Opción A, Opción B... en cada fila, y lo mismo en la siguiente columna en la CategoriaB. Mi intención es que el usuario seleccione las opciones que quiera de cada columna mediante el desplegable y que cuando le de a buscar le aparezcan todas la opciones que coinciden con su selección.

Muchas gracias
  #2 (permalink)  
Antiguo 02/10/2013, 15:35
 
Fecha de Ingreso: agosto-2013
Ubicación: Granada, Andalucía, España
Mensajes: 42
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Terminar buscador desplegable

No me parece que sea un problema de PHP sino de la consulta que haces a la base de datos.
Debería ser:

SELECT * FROM TABLE 3 WHERE CategoriaA ='$categoriaA' & CategoriaB ='$categoriaB';

Por otra parte, dónde obtienes el valor de $total? Porque si siempre es cero, siempre te dirá que no hay registros

Saludos.
  #3 (permalink)  
Antiguo 02/10/2013, 15:36
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: Terminar buscador desplegable

Hola
En la consulta Categoria B tiene un espacio,¿no deberia estar junto?

$sql = "SELECT * FROM TABLE 3 WHERE CategoriaA like $categoriaA & Categoria B like $categoriaB";

Debes filtrar los datos que recibes del usuario, te van a hacer una inyeccion sql.

Saludos
  #4 (permalink)  
Antiguo 02/10/2013, 15:51
 
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 127
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Terminar buscador desplegable

He arreglado lo del SELECT de las dos respuestas, gracias.

Cierto, lo del total queda vacío, de hecho tuve algún problema hace tiempo, y tenía puesto esto:
Código PHP:
$total mysql_num_rows($result); 
Pero me daba error en esa línea.
  #5 (permalink)  
Antiguo 02/10/2013, 15:54
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 10 años, 8 meses
Puntos: 55
Respuesta: Terminar buscador desplegable

Cita:
Iniciado por ph20 Ver Mensaje
He arreglado lo del SELECT de las dos respuestas, gracias.

Cierto, lo del total queda vacío, de hecho tuve algún problema hace tiempo, y tenía puesto esto:
Código PHP:
$total mysql_num_rows($result); 
Pero me daba error en esa línea.
Te daba error por que tu consulta estaba mal.

Debes hacer una revision de errores de las consultas.
revisa en el manual mysql_error().

Saludos.
  #6 (permalink)  
Antiguo 02/10/2013, 15:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Terminar buscador desplegable

Cita:
Iniciado por ph20 Ver Mensaje
[...] Pero me daba error en esa línea.
¿Error de qué tipo?

Porque sintácticamente hablando es correcto, pero en ejecución puede mostrar un error diferente, que no sería de sintaxis.

Es requerido compartir los mensajes de error, ya que decir "pero no me funciona" no nos sirve de nada, no indica nada, nada de nada.

Así mismo un código sin contexto, ni información no indica nada, al menos no en términos de ejecución.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 02/10/2013, 16:13
 
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 127
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Terminar buscador desplegable

La línia de $total iría en el código php que he puesto en el primer mensaje, para no volverlo a copiar, debajo de la línia de $result.

Me dice esto:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/usuario/public_html/buscar.php on line 16
(que es la línia $total = mysql_num_rows($result);)
  #8 (permalink)  
Antiguo 02/10/2013, 16:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Terminar buscador desplegable

Pues efectivamente ese es un error de ejecución, para lo cual debes imprimir el valor de mysql_error() para que conozcas el error que se generó en la consulta, pues es un error de MySQL y no de PHP.

Código PHP:
Ver original
  1. $result = mysql_query($sql, $con);  
  2.  
  3. if (! $result) {
  4.   $msg = mysql_error();
  5.   die("SQL_ERROR ($msg) $sql");
  6. }

¿Eso qué te muestra?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 03/10/2013, 07:48
 
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 127
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Terminar buscador desplegable

Me pone esto:
SQL_ERROR (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TABLE 3 WHERE CategoriaA='A' & CategoriaB='M'' at line 1)

Por lo que entiendo hay algún problema en la base de datos... He subido un CSV simple con las columnas y las filas correspondientes. La primera fila con cada categoría y en las demás filas cada opción.
Aunque cuando intento actualizarla me dice El número de columnas de los datos CSV en la línea 1 no es válido.

La verdad que hace tiempo hice lo de la base de datos.
  #10 (permalink)  
Antiguo 03/10/2013, 08:14
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Terminar buscador desplegable

Por favor, muestra también la consulta ($sql) completa cuando la imprimes, la intención es ver por qué está mal formada.

Que bueno, a ciencia cierta ya no correspondería a un problema de PHP porque en si la consulta es la que está mal, y eso es SQL.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #11 (permalink)  
Antiguo 03/10/2013, 08:47
 
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 127
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Terminar buscador desplegable

Vale, he estado tocando la BD y las tablas, y ahora cuando le doy a buscar sí funciona y me muestra las columnas y filas, el problema es que no se relacionan con el valor. Es decir, seleccione la opción que seleccione en el desplegable siempre muestra la última de la lista.
  #12 (permalink)  
Antiguo 03/10/2013, 08:51
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Terminar buscador desplegable

Bueno, pues seguimos sin saber cómo es la consulta, sigue así, igual y más tarde adivinamos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #13 (permalink)  
Antiguo 03/10/2013, 09:02
 
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 127
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Terminar buscador desplegable

Cita:
Iniciado por pateketrueke Ver Mensaje
Bueno, pues seguimos sin saber cómo es la consulta, sigue así, igual y más tarde adivinamos.
Ese es el archivo php que funciona, y me devuelve la consulta de la bd. El problema es eso, que no resulta las opciones seleccionadas en el desplegable html, siempre sale la misma.




<?

$categoriaA= $_POST['categoriaA'];
$categoriaB= $_POST['categoriaB'];



$buscar = $_POST;

$con=mysql_connect("servidor","usuario","contraseñ a");
$sql = "SELECT * FROM TABLE 3 WHERE CategoriaA ='$categoriaA' & CategoriaB ='$categoriaB'";
mysql_select_db("bd", $con);

$result = mysql_query($sql, $con);


if ($row = mysql_fetch_array($result))

{
echo "<table border=1 cellspacing=0 cellpadding=2 bordercolor='cc9933'>";
echo "<tr align='center' bgcolor='cc9933'><td>Categoria A</td><td>Categoria B</td></tr>";
while ($row = mysql_fetch_array($result)) {
?>
<tr bgcolor="#fdfdbf" align='center'><td><?=$row['CategoriaA'];?></td><td><?=$row['CategoriaB'];?></td></tr>
<?
}
echo "</table>";
} else {

echo "No se encontraron resultados";
}



?>

Última edición por ph20; 03/10/2013 a las 09:07
  #14 (permalink)  
Antiguo 03/10/2013, 09:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Terminar buscador desplegable

¿Qué parte de "imprime la consulta" sigues sin entender?

Código PHP:
Ver original
  1. $sql = "SELECT * FROM TABLE 3 WHERE CategoriaA ='$categoriaA' & CategoriaB ='$categoriaB'";
  2. // esto es "imprimir la consulta"
  3. echo $sql;

Ahora, la idea es que cuando la imprimas la copies y pegues aquí, para que la podamos examinar, de otra forma el misterio ahí se queda, y por mucho que muestres código no sabremos jamás los resultados que obtienes.

A simple vista se nota es que usas & y no AND, como debería ser, no sé.

Otro problema es que usas una tabla llamada "TABLE 3" ¿con espacios?

No creo que eso sea permitido en SQL, deberías revisar una referencia al respecto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #15 (permalink)  
Antiguo 03/10/2013, 09:20
 
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 127
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Terminar buscador desplegable

Vale gracias, he quitado el espacio y he puesto AND, y ahora sale la tabla pero vacía, es decir la primera fila con los títulos (categorías) y nada más.

Código PHP:
$sql "SELECT * FROM Table WHERE CategoriaA ='$categoriaA' AND CategoriaB ='$categoriaB'"
  #16 (permalink)  
Antiguo 03/10/2013, 10:20
 
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 127
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Terminar buscador desplegable

Ya funciona, le faltaba la línea de $total que hablamos.

Ahora mi pregunta es como hago para que si no se selecciona ninguna opción muestre todas las de la columna? Había pensado en el html crear una nueva opción desplegable "todas" y asignarle todos los valores posibles de la columna, pero a parte que no sé como añadir más de uno, creo que tiene que haber alguna forma mejor.
  #17 (permalink)  
Antiguo 03/10/2013, 10:24
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Terminar buscador desplegable

Si quieres que se seleccione todo, la consulta sql sería sin el WHERE y todo lo de delante.

Dependiendo del valor del select puedes hacer una sentencia switch y derivar a la consulta que quieras.

Última edición por PHPeros; 03/10/2013 a las 10:37
  #18 (permalink)  
Antiguo 03/10/2013, 10:52
Avatar de leandro_reyes  
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Terminar buscador desplegable

Prueba crear tu consulta de esta forma ..
$query="SELECT DISTINCT DATE_FORMAT( R.FECHA, '%d/%m/%Y' ) AS FECHA, INV.SERIE, IFNULL( R.COSTO_REPARACION, 0 ) AS COSTO, R.DESCRIPCION
FROM INVENTARIO INV, REPARACION R, ALUMNO_SERIE AX
WHERE R.SERIE = INV.SERIE
AND (SELECT DATE_FORMAT( R.FECHA, '%Y' )) = '$year'
AND AX.SERIE = R.SERIE
AND AX.CODIGO_ESCUELA = '$escuela'
ORDER BY INV.SERIE ASC";
$result=mysqli_query($con,$query);//$$con es la conexión..
$n="";
$numfilas=mysqli_num_rows($result);
if ($numfilas>0){
echo '<table cellpadding="0" cellspacing="0" width="100%" border="1" bgcolor="#dff0f2">';
echo '<tr><td align="center"> N0. </td><td align="center">Fecha</td><td>Serie</td><td align="center">Costo</td><td align="center">Descripción</td></tr>Resultado de La Consulta';
for ($i = 0; $i < $numfilas; $i++){
$fila = mysqli_fetch_array($result);
$n+=1;
echo '<tr><td>'.$n.'</td><td>'.$fila['FECHA'].'</td><td>'.$fila['SERIE'].'</td><td align="right">'.number_format($fila['COSTO'], 2, ".", ",").'</td><td align="left">'.$fila['DESCRIPCION'].'</td></tr>';
}mysqli_free_result($result);
}
else{
echo 'No hay Resultados';
}
}
Resultado de La Consulta
N0. Fecha Serie de Costo L Descripción
1 23/09/2012 SCH217023B100 8,745.00 PROBANDO PARA EL REPORTE
  #19 (permalink)  
Antiguo 03/10/2013, 10:53
 
Fecha de Ingreso: julio-2011
Ubicación: España
Mensajes: 127
Antigüedad: 12 años, 8 meses
Puntos: 2
Respuesta: Terminar buscador desplegable

Cita:
Iniciado por PHPeros Ver Mensaje
Si quieres que se seleccione todo, la consulta sql sería sin el WHERE y todo lo de delante.

Dependiendo del valor del select puedes hacer una sentencia switch y derivar a la consulta que quieras.
Sí, había pensado añadir un if que si el usuario selecciona el valor "todo" le imprimiese todas las de la columna pero no logro conseguirlo.

Etiquetas: buscador, desplegable, formulario, html, mysql, select, sql, terminar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:08.