Foros del Web » Programando para Internet » PHP »

Es posible esto?

Estas en el tema de Es posible esto? en el foro de PHP en Foros del Web. Amigos son muy nuevo en esto y todavia no le pesco la vuelta. Encontre un script de un buscador en php y mysql en la ...
  #1 (permalink)  
Antiguo 09/09/2010, 18:45
 
Fecha de Ingreso: noviembre-2007
Mensajes: 69
Antigüedad: 16 años, 4 meses
Puntos: 0
Es posible esto?

Amigos son muy nuevo en esto y todavia no le pesco la vuelta. Encontre un script de un buscador en php y mysql en la web que me funciono bien. El tema es que originalmente el script posee un formulario donde selecciona en forma dinamica en el primer select los campos de la tabla; en el segundo campo se coloca la palabra clave y al buscar arroja todos los datos que coincidieran.

Quiero adaptarlo para un uso particular. Lo que hice es configurar el primer select para que me llame todos los valores de la primer columna y también borré el campo donde se colocaba la palabra clave reemplazandolo por otro select que me llame todos los datos contenidos en la segunda columna de la tabla.

De esta manera si selecciono un valor del primer select (correspondiente a todos los valores cargados en la primer columna) y un valor del segundo select (correspondiente a todos los valores cargados en la segunda columna)me tendría que taer todos los resultados que coincidan con esta combinación, o sea todos los otros valores de las demas columnas (9 en total).

El tema es que estoy haciendo mal las cosa ya que no me funciona. Me tira el error que no hay un campo con el nombre seleccionado. Pensando un poco me doy cuenta que el script me toma el nombre del valor del campo como nombre del campo y por eso me tira error.

Les paso el código que modifique:

Código PHP:
<?

////////////////////////////
// Configuración
///////////////////////////

//modifica estas variables según tu servidor de MySQL

$bd_servidor "localhost";

$bd_usuario "root";

$bd_contrasenya "";

$bd_bdname "";

$bd_tabla "ACCESORIOS"// Tabla donde se harán las búsquedas

// Conexión y selección de la base de datos

$link mysql_connect($bd_servidor,$bd_usuario,$bd_contrasenya);

mysql_select_db($bd_bdname,$link);

////////////////////////////
// Formulario
///////////////////////////

?>

<center>
<p><h2>Introduce las palabras para la búsqueda</h2></p>
<p><form name="buscador" method="post" action="buscador_generico.php"><br>
Buscar en:
<select name="campo">
<?php

//Con este query obtendremos los campos por los cuales el usuario puede buscar

$result mysql_query("SELECT DISTINCT PRODUCTO FROM `$bd_tabla`",$link);

while(
$row mysql_fetch_row($result)) {

// en $row[0] tenemos el nombre del campo
// de esta manera no necesitamos conocer el nombre de los campos
// por lo que cualquier tabla nos valdrá

?>
<option value="<?php echo $row[0]; ?>"><?php echo $row[0]; ?></option>
<?php

}

?>
</select>
<select name="firma">
<?php

//Con este query obtendremos los campos por los cuales el usuario puede buscar

$result mysql_query("SELECT DISTINCT FIRMA FROM `$bd_tabla`",$link);

while(
$row mysql_fetch_row($result)) {

// en $row[0] tenemos el nombre del campo
// de esta manera no necesitamos conocer el nombre de los campos
// por lo que cualquier tabla nos valdrá

?>
<option value="<?php echo $row[0]; ?>"><?php echo $row[0]; ?></option>
<?php

}

?>
</select>

<br>
<input type="submit" value="Enviar" name="enviar">
</form></p>
</center>

<?

////////////////////////////
// Proceso del Formulario
///////////////////////////

if(isset($_POST['enviar'])) {

// Solo se ejecuta si se ha enviado el formulario

$query "SELECT * from $bd_tabla WHERE `{$_POST['campo']}` LIKE '%{$_POST['firma']}%'"

$result mysql_query($query,$link);

 
echo 
mysql_error(); 


$found false// Si el query ha devuelto algo pondrá a true esta variable

while ($row mysql_fetch_array($result)) {                                                

$found true;

echo 
"<p>";

foreach(
$row as $nombre_campo => $valor_campo) {

// Tenemos que mostrar todos los campos de las filas donde se haya
// encontrado la búsqueda.


if(is_int($nombre_campo)) {

continue; 
//Cuando hacemos mysql_fetch_array, php genera un array
// con todos los valores guardados dos veces, uno con
// índice numérico y otro con índice el nombre del campo.
// Solo nos interesa el del nombre del campo.

}

echo 
"<b>".$nombre_campo."</b> : ".$valor_campo."<br>";
}

echo 
"</p>";

}

if(!
$found) {

echo 
"No se encontró la palabra introducida";

}

}
?>
Les agradeceré mucho su ayuda.
  #2 (permalink)  
Antiguo 09/09/2010, 19:06
Avatar de mko
mko
 
Fecha de Ingreso: agosto-2010
Ubicación: la vida es un riesgo
Mensajes: 101
Antigüedad: 13 años, 8 meses
Puntos: 14
Sonrisa Respuesta: Es posible esto?

