Problemas con SQL

Hola.
He creado una BD llamada 'xarop' con una tabla 'camping' con la estructura siguiente:
comarca varchar(100) notnull
supermercado char (1) notnull
bar char(1) notnull
piscina char (1) notnull
He creado un formulario para su consulta con estos valores:La finalidad de este formulario es la de facilitar la búsqueda en una comarca concreta de cámpings que tengan una serie de servicios previamente seleccionados por los usuarios, acotando el máximo el resultado a la concreción de la consulta realizada. En el caso del checkbox, si no está seleccionado, que no lo presente, etc etc. Explico más.
1) En la tabla 'camping' hay 8 establecimientos en la comarca de OSONA. De los 8, 6 tienen piscina, 8 servicio de bar y 3 supermercado.
Comarca Establecimiento piscina bar supermercado
Osona A S S S
Osona B S S
Osona C S S
Osona D S S
Osona E S S
Osona F S S S
Osona G S
Osona H S S
El funcionamiento tiene que ser
1) Solo seleccionado el camo COMARCA Resultado 8 registros (ABCDEFGH)
2) Seleccionado Comarca y Piscina Resultado 6 registros (ABCDEH)
3) Seleccionado Comarca piscina y supermercado Resultado 2 registros (AF)
4) Todos seleccionados Resultado 2 resultados (AF)
Etc, etc.
El formulario es el siguiente
<FORM METHOD="POST" ACTION="buscar2.php">
<p> </p>
<p> </p>
<table width="315" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#6699CC">
<tr>
<td width="311" bgcolor="#6699CC">
<div align="center"><font color="#FFFFFF" size="5" face="Verdana, Arial, Helvetica, sans-serif">Consultar
Establiments </font></div></td>
</tr>
<tr>
<td height="181">
<table width="311" border="0" align="center" bordercolor="#66CCFF" bgcolor="#66CCFF">
<tr>
<td> </td>
<td> </td>
<td width="83"> </td>
<td width="66"> </td>
</tr>
<tr>
<td width="61"> <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif"><strong><font size="1">Comarca</font></strong></font></div></td>
<td width="3"> </td>
<td colspan="2"> <div align="center">
<select name="comarca" size "10">
<option selected values="">Comarca</option>
<option values="Alt Camp">Alt Camp</option>
<option values="Alt Empordà">Alt Empordà</option>
<option values="Alt Penedés">Alt Penedés</option>
<option values="Vallés Oriental">Vallés Oriental</option>
</select>
</div></td>
</tr>
<tr bgcolor="#66CCFF">
<td><strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Supermercat</font></strong></td>
<td> </td>
<td><input type="checkbox" name="supermercat" value="S"></td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr bgcolor="#66CCFF">
<td><div align="right"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Bar</strong></font></div></td>
<td> </td>
<td colspan="2"><input type="checkbox" name="bar" value="S"></td>
<td> </td>
<td> </td>
</tr>
<tr bgcolor="#66CCFF">
<td><div align="right"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong>Piscina</strong></font></div></td>
<td> </td>
<td colspan="2"><input type="checkbox" name="piscina" value="S"></td>
<td> </td>
<td> </td>
</tr>
<tr bgcolor="#66CCFF">
<td> </td>
<td> </td>
<td colspan="2"><div align="center">
<input name="SUBMIT" type="SUBMIT" value="Buscar">
</div></td>
<td> </td>
<td>  </td>
</tr>
<tr bgcolor="#66CCFF">
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</table>
</td>
</tr>
</table>
<br>
<br>
</FORM></td>
Y en el documento buscar2.php he insertado este código sql para realizar la búsqueda:
//Ejecucion de la sentencia SQL
$result=mysql_db_query("xarop","SELECT `comarca` , `poblacio` , `establiment`
FROM `camping`
WHERE...

1 respuesta

Respuesta
1
Primero felicitarte por tu IMPRESIONANTE pregunta. Y lo Dicho Cuanto más tiempo le dediquéis a la pregunta más tiempo le dedicaré yo a la respuesta.
He probado el Código, pero no me enlaza bien el Buscar1 con el Buscar2. ¿Si está sin seleccionar pone N en la variable de Búsqueda? Según tu descripción de la tabla tiene que poner BLANCO (Not Null).
Evita el Uso del Like, usa comparaciones simples (es solo un tema de velocidad). Si usas LIKE quiere decir que no sabes si las variables '$comarca', '$bar' y '$supermercat' son de un carácter o de 0 Caracteres.
Prueba la sentencia
$result=mysql_db_query("xarop","SELECT `comarca` , `poblacio` , `establiment`,'La comarca', '$Comarca' , LEN('$Comarca'),... LEN('$Bar')
FROM `camping` )
Para ver si las variables son correctas y corresponden a los valores que tienes en la base de datos.
Es posible que todo se solicione poniendo 'N' en la base de dato y modificando el código para que si no está marcado ponga N en la variable.
Repegunta si te persisten los problemas o no has entendido.
Suerte, un saludo:
Jorge Morras
P.D.: Dan miedo las preguntas tan completas, pero es una gozada. Hay gente por aquí que no consigue una respuesta por que no explica el problema. Y encima la culpa es del que contesta.
Hola Jorge.
Ante todo, MIL GRACIAS por dedicarme parte de tu tiempo, es edificante ver como gente con un nivel de conocimientos como los tuyos no tienen inconveniente en facilitarlos a los que como yo estamos empezando.
He introducido la query que me comentas y el error que me indica es el mismo que me sale en las pruebas que he ido efectuando;
Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\centur\buscar2.php on line 110
Warning: Supplied argument is not a valid MySQL result resource in c:\apache\htdocs\centur\buscar2.php on line 116.
El código de la pàgina buscar2.php es este y como veras el error coincide con las líneas que hacen referencia a $result.(while ($row=mysql_fetch_array($result)) Y (mysql_free_result($result)
//Conexion con la base
mysql_connect("localhost","eduard","xarop1");
//Ejecucion de la sentencia SQL
$result=mysql_db_query("xarop","SELECT `comarca` , `poblacio` , `establiment`
FROM `camping`
WHERE 1 AND comarca LIKE '$comarca' AND 'supermercat' = '$supermercat'
AND 'bar' ='$bar' Order by comarca
");
?>
<table width="708" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#6699CC">
<tr>
<td width="505" height="85">
<table width="750" height="82" border="0" align="center" cellpadding="0" cellspacing="0" bordercolor="#0099CC" bgcolor="#6699CC">
<tr bordercolor="#0066FF" bgcolor="#0066FF">
<th height="35" colspan="3" bordercolor="#6699CC" bgcolor="#6699CC"><font color="#FFFFFF" size="4" face="Verdana, Arial, Helvetica, sans-serif">Establiments
coincidents amb la sel·lecció</font></th>
</tr>
<tr bordercolor="#0066FF" bgcolor="#0066FF">
<th bordercolor="#6699CC" bgcolor="#6699CC"><font face="Verdana, Arial, Helvetica, sans-serif"><strong><font color="#FFFFFF" size="2">comarca</font></strong></font></th>
<th bordercolor="#66CCFF" bgcolor="#6699CC"><font face="Verdana, Arial, Helvetica, sans-serif"><strong><font color="#FFFFFF" size="2">poblacio</font></strong></font></th>
<th bordercolor="#6699CC" bgcolor="#6699CC"><font face="Verdana, Arial, Helvetica, sans-serif"><strong><font color="#FFFFFF" size="2">establiment</font></strong></font></th>
</tr>
<tr bordercolor="#0066FF" bgcolor="#66CCFF">
<th width="250" height="31" bordercolor="#6699CC">
<div align="center"><font face="Verdana, Arial, Helvetica, sans-serif"><strong></strong></font></div></th>
<th width="250" bordercolor="#66CCFF"> <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif"><strong></strong></font></div></th>
<th width="250" bordercolor="#6699CC"> <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif"><strong></strong></font></div></th>
</tr>
<?
//Mostramos los registros
while ($row=mysql_fetch_array($result))
{
echo '<tr border="1" bordercolor="#00ccff" bgcolor="#66ccff" cellpadding="0" cellspacing="0"><td><div align="center"><font color="#000000" size="2"><strong><font face="Verdana, Arial, Helvetica, sans-serif">'.$row["comarca"].'</td>';
echo '<td><div align="center"><font color="#000000" size="2"><font face="Verdana, Arial, Helvetica, sans-serif">'.$row["poblacio"].'</a></td>';
echo '<td><div align="center"><font color="#000000" size="2"><font face="Verdana, Arial, Helvetica, sans-serif">'.$row["establiment"].'</td></tr>';
}
mysql_free_result($result)
?>
</table></td>
</tr>
</table>
<div align="center"><a href="insertar2.htm"><font color="#6699CC" size="2" face="Verdana, Arial, Helvetica, sans-serif">
<strong>tornar enrere</strong></font></a></div></td>
</tr>
<tr>
<td height="19">
<table width="100%" height="19" border="1" cellpadding="0" bordercolor="#000000">
<tr>
<td height="12" bgcolor="#0796DD">
<div align="right">
<table width="200" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><div align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong><font color="#FFFFFF">lamoscagironina
sl</font></strong></font></div></td>
</tr>
</table>
<font size="1" face="Verdana, Arial, Helvetica, sans-serif"><strong></strong></font></div></td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>
Los campos "supermercat", "bar" y "piscina" ls he definido en la BD como char(1) Not Null y default "N".
De lo que no estoy seguro es de si no esta marcado el checkbox, el valor que dé sea "N" ya que he hecho un formulario par incluir los valores en la BD y cuando no selecciono el checkbox correspondiente, queda en blanco en la BD.
Soy muy novato en esto de la programación y este es mi primer proyecto un poco serio.
Lo que me extranya de este caso es que si suprimo los checkbox del documento htm y también de las condiciones de búsqueda de la query, si me funciona de coña.
Mi idea es poner más servicios y quería probar con unos pocos para, poco a poco, ir añadiéndolos todos.
Saludos
Pero se va fuera de mis conocimientos. Yo manejo bastante asp y html, pero estos ficheros php de APACHE no los he tocado nunca.
Claramente necesitas que el Check Box devuelva 'N' si no está marcado. En ASP serie Sencillo. Al pulsar en el Botón buscar se ejectuta una función que si el check no está asigne a la variable el valor 'N' y si está que le asigne el valor 'S'.
De todas formas esta pregunta se ha ido un poco más lejos de mis conocimientos. (Y créeme que lo lamento yo más que tu)
Tu pregunta debería ser guardada en un MUSEO para que el resto de personas SEPAN como se debe PREGUNTAR las cosas.
Espero haberte sido de ayuda. Un Saludo y suerte:
Jorge Morras
P.D.: Puedes preguntar esto en la página http://www.todoexpertos.com/categorias/tecnologia_e_internet/desarrollo_de_sitios_web/php/
Solo sea por la atención que has tenido conmigo mereces ser puntuado con el máximo, ahí va un 5. Muchas gracias por todo y cuando tenga la solución, si te parece, te la remitiré.
Saludos Jorge.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas