Programación Web y Scripting > PHP
Obtener resultados de tabla mysql a traves de PHP Y formular
F_Tanori:
--- Cita de: "gisela87" ---Hola Anibal Muchas gracias por responder!!! He creado la base de datos como me dijiste...De la siguiente manera, no se si esta bien...
CATEGORIAS
-cod_cat (char, 5, Primary Key)
-desc_cat (varchar, 45)
ESPECIALIDADES
-cod_esp (char, 5, primary key)
-cod_cat (char, 5, index)
-desc_cat (varchar, 45)
MEDICOS
-cod_med (char, 5, primary key)
-nombre_med (varchar, 45)
-direccion_med (varhar, 45)
-telefono_med (varchar, 45)
ZONAS
cod_zona (char, 5, primary key)
desc_zona(varchar, 45)
DISPONIBILIDAD
cod_disp (int, 5, primary key)
cod_med (char, 5, index)
cod_zona (char, 5, index)
Y ahora como ejecuto las consultas sql con php?
De la forma que lo habia hecho antes...funcionaban solo dos selects.. el de zonas y el de categorias. Es decir que si al codigo le quitaba lo que esta en negrita
sql = "SELECT * FROM medicos, zonas, categorias, especialidades where medicos.cod_zona=zonas.cod_zona and categorias.cod_cat=medicos.cod_cat and categorias.cod_cat=especialidades.cod_cat and medicos.cod_esp=especialidades.cod_esp ";
if ($HTTP_POST_VARS['zonas'])
$sql .= " AND medicos.cod_zona = " .$_POST['zonas'];
if ($HTTP_POST_VARS[categorias'])
$sql .= " AND medicos.cod_cat = " .$_POST['categorias'];
if ($HTTP_POST_VARS['especialidad'])
$sql .= " AND medicos.cod_cat = " .$_POST['especialidad'];
fucionaba bien, es decir, no me daba ningun error y me listaba los medicos de acuerdo a las zonas y categorias pero no por especialidad obviamente...
El problema surge cuando colocaba lo que esta en negrita.. ahi si me aparacia el error Unknow column ' Guardias' in where clause, donde Guardias es uno de los registros de la tabla especialidades.
Bueno, espero tu respuesta y muchas gracias por ayudarme!!
Saludos!
--- Fin de la cita ---
Bueno segun la estructura de la tablas que muestras la Tabla Medicos no esta completa
Faltarian cuando menos los siguientes campos que aparecen en la consulta
cod_zona
cod_esp
sql = "SELECT * FROM medicos, zonas, categorias, especialidades where medicos.cod_zona=zonas.cod_zona and categorias.cod_cat=medicos.cod_cat and categorias.cod_cat=especialidades.cod_cat and medicos.cod_esp=especialidades.cod_esp ";
Lo que me hace pensar lo siguiente:
En esta instruccion lo que quieres es filtrar por especialidad, sin embargo (creo yo) no es el campo correcto, porque estas comparando categoria, con especialidad
if ($HTTP_POST_VARS['especialidad'])
$sql .= " AND medicos.cod_cat = " .$_POST['especialidad'];
Cuando deberia ser
if ($HTTP_POST_VARS['especialidad'])
$sql .= " AND medicos.cod_esp = " .$_POST['especialidad'];
Si el cod_esp es varchar (supongo que si ya que como dices contiene 'Guardias') debera ir entrecomillado tal como lo indico shadow_rev en su primera intervencion
esto es:
if ($HTTP_POST_VARS['especialidad'])
$sql .= " AND medicos.cod_esp = '" .$_POST['especialidad'] ."'";
y es precisamente que por eso MySQL intenta resover Guardias como una columna al no estar encerrado entre comillas, cuando te recomienda entre comillarlo el error ese se corregiria (por obvias razones) pero no encontraria resultados en caso de que mi teoria sea correcta y estes comparando el campo equivocado
Saludos
gisela87:
Hola!! ya pude resolver el problema...tenia mal la funcion.. pero ahora tengo otro problema...
como les dije tengo un select independiente que es zonas y dos selects dependientes (categorias y especialidades). Si ejecuto el codigo en el navegador y selecciono una opcion de los tres selects me devuelve los registros de acuerdo a lo que haya elegido.. hasta aca todo bien.. pero si selecciono una opcion del select independiente (zonas) y de los demas selects no selecciono nada no me devuelve ningun resultado.. Es decir, lo que quiero es que al seleccionar una opcion del select independiente por ejemplo Capital Federal (que es uno de los registros de la tabla zona) me devuelva como resultado todos los registros que contengan Capital federal pero sin haber seleccionado nada en los otros dos selects... como hago??? Aclaro que con el select Categorias si funciona, es decir, que si selecciono una opcion del select categoria y de los otros dos (zonas y especialidades) no selecciono nada me devulve los resultados ok!! Pero no funciona con el select independiente....
Gracias. y les dejo de nuevo el codigo (lo que resalte en negrita dentro del codigo es lo que tenia mal y que ya solucione)
<html>
<head>
<title>Documento sin título</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<?php
$con = mysql_connect('localhost', 'root', 'root');
mysql_select_db('empresa');
?>
<script>
function componer_Centros(cod_area)
{
//alert(cod_area);
document.miformulario.depto.length=0;
document.miformulario.depto.options[0] = new Option("-- Seleccione --","","defaultSelected","");
var indice=1;
<?
$sql_depto = "SELECT * from especialidades";
$rs_depto = mysql_query($sql_depto, $con);
if(mysql_num_rows($rs_depto)>0)
{
while($row_depto = mysql_fetch_assoc($rs_depto))
{
?>
if(cod_area=='<?=$row_depto["cod_cat"]?>')
{
document.miformulario.depto.options[indice] = new Option("<?=$row_depto["desc_esp"]?>","<?=$row_depto["cod_esp"]?>");
indice++;
}
<?
}
}
mysql_close($con);
?>
}
</script>
</head>
<body>
<p>Seleccion de un select y cambiar los valores de otro select sin tener que submitar (valido segun su uso)</p>
<form name="miformulario" method="post" action="PAGINA2.php">
<table width="249" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Zona</td>
<td>Categorias</td>
<td>Especialidad</td>
</tr>
<tr>
<tr>
<td><select name="zonas" id="zonas">
<option value="">--Seleccione--</option>
<?
$bd_host = "localhost";
$bd_usuario = "root";
$bd_password = "root";
$bd_base = "empresa";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
mysql_select_db($bd_base, $con);
?>
<? $sql = "SELECT * from zonas";
$rs = mysql_query($sql, $con); ?>
<? if(mysql_num_rows($rs)>0)
{
while($row = mysql_fetch_assoc($rs))
{
?>
<option value="<?=$row["cod_zona"]?>"><?=$row["desc_zona"]?></option>
<?
}
}
?>
</select>
<td><select name="empresa" id="empresa" onChange="componer_Centros(this.value)">
<option value="">--Seleccione--</option>
<?
$bd_host = "localhost";
$bd_usuario = "root";
$bd_password = "root";
$bd_base = "empresa";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
mysql_select_db($bd_base, $con);
?>
<? $sql = "SELECT * from categorias";
$rs = mysql_query($sql, $con); ?>
<? if(mysql_num_rows($rs)>0)
{
while($row = mysql_fetch_assoc($rs))
{
?>
<option value="<?=$row["cod_cat"]?>"><?=$row["desc_cat"]?></option>
<?
}
}
?>
</select></td>
<td><select name="depto" id="depto">
<option>--seleccione--</option>
</select></td>
<TD><input type="submit" name="cmdBuscar" id="cmdBuscar" value="IR"></TD>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
</table>
</form>
</body>
</html>
y esta es la pagina llamada pagina2.php a la cual llama el formulario:
<body>
<table border="1">
<tr>
<td>ID Propiedad </td>
<td>Propiedad</td>
<td>Ciudad</td>
<td>Descripción</td>
<td>Precio</td>
</tr>
<?php
$bd_host = "localhost";
$bd_usuario = "root";
$bd_password = "root";
$bd_base = "empresa";
$con = mysql_connect($bd_host, $bd_usuario, $bd_password);
mysql_select_db($bd_base, $con);
?>
<?php
$sql = "SELECT * FROM medicos, zonas, categorias, especialidades where medicos.cod_zona=zonas.cod_zona and categorias.cod_cat=medicos.cod_cat and categorias.cod_cat=especialidades.cod_cat and medicos.cod_esp=especialidades.cod_esp ";
if ($HTTP_POST_VARS['zonas'])
$sql .= " AND medicos.cod_zona = " .$_POST['zonas'];
if ($HTTP_POST_VARS['empresa'])
$sql .= " AND medicos.cod_cat = " .$_POST['empresa'];
if ($HTTP_POST_VARS['depto'])
$sql .= " AND medicos.cod_esp= " .$_POST['depto'];
$sql .= " ORDER BY nombre_med ASC";
$resultado = mysql_query($sql) or die ($Sql .mysql_error()."" );
while ($registro = mysql_fetch_array($resultado)) {
?>
<tr>
<td><?php echo $registro['cod_zona']; ?></td>
<td><?php echo $registro['desc_zona']; ?></td>
<td><?php echo $registro['nombre_med']; ?></td>
<td><?php echo $registro['direccion_med']; ?></td>
</tr>
<?php
}
mysql_free_result($resultado);
mysql_close($con);
?>
</table>
</table>
</body>
</html>
Muchisimas gracias a todos por su ayuda!!!
Navegación
[*] Página Anterior
Ir a la versión completa