Consulta mysql

Hola de nuevo. Hace algunas semanas te hice una pregunta sobre sql y siguiendo tus indicaciones he creado el fichero php, pero me da el siguiente error: parse error, expecting `','' or `')'' in C:\wamp\www\prueba\filtro.php on line 35. Te incluyo el código por si pudieras echarme una mano. Al final he incluido una tabla para que me muestre los datos ¿crees qué es correcta?. Gracias.
<html>
<head>
<title>Automóviles encontrados</title>
</head>
<body>
<?php
$Matricula= $_POST["Matricula"];
$Marca= $_POST["Marca"];
$Modelo= $_POST["Modelo"];
$Precio= $_POST["Precio"];
$conexion = mysql_connect("localhost","root","") or die ("no se pudo conectar con la base de datos");
$db = mysql_select_db("trabajo", $conexion) or die ("no se pudo conectar a trabajo");
$consulta = "INSERT INTO vehiculos (Matricula, Marca, Modelo, Precio) VALUES ('$Matricula','$Marca','$Modelo','$Precio')";
$resultado = mysql_query($consulta) or die ("No se pudo agregar el registro");
echo "Nuevo automóvil agregado a la base de datos<br>";
$conexion = mysql_connect("localhost","root","") or die ("no se pudo conectar con la base de datos");
$db = mysql_select_db("trabajo", $conexion) or die ("no se pudo conectar a trabajo");
$sql_query="SELECT * FROM 'vehiculos' WHERE ";
//tablaaaa es tu tabla y en $sql_query está la primera parte de la sentencia. (lo que no cambia)//
$where_query="#";
//lo uso para quitar luego el primer AND sobrante //
$where_query .= (isset($_POST[Matricula]) && $_POST[Matricula] != "")?" AND `Matricula`= '$_POST[Matricula]'":"";  
/*Si el filtro1 tiene un valor, añade "AND `campo1` = '$_GET[filtro1]'" a la where_query (el $_GET[filtro1] lo puedes sustituir por $_POST[filtro1] y otras cosas, que es uno de los filtros (puede ser por ejemplo nombre, apellido, correo, etc...)*/
$where_query .= (isset($_POST[Marca] && $_POST[Marca] != "")?", `Marca` = $_POST[Marca]":"";  //E  R  R  O  R   E N  E S T A  L I N E A//
$where_query .= (isset($_POST[Modelo] && $_POST[Modelo] != "")?", `Modelo` = $_POST[Modelo]":"";
$where_query .= (isset($_POST[Precio] && $_POST[Precio] != "")?", `Precio` = $_POST[Precio]":"";
$sql_query .= str_replace("# AND", "", $where_query);
/*Si todos los filtros se cumplieron, where_query tiene la forma   -> # AND `campo1` = hola AND `campo2` = adios    <- con lo que hay que quitar el primer AND (Y para eso estaba el # del principio, para localizarlo. Y lo que salga, se le concatena al principio de sql_query y ya tenemos la sentencia lista*/
$final=mysql_query($sql_query);
echo "
<table border = '1'>
\n";
echo "
<tr>
\n";
echo "
<td><b>Matricula</b></td>
\n";
echo "
<td><b>Marca</b></td>
\n";
echo "
<td><b>Modelo</b></td>
\n";
echo "
<td><b>Precio</b></td>
\n";
echo "
</tr>
\n";
while ($row = mysql_fetch_row($final)){
echo "
<tr>
\n";
echo "
<td>$row[Matricula]</td>
\n";
echo "
<td>$row[Marca]</td>
\n";
echo "
<td>$row[Modelo]</td>
\n";
echo "
<td>$row[Precio]</td>
\n";
echo "
</tr>
\n";
}
echo "
</table>
\n";
mysql_close($conexion);
?>
</body>
</html>
Si prefieres los ficheros, te los envío. Gracias de nuevo.

1 respuesta

Respuesta
1
Te corrijo una y ya lo haces para las otras, el problema es que te falta un paréntesis.
$where_query .= (isset($_POST[Modelo] && $_POST[Modelo] != "")?", `Modelo` = $_POST[Modelo]":""; //línea original
$where_query .= (isset($_POST[Modelo]) && $_POST[Modelo] != "")?", `Modelo` = $_POST[Modelo]":""; //línea modificada
si te fijas, falta un paréntesis cerrado entre el isset($_POST[xxx] y el &&
En matrícula lo tienes bien, pero no en marca, modelo ni precio ;)
Hola. Siento volver a importunarte, pero ahora me sale el siguiente error.
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\wamp\www\prueba\filtro.php on line 24
Como mis conocimientos son muy básicos pues enseguida me pierdo.
Te comento que en el formulario que envía la consulta hay cuatro inputs: Matricula, Marca, Modelo y Precio, y los campos de la tabla se llaman igual. ¿Hay algún problema por ello?
Gracias de nuevo.
Un saludo
Se me olvidaba, el código actualmente está así:
<html>
<head>
<title>Automóviles encontrados</title>
</head>
<body>
<?php
$Matricula= $_POST["Matricula"];
$Marca= $_POST["Marca"];
$Modelo= $_POST["Modelo"];
$Precio= $_POST["Precio"];
$conexion = mysql_connect("localhost","root","") or die ("no se pudo conectar con la base de datos");
$db = mysql_select_db("trabajo", $conexion) or die ("no se pudo conectar a trabajo");
$sql_query="SELECT * FROM 'vehiculos' WHERE ";
//tablaaaa es tu tabla y en $sql_query está la primera parte de la sentencia. (lo que no cambia)//
$where_query="#";
//lo uso para quitar luego el primer AND sobrante //
$where_query .= (isset($_POST[Matricula]) && $_POST[Matricula] != "")?" AND `Matricula`= '$_POST[Matricula]":""; 
/*Si el filtro1 tiene un valor, añade "AND `campo1` = '$_GET[filtro1]'" a la where_query (el $_GET[filtro1] lo puedes sustituir por $_POST[filtro1] y otras cosas, que es uno de los filtros (puede ser por ejemplo nombre, apellido, correo, etc...)*/
$where_query .= (isset($_POST[Marca]) && $_POST[Marca] != "")?", `Marca` = $_POST[Marca]":"";
$where_query .= (isset($_POST[Modelo]) && $_POST[Modelo] != "")?", `Modelo` = $_POST[Modelo]":"";
$where_query .= (isset($_POST[Precio]) && $_POST[Precio] != "")?", `Precio` = $_POST[Precio]":"";
$sql_query .= str_replace("# AND", "", $where_query);
/*Si todos los filtros se cumplieron, where_query tiene la forma   -> # AND `campo1` = hola AND `campo2` = adios    <- con lo que hay que quitar el primer AND (Y para eso estaba el # del principio, para localizarlo. y lo que salga, se le concatena al principio de sql_query y ya tenemos la sentencia lista*/
$final=mysql_query($sql_query);
echo "
<table border = '1'>
\n";
echo "
<tr>
\n";
echo "
<td><b>Matricula</b></td>
\n";
echo "
<td><b>Marca</b></td>
\n";
echo "
<td><b>Modelo</b></td>
\n";
echo "
<td><b>Precio</b></td>
\n";
echo "
</tr>
\n";
while ($row = mysql_fetch_row($final)){
echo "
<tr>
\n";
echo "
<td>$row[Matricula]</td>
\n";
echo "
<td>$row[Marca]</td>
\n";
echo "
<td>$row[Modelo]</td>
\n";
echo "
<td>$row[Precio]</td>
\n";
echo "
</tr>
\n";
}
echo "
</table>
\n";
mysql_close($conexion);
?>
</body>
</html>
Hola. Rastreando la red hasta la saciedad he encontrado este código que aparentemente me funciona. Si no es mucha molestia ¿podrías explicármelo en "lenguaje para idiotas"?.
  $filtros='';
  foreach($_POST as $indice => $valor) {
    if ($valor!='') $filtros.="$indice='$valor' AND ";
  }
  if ($filtros!='') {
    $filtros=substr($filtros,0,strlen($filtros)-5);
    $consulta="SELECT * FROM vehiculos WHERE $filtros";
    mysql_query($consulta) or die ("Error al Ejecutar la Consulta: ".mysql_error());
    //todo lo demás...
  } else {
    echo "No se especificaron Filtros de Seleccion";
  }
Muchas gracias.
En el código anterior (el que te propuse), creo que se solucionaría escribiendo detrás de
$sql_query .= str_replace("# AND", "", $where_query);
la siguente línea
$sql_query = str_replace("#","1",$sql_query);
(Creo que el fallo era que cuando no había ningún filtro, la '#' no se eliminaba. (Es que no puedo probar gran cosa sin base de datos ni interprete php. XDD
bueno, ahora el código que me has enseñado...
$filtros=''; //filtros que le vas a meter al query en la parte del Where
  foreach($_POST as $indice => $valor) { //por cada variable que hayas <
<posteado>> con el formulario, metes el nombre en $indice, y el valor en $valor
    if ($valor!='') $filtros.="$indice='$valor' AND "; //si por la que vamos actualmente tiene algún valor, lo añadimos al filtro y añadimos " AND " para unirlo a los siguientes futuros filtros
  }
  if ($filtros!='') {//si hay algún filtro
    $filtros=substr($filtros,0,strlen($filtros)-5); //elimino los últimos 5 caracteres (es decir, ' AND '
    $consulta="SELECT * FROM vehiculos WHERE $filtros"; //se lo añado a la sentencia sql
    mysql_query($consulta) or die ("Error al Ejecutar la Consulta: ".mysql_error()); //y la ejecuto
    //todo lo demás...
  } Else {//en caso de que no haya ningún filtro
echo "No se especificaron Filtros de Selección"; //muestras mensaje de error.
  }

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas