Foros del Web » Programando para Internet » PHP »

Generar consulta según tipo

Estas en el tema de Generar consulta según tipo en el foro de PHP en Foros del Web. Hola, he estado mirando por los FAQ's y buscando por el foro pero la verdad no econtré nada de lo que estoy buscando. Mi cuestión ...
  #1 (permalink)  
Antiguo 08/02/2006, 05:58
Avatar de Malocado  
Fecha de Ingreso: septiembre-2004
Mensajes: 24
Antigüedad: 19 años, 7 meses
Puntos: 0
Generar consulta según tipo

Hola, he estado mirando por los FAQ's y buscando por el foro pero la verdad no econtré nada de lo que estoy buscando.

Mi cuestión es la siguiente:

Tengo hecha una consulta que me saca los coches segun la marca que le indico a la consulta, pero lo que quiero es que al seleccionar la marca, me genere la consulta de la marca seleccionada.

El código es el siguiente:
Código PHP:
<?php 
$link 
mysql_connect("localhost""root"""); 
mysql_select_db("josman"$link);

$resultado mysql_query("SELECT marcas.Marca, modelos.Modelo, versiones.Motor, versiones.Puertas, versiones.AA, versiones.Clima, versiones.DA, versiones.ABS, versiones.Airbag, versiones.EE, versiones.CC, versiones.CD, versiones.Otras, versiones.Foto, versiones.Fecha, versiones.Precio, versiones.Tipo
                       FROM marcas INNER JOIN modelos ON marcas.Marca = modelos.Marca INNER JOIN versiones ON modelos.Modelo = versiones.Modelo
                       WHERE marcas.Marca='Opel'
                       ORDER BY marcas.Marca ASC;"
$link); 
echo 
"<table border = '0' width='100%' class = 'Estilo2'>"
echo 
"<tr><td class='Estilo1'>Marca</td><td class='Estilo1'>Modelo</td><td class='Estilo1'>Motor</td><td class='Estilo1'>Puertas</td><td class='Estilo1'>AA</td><td class='Estilo1'>Clima</td><td class='Estilo1'>DA</td><td class='Estilo1'>ABS</td><td class='Estilo1'>Airbag</td><td class='Estilo1'>EE</td><td class='Estilo1'>CC</td><td class='Estilo1'>CD</td><td class='Estilo1'>Otras características</td><td class='Estilo1'>Foto</td><td class='Estilo1'>Año</td><td class='Estilo1'>Precio</td></tr>"
//Muesta los Resultados
while ($row mysql_fetch_row($resultado)){ 
       echo 
"<tr><td class='Estilo2'>$row[0]</td><td class='Estilo2'>$row[1]</td><td class='Estilo2'>$row[2]</td><td class='Estilo2'>$row[3]</td><td class='Estilo2'>$row[4]</td><td class='Estilo2'>$row[5]</td><td class='Estilo2'>$row[6]</td><td class='Estilo2'>$row[7]</td><td class='Estilo2'>$row[8]</td><td class='Estilo2'>$row[9]</td><td class='Estilo2'>$row[10]</td><td class='Estilo2'>$row[11]</td><td class='Estilo2'>$row[12]</td><td class='Estilo2'>$row[13]</td><td class='Estilo2'>$row[14]</td><td class='Estilo2'>$row[15] €</td></tr>"

echo 
"</table>"
?>
Espero haberme expresado bién.

Saludos
  #2 (permalink)  
Antiguo 08/02/2006, 09:36
Avatar de Malocado  
Fecha de Ingreso: septiembre-2004
Mensajes: 24
Antigüedad: 19 años, 7 meses
Puntos: 0
Bueno ya encontré la solución, pero ahora me da un error que no sé porqué lo da

Aquí dejo el código.

Código PHP:
<?php 
$link 
mysql_connect("localhost""root"""); 
mysql_select_db("josman"$link);
// Criterio por el que se filtraran los resultados
$criterio ""
$txt_criterio ""
if (
$_GET["criterio"]!=""){ 
   
$txt_criterio $_GET["criterio"]; 
   
$criterio " WHERE marcas.Marca LIKE '%" $txt_criterio "%'"

$resultado mysql_query("SELECT marcas.Marca, modelos.Modelo, versiones.Motor, versiones.Puertas, versiones.AA, versiones.Clima, versiones.DA, versiones.ABS, versiones.Airbag, versiones.EE, versiones.CC, versiones.CD, versiones.Otras, versiones.Foto, versiones.Fecha, versiones.Precio, versiones.Tipo
                       FROM marcas INNER JOIN modelos ON marcas.Marca = modelos.Marca INNER JOIN versiones ON modelos.Modelo = versiones.Modelo" 
.$criterio$link);
// Si no se existen los resultados, da error
$Registros=mysql_num_rows($resultado); 
if(
$Registros<=0)

    echo 
"<div align='center'>"
    echo 
"<div align='center' class='Estilo3'>La marca no existe</font>"
    echo 
"</div>"
}
else
{
// Consulta con su filtro
$resultado mysql_query("SELECT marcas.Marca, modelos.Modelo, versiones.Motor, versiones.Puertas, versiones.AA, versiones.Clima, versiones.DA, versiones.ABS, versiones.Airbag, versiones.EE, versiones.CC, versiones.CD, versiones.Otras, versiones.Foto, versiones.Fecha, versiones.Precio, versiones.Tipo
                       FROM marcas INNER JOIN modelos ON marcas.Marca = modelos.Marca INNER JOIN versiones ON modelos.Modelo = versiones.Modelo" 
.$criterio 
                       
"ORDER BY modelos.Modelo ASC"$link);

echo 
"<table border = '0' width='100%' class = 'Estilo2'>"
echo 
"<tr><td class='Estilo1'>Marca</td><td class='Estilo1'>Modelo</td><td class='Estilo1'>Motor</td><td class='Estilo1'>Puertas</td><td class='Estilo1'>AA</td><td class='Estilo1'>Clima</td><td class='Estilo1'>DA</td><td class='Estilo1'>ABS</td><td class='Estilo1'>Airbag</td><td class='Estilo1'>EE</td><td class='Estilo1'>CC</td><td class='Estilo1'>CD</td><td class='Estilo1'>Otras características</td><td class='Estilo1'>Foto</td><td class='Estilo1'>Año</td><td class='Estilo1'>Precio</td></tr>"
// Muesta los Resultados
while ($row mysql_fetch_row($resultado)){ 
// Convierte a mayúsculas los resultados
$motor "$row[2]";
$motor strtoupper ($motor);
// Campos: Marca, Modelo, Motor, Puertas
echo "<tr><td class='Estilo2'>$row[0]</td><td class='Estilo2'>$row[1]</td><td class='Estilo2'>$motor</td><td class='Estilo2'>$row[3]</td>";
// Aire Acondicionado
if($row[4] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Climatizador
if($row[5] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Dirección Asistida
if($row[6] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// ABS
if($row[7] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Airbag
if($row[8] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Elevalunas Eléctricos
if($row[9] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Cierre centralizado
if($row[10] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// CD
if($row[11] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Campo: Otras características, 
echo "<td class='Estilo2'>$row[12]</td>";

// Foto
if($row[13] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Campos: Año, Precio
echo "<td class='Estilo2'>$row[14]</td><td class='Estilo2'>$row[15] €</td></tr>"

echo 
"</table>"
}
?>
El Error es este:

Cita:
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\Servidor\web\www\consulta2.php on line 26
Si a esa línea le quito esto:

Cita:
"ORDER BY modelos.Modelo ASC"
Si que funciona :S

Gracias y Saludos.

Última edición por Malocado; 08/02/2006 a las 09:43
  #3 (permalink)  
Antiguo 08/02/2006, 13:51
Avatar de Malocado  
Fecha de Ingreso: septiembre-2004
Mensajes: 24
Antigüedad: 19 años, 7 meses
Puntos: 0
Ya no sé que hacer...

Bueno poco a poco voy sacando soluciones, pero también salen más errores.

Lo que he hecho a sipo poner el ORDER BY antes que el .$criterio pero ahora me sale este error.

Código:
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in C:\Servidor\web\www\consulta2.php on line 43
Aquí el Código:

Código PHP:
<title>Consulta Marcas</title>
<style type="text/css">
<!--
.Estilo1 {font-size: xx-small; font-weight: bold; font-family: Verdana; background-color: #D2D2D2;}
.Estilo2 {font-size: xx-small; font-family: Verdana; font-size: xx-small;}
.Estilo3 {font-size: xx-small; font-weight: bold; font-family: Verdana;}
A:link {COLOR: #0066CC; TEXT-DECORATION: none; font-family: Verdana; font-size: xx-small;}
A:active {COLOR: #0066CC; TEXT-DECORATION: none; font-family: Verdana; font-size: xx-small;}
A:visited {COLOR: #0066CC; TEXT-DECORATION: none; font-family: Verdana; font-size: xx-small;}
A:hover {COLOR: #0066CC; TEXT-DECORATION: none; font-family: Verdana; font-size: xx-small;}
body {background-image: url(../logo.jpg);}
-->
</style>
<?php 
$link 
mysql_connect("localhost""weakness""aprovado"); 
mysql_select_db("josman"$link);
// Criterio por el que se filtraran los resultados
$criterio ""
$txt_criterio ""
if (
$_GET["criterio"]!=""){ 
   
$txt_criterio $_GET["criterio"]; 
   
$criterio " WHERE marcas.Marca LIKE '%" $txt_criterio "%'"

$resultado mysql_query("SELECT marcas.Marca, modelos.Modelo, versiones.Motor, versiones.Puertas, versiones.AA, versiones.Clima, versiones.DA, versiones.ABS, versiones.Airbag, versiones.EE, versiones.CC, versiones.CD, versiones.Otras, versiones.Foto, versiones.Fecha, versiones.Precio, versiones.Tipo
                       FROM marcas INNER JOIN modelos ON marcas.Marca = modelos.Marca INNER JOIN versiones ON modelos.Modelo = versiones.Modelo" 
.$criterio$link);
// Si no se existen los resultados, da error
$Registros mysql_num_rows($resultado); 
if(
$Registros<=0)

    echo 
"<div align='center'>"
    echo 
"<div align='center' class='Estilo3'>La marca no existe</font>"
    echo 
"</div>"
}
else
{
// Consulta con su filtro
$resultado mysql_query("SELECT marcas.Marca, modelos.Modelo, versiones.Motor, versiones.Puertas, versiones.AA, versiones.Clima, versiones.DA, versiones.ABS, versiones.Airbag, versiones.EE, versiones.CC, versiones.CD, versiones.Otras, versiones.Foto, versiones.Fecha, versiones.Precio, versiones.Tipo
                       FROM marcas INNER JOIN modelos ON marcas.Marca = modelos.Marca INNER JOIN versiones ON modelos.Modelo = versiones.Modelo 
                       ORDER BY marcas.Marca ASC, modelos.Modelo ASC" 
.$criterio$link);
echo 
"<table border = '0' width='100%' class = 'Estilo2'>"
echo 
"<tr><td class='Estilo1'>Marca</td><td class='Estilo1'>Modelo</td><td class='Estilo1'>Motor</td><td class='Estilo1'>Puertas</td><td class='Estilo1'>AA</td><td class='Estilo1'>Clima</td><td class='Estilo1'>DA</td><td class='Estilo1'>ABS</td><td class='Estilo1'>Airbag</td><td class='Estilo1'>EE</td><td class='Estilo1'>CC</td><td class='Estilo1'>CD</td><td class='Estilo1'>Otras características</td><td class='Estilo1'>Foto</td><td class='Estilo1'>Año</td><td class='Estilo1'>Precio</td></tr>"
// Muesta los Resultados
while ($row mysql_fetch_row($resultado)){ 
// Convierte a mayúsculas los resultados
$motor "$row[2]";
$motor strtoupper ($motor);
// Campos: Marca, Modelo, Motor, Puertas
echo "<tr><td class='Estilo2'>$row[0]</td><td class='Estilo2'>$row[1]</td><td class='Estilo2'>$motor</td><td class='Estilo2'>$row[3]</td>";
// Aire Acondicionado
if($row[4] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Climatizador
if($row[5] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Dirección Asistida
if($row[6] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// ABS
if($row[7] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Airbag
if($row[8] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Elevalunas Eléctricos
if($row[9] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Cierre centralizado
if($row[10] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// CD
if($row[11] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Campo: Otras características, 
echo "<td class='Estilo2'>$row[12]</td>";

// Foto
if($row[13] == 0){
         echo 
"<td class='Estilo2'>No</td>";
}else{
         echo 
"<td class='Estilo2'>Sí</td>";
}

// Campos: Año, Precio
echo "<td class='Estilo2'>$row[14]</td><td class='Estilo2'>$row[15] €</td></tr>"

echo 
"</table>"
}

?>
Justo en esta línea:

Código PHP:
while ($row mysql_fetch_row($resultado)){ 
Gracias y saludos
  #4 (permalink)  
Antiguo 08/02/2006, 13:58
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Este tipo de error se da por que no se realizo de forma correcta el query o bien el query no arrojo ningun resultado. Checa la sentencia de tu query y checa si te estas conectando de la forma correcta a la BD
  #5 (permalink)  
Antiguo 08/02/2006, 14:08
Avatar de Malocado  
Fecha de Ingreso: septiembre-2004
Mensajes: 24
Antigüedad: 19 años, 7 meses
Puntos: 0
Conectar conecta bién porque si conecto de este modo, http:/localhost/consulta2.php me saca todos los resultados de la consulta, y cuando le pongo el filtro http:/localhost/consulta2.php?criterio=Opel es cuando me da el error ese
  #6 (permalink)  
Antiguo 08/02/2006, 14:13
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
¿En que select te esta fallando?
Esto para acortar un poco mas el código....
  #7 (permalink)  
Antiguo 08/02/2006, 14:18
Avatar de Malocado  
Fecha de Ingreso: septiembre-2004
Mensajes: 24
Antigüedad: 19 años, 7 meses
Puntos: 0
Fallaba en este:
Código PHP:
$resultado mysql_query("SELECT marcas.Marca, modelos.Modelo, versiones.Motor, versiones.Puertas, versiones.AA, versiones.Clima, versiones.DA, versiones.ABS, versiones.Airbag, versiones.EE, versiones.CC, versiones.CD, versiones.Otras, versiones.Foto, versiones.Fecha, versiones.Precio, versiones.Tipo 
                       FROM marcas INNER JOIN modelos ON marcas.Marca = modelos.Marca INNER JOIN versiones ON modelos.Modelo = versiones.Modelo  
                       ORDER BY marcas.Marca ASC, modelos.Modelo ASC" 
.$criterio$link); 
Pero ya está solucionado, de ahi el nuevo error

Código PHP:
<?php while ($row mysql_fetch_row($resultado)){
  #8 (permalink)  
Antiguo 08/02/2006, 14:19
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
ahora bien si es el segundo select; el where tiene que ir antes del order by. Echale un ojo al manual http://dev.mysql.com/doc/refman/5.0/en/select.html
  #9 (permalink)  
Antiguo 08/02/2006, 14:25
Avatar de Malocado  
Fecha de Ingreso: septiembre-2004
Mensajes: 24
Antigüedad: 19 años, 7 meses
Puntos: 0
Entonces me da este error xDDD

Código:
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\Servidor\web\www\consulta2.php on line 26
Al ponerlo como tu dices

Esto es un lio
  #10 (permalink)  
Antiguo 08/02/2006, 14:31
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
Ya probaste poniendo directamente el where.

Código PHP:
<?
$resultado 
mysql_query("SELECT marcas.Marca, modelos.Modelo, versiones.Motor, versiones.Puertas, versiones.AA, versiones.Clima, versiones.DA, versiones.ABS, versiones.Airbag, versiones.EE, versiones.CC, versiones.CD, versiones.Otras, versiones.Foto, versiones.Fecha, versiones.Precio, versiones.Tipo  
                       FROM marcas INNER JOIN modelos ON marcas.Marca = modelos.Marca INNER JOIN versiones ON modelos.Modelo = versiones.Modelo WHERE marcas.Marca LIKE '%" 
$txt_criterio "%'"  
                       
ORDER BY marcas.Marca ASCmodelos.Modelo ASC", $link);
  #11 (permalink)  
Antiguo 08/02/2006, 14:45
Avatar de Malocado  
Fecha de Ingreso: septiembre-2004
Mensajes: 24
Antigüedad: 19 años, 7 meses
Puntos: 0
Muchisimas gracias, era justamente eso, al poner lo que me has dicho funciona, gracias de nuevo

Saludos
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 22:49.