Foros del Web » Programando para Internet » PHP »

hacer consulta multiple

Estas en el tema de hacer consulta multiple en el foro de PHP en Foros del Web. Hola, tengo una serie de productos almacenados en mi BD y necesito hacer una consulta de la siguiente manera: tengo un formulario que presenta los ...
  #1 (permalink)  
Antiguo 02/02/2005, 23:11
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
hacer consulta multiple

Hola, tengo una serie de productos almacenados en mi BD y necesito hacer una consulta de la siguiente manera:

tengo un formulario que presenta los items donde cada item tiene un checkbox

Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<
title>Documento sin t&iacute;tulo</title>
</
head>

<
body>
<
form name="form1" method="post" action="carrito.php">
  <
table width="80%"  border="0" cellspacing="0" cellpadding="0">
    <
tr>
      <
td width="55%">Amino Acids </td>
      <
td width="4%"><input type="checkbox" name="Amino" value="1"></td>
      <
td width="41%">30.000</td>
    </
tr>
    <
tr>
      <
td>L-Carnitina</td>
      <
td><input type="checkbox" name="carnitina" value="2"></td>
      <
td>40.000</td>
    </
tr>
    <
tr>
      <
td>Chromium Omniplus </td>
      <
td><input type="checkbox" name="chromium" value="3"></td>
      <
td>13.000</td>
    </
tr>
    <
tr>
      <
td colspan="3"><input type="submit" name="Submit" value="Enviar"></td>
    </
tr>
  </
table>
</
form>
</
body>
</
html
entonces, como el usuario puede seleccionar tantos items como desee, necesito generar una consulta que me arroje los resultados que el usuario quiere, para esto pense tomar las variables que me pasa el formulario (los campos seleccionados) y almacearlos en una misma variable para luego consultarlos en la BD, alguien me dijo que utilizara un array para tal fin pero la verdad es que soy nulo con los arrays.

aqui el codigo que hice para consultar


Código PHP:
<?
$dbh
=mysql_connect ("localhost""root""") or die ('I cannot connect to the database because: ' mysql_error());
mysql_select_db ("precios"); 
$prod1=$_POST['Amino'];
$prod2=$_POST['carnitina'];
$prod3=$_POST['chromium'];
$var1=$prod1."".$prod2."".$prod3;

?>
<table>
<?

$result
=mysql_db_query("precios","select * from productos WHERE id_producto like'%".$var1."%'");
echo 
$var1;

if (
mysql_num_rows($result) > )

{
    echo 
"Los Productos son : ";
    while (
$row=mysql_fetch_array($result))
    {
        {
        echo 
'<tr><td>'.$row['producto'].'</td>';
        echo 
'<td>'.$row['precio'].'</td></tr>';
        }
    }
} else {

echo 
"No ha seleccionado ninguno";
}

mysql_free_result($result);


?>
alguien me puede hechar una mano con esto?


gracias, es urgente
__________________
Say no more.......
  #2 (permalink)  