opcion 1: intestas hacer es una busqueda con dos comparaciones basado en que si elijo por ejmplo estufa me llene el combox siguiente con las distintas marcas si es est lo que deceas te recomiendo q uses combox dinamicos dependientes

opcion 2: simplemente deceas llenar los combox con los datos de dos campos de tu tabla
  #3 (permalink)  
Antiguo 09/09/2010, 19:24
 
Fecha de Ingreso: mayo-2010
Ubicación: uruguay
Mensajes: 62
Antigüedad: 13 años, 11 meses
Puntos: 7
Respuesta: Es posible esto?

mmm... dos tablas? sino entiendo mal ;
entonces

SELECT *
FROM 1er tabla, 2da tabla --> debes de saber que tabla vas a consultar!
WHERE .....
AND ....

Una solo consulta y te traes todo ....
mas seguro probarlo desde la consola de mysql..


Salute!..
  #4 (permalink)  
Antiguo 10/09/2010, 05:34
 
Fecha de Ingreso: noviembre-2007
Mensajes: 69
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Es posible esto?

mko y vitamina, gracias por sus respuestas.

La tabla sobre la que necesito trabajar es la misma, solo que un select tiene que cargar la primer columna y el otro la segunda columna, de esta manera al seleccionar un valor de cada uno de estos do selects y apretar el boton "enviar" tiene que arrojar todas las concordancias que se encuentren.

La columna "producto" tiene cargado valores como "zapatos, mocacines, zapatillas, etc" y la columna "firma" carga las marcas, por lo que un producto puede coincidir con varias marcas. Lo que quiero es seleccionar por ejemplo" en el primer select "zapatos" en el segundo "marca pirulo" y que me traiga todo el valor de la fila (son 9 columnas o campos en total) serían "color, modelo, disponibilidad, etc).

No se si se puede hacer. Los valores de la tabla son pocos, no mas de 400.

Estuve viendo lo de los selects dinamicos, pero no se sies exactamente lo que necesito ya que para mi utilidad bastaria con que la respuesta a la consulta arroje todas las coincidencias entre esas 2 columnas que aclaro son de la misma tabla.

Les agradeceré mucho su ayuda.

Última edición por jotaperez; 10/09/2010 a las 12:10
  #5 (permalink)  
Antiguo 01/02/2011, 15:37
Avatar de mko
mko
 
Fecha de Ingreso: agosto-2010
Ubicación: la vida es un riesgo
Mensajes: 101
Antigüedad: 13 años, 8 meses
Puntos: 14
Respuesta: Es posible esto?

hola hola ya tenia rato que no andaba por aqui es probable q hayas encontrado la solucion ya entendi lo que deceas...

¿es hacer una consulta basada en dos campos de tu misma tabla?
es decir la opcion 2:
y para tu comodidad quieres que esos campos se visualiza en en un combos diferentes

a mero ejemplo te lo tratare de explicar:
su pon que tienes una tabla con el nombre autos la cual tiene todos los autos diponibles en venta

con los siguientes campo
_______________________
id, marca, color, precio,status
______________________--
suponiendo que realizas la búsqueda de acuerdo a marca y color
.................................................. ................
dentro de un formulario usando el metodo post dos combos con datos del campo marca y color de la tabla autos y un boton submit seria algo asi:

para el combo marca

codigo php:

tu conexion..

$sql="SELECT id,marca FROM autos ORDER BY marca";
$result=mysql_query($sql);
echo "<select name='marca' id='marca' >";
while($fila=mysql_fetch_array($result))
{
echo "<OPTION VALUE=\"" . $fila["marca"]."\">". $fila["marca"]." </OPTION>\n";
}
echo "</SELECT>";
?>

crea el combo color sustituyendo donde corresponda

creas tu boton submit para el envio del formulario y cierrar el form
:::::::::::::::::::::::::::::::::::::::::::::::::: :::::::::
para mostrar los datos haces uso del la comparacion de campos LIKE

:::::::::::::::::
aqui tu conexion
$marca=$_POST['marca'];
$color=$_POST['color'];
$consulta = mysql_query("SELECT * FROM autos WHERE marca LIKE '$marca' or color LIKE '$color' ",$conexion);
if ($row = mysql_fetch_array($consulta))
{
$c=1;
echo "<table border='1'>";
echo "<tr>";
echo "<td><div align='center' class='tablatitulo'>#</div></td>
<td><div align='center' class='tablatitulo'>marca</div></td>
<td><div align='center' class='tablatitulo'>color</div></td>
<td><div align='center' class='tablatitulo'>disponible</div></td>
";
echo "</tr>";
do {
echo "<tr >";
echo "<td><div>$c</div></td>
<td><div>".$row["marca"]."</div></td>
<td><div class='topmenu'>".$row["color"]."</div></td>
<td><div class='topmenu'>".$row["status"]."</div></td>";

$c++;
echo "</tr>" ;
} while ($row = mysql_fetch_array($consulta));
echo "</table> \n";
}else {
echo "<div class='noresultado'>****NO SE ENCONTRARON REGISTROS***</div>";
}



y listo con eso obtienes las coicidencias que existe en tu tabla con esos campos

Etiquetas: posible
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 20:30.