Antiguo 03/02/2005, 00:20
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Saludos... no he checado tu código (disculpa)... pero... se me ocurre algo simple...
1.- inicias tu query hasta antes de darles las especificaciones de la busqueda.
2.- Creas un if donde la condicional es que X variable esté definida y no vacia.
3.- Si devuelve TRUE añades a tu $query la especifiacción de tu busqueda..
$query = "SELECT * FROM... ";
if (X) {
$query.="AND .... ";
}
mysql_query(.....
Solo sugiero.. sin complicaciones.. Suerte!

Ah!... un array se crea algo así:
$var=array("primero","segundo","....");
así $var[3] va a ser igual a "tercero"
ó.. $var=array("primero"=>"hola", "segundo"=>"adios");
y así $var["primero"] valdrá "hola" y $var["segundo"] valdrá "adios".....
... más info ve a http://mx2.php.net/manual/es/ref.array.php
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 03/02/2005, 00:37
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
jam, me podrias explicar mejor tu idea, pues lo que necesito es algo bien simple y me suena bien eso que propones
__________________
Say no more.......
  #4 (permalink)  
Antiguo 03/02/2005, 00:50
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Pués eso..
$query = "SELECT * FROM tabla WHERE"; //inicias

if (variable_definida) { //depende del método por el que recibas.. y si es empty ó isset (quizá ambos)
$query.=" campo LIKE '%$buscar%'"; }
if (otra_variable) { $query.=" campo LIKE '%$buscar%'"; }

.... así $query se irá armando
Oyes... buscaste antes de preguntar??? Me topé con esto http://www.forosdelweb.com/f18/buscar-varias-palabras-239015/ y sin querer.... que no leí bien.. pero parace habaln de lo que querias en un inicio...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 03/02/2005, 00:54
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
si ya habia visto ese que me mencionas (el post) pero no lo entendi, voy a intentar con el tuyo a ver que tal me va, pero a ver si entiiendo, vos me propones que arme un $query. para cada uno de mis casos, es decir si tengo 16 items tendria que hacer 16 $query.?
__________________
Say no more.......
  #6 (permalink)  
Antiguo 03/02/2005, 01:25
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
no, no, no, no... ... si te daz cuenta... solo vaz agregando los parametros donde tu variable es válida.. así pues si tienes una solo variable queda
"WHERE campo1 LIKE '%busqueda1%'"
y si.. tienes 16 variables queda:
"... WHERE camp1 LIKE '%busca1%' AND camp2 ...... .... AND camp16 LIKE '%busca16%'
... trata de entenderlo... imprime tu query para que veas como se va acresentando.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #7 (permalink)  
Antiguo 03/02/2005, 11:18
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
Pues a decir verdad, no logro entender claramente la esencia de lo que me propone jam, alguien me lo podria explicar de manera mas clara, gracias
__________________
Say no more.......
  #8 (permalink)  
Antiguo 03/02/2005, 13:34
 
Fecha de Ingreso: febrero-2005
Mensajes: 5
Antigüedad: 12 años, 10 meses
Puntos: 0
Comparto la idea de jam..

Debes ir estructurando la query con base a los datos pedidos en el formulario:
Esto es lo que tienes :
<?
$dbh=mysql_connect ("localhost", "root", "") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("precios");
$prod1=$_POST['Amino'];
$prod2=$_POST['carnitina'];
$prod3=$_POST['chromium'];
$var1=$prod1."".$prod2."".$prod3;

?>
<table>
<?

$result=mysql_db_query("precios","select * from productos WHERE id_producto like'%".$var1."%'");


para estructurar la query debe ser algo como esto:
<?
$dbh=mysql_connect ("localhost", "root", "") or die ('I cannot connect to the database because: ' . mysql_error());
mysql_select_db ("precios");
$var1="select * from productos WHERE id_producto ";
if (!empty($_POST['Amino']))
{
$var1. = "like '%". $_POST['Amino']. "%'";
}
if (!empty($_POST['carnitina']))
{
$var1. = "or like '%". $_POST['carnitina']. "%'";
}
?>
<table>
<?

$result=mysql_db_query("precios",$var1);


Espero que te sea útil
  #9 (permalink)  
Antiguo 03/02/2005, 16:58
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
no entiendo por que si se define if (!empty($_POST['Amino'])), entonces se hace la consulta o sea:
if (!empty($_POST['Amino']))
{
$var1. = "like '%". $_POST['Amino']. "%'";
}

y otra cosa, como hago luego para publicar los resultados???
__________________
Say no more.......
  #10 (permalink)  
Antiguo 03/02/2005, 22:29
Avatar de el_cesar  
Fecha de Ingreso: mayo-2001
Ubicación: Cali
Mensajes: 2.411
Antigüedad: 16 años, 6 meses
Puntos: 20
Resulta que arme la query tal cual me la pasaron y parece que funciona pero si selecciono un solo producto, por que si selecciono mas de uno me da error, como hago para que se puedan seleccionr varior productos?

ahhh ademas si selecciono uno, me arroja como resultado el que selecciono mas otros que no tienen nada que ver
__________________
Say no more.......
  #11 (permalink)  
Antiguo 04/02/2005, 02:56
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
nada?... deberias de hacer diagramas de flujo... mira.. hice esto quizá te sirva:
Código PHP:
<?php

$prod
[]=$_POST['Amino'];
$prod[]=$_POST['carnitina'];
$prod[]=$_POST['chromium'];

$query="SELECT * FROM tabla WHERE columna "//inicias

$T=count($prod); //contamos elementos del arreglo

for($i=0$aux=0;$i<$T ;$i++) {
      if(
$prod[$i]!=false) {
      if (
$aux!=0) {
               
$query.=" OR ";
         }
     
$query.="LIKE '%$prod[$i]%' ";
         
$aux++;
      }
}
//entonces... 
if ($aux==false) {
     echo 
"No hubo criterios de busqueda";  No sé qué quieras hacer en este caso.
} else {
echo 
"Query:<br>$query"//para que veas si sirve..  :si: sí sí.. aquí deverias continuar.. conectas y demás.. 
}
?>
Dime si sirve... Suerte
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 04/02/2005 a las 03:06
  #12 (permalink)  
Antiguo 14/04/2005, 02:55
Avatar de francisvirtual  
Fecha de Ingreso: marzo-2005
Ubicación: Santo Domngo, Republica Dominicana
Mensajes: 6
Antigüedad: 12 años, 9 meses
Puntos: 0
formulario

heyy a ver si alguien puede ayudarme ...deseo colocar en una pagina web un formulario que es practicamente sencillo pero que no tenga ejecutable cgi solo que el usuario lo llene y lo envie a una direccion electronica ESTO ES LO QUE TENGO...pero necesito eliminarel script y que no vaya al ejecutable del servidor, como digo solo que vaya a una direccion de correo, sera posible? gracias de antemano amigos


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>CODOCOM</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
}
-->
</style>
<link href="style.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
.style1 {color: #34A02C}
-->
</style>
</head>

<body>
<table width="770" border="0" cellpadding="1" cellspacing="0" bgcolor="#C2C2C2">
<tr>
<td><table width="770" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<!--DWLayoutTable-->
<tr>
<td><!--DWLayoutEmptyCell-->&nbsp;</td>
</tr>
<tr>
<td><table width="770" border="0" cellspacing="0" cellpadding="0">
<!--DWLayoutTable-->
<tr>
<td width="150">&nbsp;</td>
<td width="1" bgcolor="#C2C2C2"><img src="images/spacer.gif" width="1" height="100%"></td>
<td width="619" align="right" valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="left"><img src="images/spacer.gif" width="100%" height="8"></td>
</tr>
<tr>
<td align="left" background="images/fondo_titular.gif"><table width="50%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="7">&nbsp;</td>
<td class="titularesfondo">SOLICITUD DE AFILIACION
</td>
</tr>
</table></td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="text"><table width="100%" border="0" cellspacing="2" cellpadding="0">
<tr>
<td width="2">&nbsp;</td>
<td align="left" class="text"><FORM action=_vti_bin/shtml.exe/contactar.htm method=post onsubmit=""
webbot-action="--WEBBOT-SELF--">
<table width="100%" border="0" cellspacing="4" cellpadding="0">
<tr>
<TD class="titulares">&nbsp;</TD>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<TD width="50%" class="titulares">Nombre&nbsp;
</TD>
<td colspan="2"><STRONG><FONT face="Book Antiqua">
<INPUT
tabIndex=2 name=Nombre>
</FONT></STRONG></td>
</tr>
<tr>
<TD width="50%" class="titulares">Apellidos&nbsp;&nbsp;&nbsp;</TD>
<td colspan="2"><STRONG><FONT face="Book Antiqua">
<INPUT
tabIndex=2 name=Apellido>
</FONT></STRONG></td>
</tr>
<tr>
</body>
</html>
  #13 (permalink)  
Antiguo 14/04/2005, 03:10
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
¿y qué tiene que ver con este post?... según entiendo solo quieres enviar un formulario a una dirección web... pues quizá (depende de la configuración) te sirva la función mail(). Si buscas encontrarás muchos casos... y quizá sea mejor postear en alguno de ellos si no lo consigues... pero es sencillo.

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 00:49.