Foros del Web » Programando para Internet » PHP »

duda tonta, pero no me resulta como quiero :(

Estas en el tema de duda tonta, pero no me resulta como quiero :( en el foro de PHP en Foros del Web. miren tengo este codigo, no esta completo por que demas no interesa @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original if ( ! empty ( $_POST [ ...
  #1 (permalink)  
Antiguo 17/08/2010, 18:00
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 4 meses
Puntos: 1
duda tonta, pero no me resulta como quiero :(

miren tengo este codigo, no esta completo por que demas no interesa
Código PHP:
Ver original
  1. if( !empty($_POST['nombre_select']) ) {
  2.         //modificar el join para que consulte los datos bien
  3.  
  4.         $sql="[B]select mo.nombre,ma.nombre, mo.obs_modelo
  5.          from modelos mo, marcas ma
  6.         where mo.mar_id_marca = ma.id_marca and
  7.         mo.mar_id_marca = '$sel'[/B]  ";
  8.   //mo.nombre = '$nombre';
  9. //FILTRO DE ABS POR EL SELECT FUNCIONA
  10. //PERO FALTA EL DEL TEXTO
  11.  
  12.         $query = pg_query($conexion, $sql);/*ejecuta la consulta*/
  13.         if(pg_num_rows($query)==0) echo"Sin registros";}
mas este otro codigo
Código PHP:
Ver original
  1. if(   !empty($_POST['pass'])) {
  2.         //modificar el join para que consulte los datos bien
  3.  
  4.         $sql="[B]select mo.nombre,ma.nombre, mo.obs_modelo
  5.          from modelos mo, marcas ma
  6.         where mo.mar_id_marca = ma.id_marca and
  7.         mo.nombre = '$nombre';  [/B]";
  8.   //mo.nombre = '$nombre';
  9. //FILTRO DE ABS POR EL SELECT FUNCIONA
  10. //PERO FALTA EL DEL TEXTO
  11.  
  12.         $query = pg_query($conexion, $sql);/*ejecuta la consulta*/
  13.         if(pg_num_rows($query)==0) echo"Sin registros";

bueno la idea es que cuando capturo las variables pass y nombre select me filtre por una de las 2 por separado o ambas juntas, con los if separados me hace el filtro que yo quiero hacer pero si dejo el codigo asi "y segun yo deberia ser para no tener tantas lineas":
Código PHP:
Ver original
  1. if( !empty($_POST['nombre_select']) or  !empty($_POST['pass'])) {
  2.         //modificar el join para que consulte los datos bien
  3.  
  4.         $sql="select mo.nombre,ma.nombre, mo.obs_modelo
  5.          from modelos mo, marcas ma
  6.         where mo.mar_id_marca = ma.id_marca and
  7.         mo.nombre = '$nombre' OR  mo.mar_id_marca = '$sel';
si dejo asi no me funciona bien el filtro en este caso filtraria bien por el nombre pero no por el sel..............
no se si lleva algun parentesis en el where o no se help F1 porfa xd
  #2 (permalink)  
Antiguo 17/08/2010, 18:27
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: duda tonta, pero no me resulta como quiero :(

Lo que veo es que puede faltar una coma entre marcas y ma

$sql="select mo.nombre,ma.nombre, mo.obs_modelo
from modelos mo, marcas ACA ma
where mo.mar_id_marca = ma.id_marca and
mo.nombre = '$nombre' OR mo.mar_id_marca = '$sel';
__________________
la la la
  #3 (permalink)  
Antiguo 17/08/2010, 19:06
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: duda tonta, pero no me resulta como quiero :(

mm no eso esta bien si es el where que esta pifiado cuando en el if traigo los 2 empty
y hago el join con el where

where mo.mar_id_marca = ma.id_marca and
mo.nombre = '$nombre' OR mo.mar_id_marca = '$sel'
  #4 (permalink)  
Antiguo 17/08/2010, 19:24
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: duda tonta, pero no me resulta como quiero :(

Cita:
Iniciado por diegonazho Ver Mensaje
mm no eso esta bien si es el where que esta pifiado cuando en el if traigo los 2 empty
y hago el join con el where

where mo.mar_id_marca = ma.id_marca and
mo.nombre = '$nombre' OR mo.mar_id_marca = '$sel'
eso no esta bien ya q te falta una coma al momento de separar los nombres de las tablas q colocas como te lo indico truman_truman colocale la coma entre las tabla y ve si te da error,

edito
otra cosa depura la con pg_error() ej:
Código PHP:
 $query pg_query($conexion$sql) or die (pg_error());/*ejecuta la consulta*/ 
y ve q te dic suete
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #5 (permalink)  
Antiguo 17/08/2010, 19:38
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 4 meses
Puntos: 1
De acuerdo Respuesta: duda tonta, pero no me resulta como quiero :(

pero yo estoy ocupando alias a las tablas (modelos y marcas) y no va ","

probe el pg_error() y no me arrojo error

a todo esto gracias por su tiempo en ayudarme (Y)
  #6 (permalink)  
Antiguo 17/08/2010, 19:42
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: duda tonta, pero no me resulta como quiero :(

Cita:
Iniciado por diegonazho Ver Mensaje
if( !empty($_POST['pass'])) {
//modificar el join para que consulte los datos bien

$sql="select mo.nombre,ma.nombre, mo.obs_modelo
from modelos mo, marcas ma
where mo.mar_id_marca = ma.id_marca and
mo.nombre = '$nombre';
";
//mo.nombre = '$nombre';
//FILTRO DE ABS POR EL SELECT FUNCIONA
//PERO FALTA EL DEL TEXTO

$query = pg_query($conexion, $sql);/*ejecuta la consulta*/
if(pg_num_rows($query)==0) echo"Sin registros";
una preguta ese [B] en la consulta no te trae problemas??
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 17/08/2010, 19:46
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: duda tonta, pero no me resulta como quiero :(

Cita:
Iniciado por carlos_belisario Ver Mensaje
una preguta ese [B] en la consulta no te trae problemas??
no si ese [B] era pa dejar el codigo en negrita por eso aparece
  #8 (permalink)  
Antiguo 17/08/2010, 19:49
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: duda tonta, pero no me resulta como quiero :(

exacto te lo coloca en negrita pero una consulta?? para q un codigo q no se va a ver en ?? depura tambien esa consulta y ve si no te muestra ningun error
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #9 (permalink)  
Antiguo 17/08/2010, 20:00
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: duda tonta, pero no me resulta como quiero :(

mira quiero que mi if quede asi

Código PHP:
Ver original
  1. if( !empty($_POST['nombre_select']) or  !empty($_POST['pass']))
  2.  
  3. $sql="select mo.nombre,ma.nombre, mo.obs_modelo
  4.          from modelos mo, marcas ma
  5.         where mo.mar_id_marca = ma.id_marca and
  6.         mo.mar_id_marca = '$sel' or mo.nombre = '$nombre' ";


para poder hacer la consulta O por $nombre O por $sel, pero no me resulta, ya que puedo filtrar por uno de estas 2 variables pero ejemplo

filtro por $nombre se ejecuta bien --> despues limpio los datos y ejecuto por $sel yme arroja error, y supongo que el codigo esta bien para que filtre por los 2 ... ahora mi solucion a este caso fue hacer 2 if : uno con !empty($_POST['nombre_select' y el otro con !empty($_POST['pass']) pero esa no es la idea para ocupar mucho codigo, ademas con los 2 if NO puedo hacer la consulta por estos 2 filtros a la vez
  #10 (permalink)  
Antiguo 17/08/2010, 20:02
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: duda tonta, pero no me resulta como quiero :(

Hola,

Posiblemente, el problema es de lógica, cuando la variable $nombre esté vacía va a hacer un match de todos los que 'no tengan nombre' y cualquier marca; la misma situación con la marca. Por lo tanto en ninguno de los dos casos va a funcionar.

En este caso hay cuatro posibilidades, que no tengas ni nombre ni marca, que tengas nombre pero sin marca, que no tengas nombre pero si marca, y el último que tengas nombre y marca.

Hay quienes lo resuleven con cuatro instrucciones SQL diferentes. Otros formando la instrucción SQL por partes. Por ejemplo, van creando la instrucción SQL dependiendo de los valores que te mandan:

Código PHP:
Ver original
  1. if (!empty($nombre)) {
  2.   SQL .= "nombre = $nombre and "
  3. }

http://www.forosdelweb.com/f18/consu...terios-732453/

Saludos,

ps:

La verdadera solución, a ver quien la agarra:
(('$nombre' = '' or mo.nombre = '$nombre') and ('$sel' = '' or mo.mar_id_marca = '$sel'));
(Evidentemente el otro post nadie la entendió)
  #11 (permalink)  
Antiguo 17/08/2010, 20:07
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: duda tonta, pero no me resulta como quiero :(

bueno creo q te falta el parentesis para agrupar la condicion ej:
Código PHP:
if( !empty($_POST['nombre_select']) or  !empty($_POST['pass']))
 
$sql="select mo.nombre,ma.nombre, mo.obs_modelo
         from modelos mo, marcas ma 
        where mo.mar_id_marca = ma.id_marca and
        (mo.mar_id_marca = '$sel' or mo.nombre = '$nombre' )"

asi agrupas la condicion del or espero te sirva
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #12 (permalink)  
Antiguo 17/08/2010, 20:08
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: duda tonta, pero no me resulta como quiero :(

HackmanC habia pensado en hacer las soluciones posibles........
no me queda otra que poner los dedos a la obra, comentare mas adelante como me resulta
  #13 (permalink)  
Antiguo 17/08/2010, 20:09
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: duda tonta, pero no me resulta como quiero :(

Cita:
Iniciado por carlos_belisario Ver Mensaje
bueno creo q te falta el parentesis para agrupar la condicion ej:
Código PHP:
if( !empty($_POST['nombre_select']) or  !empty($_POST['pass']))
 
$sql="select mo.nombre,ma.nombre, mo.obs_modelo
         from modelos mo, marcas ma 
        where mo.mar_id_marca = ma.id_marca and
        (mo.mar_id_marca = '$sel' or mo.nombre = '$nombre' )"

asi agrupas la condicion del or espero te sirva
tambien puse parentesis y aun asi me filtra por uno solo y por el otro da error, tendre que hacer las soluciones posibles por separado no mas gracias
  #14 (permalink)  
Antiguo 17/08/2010, 20:15
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: duda tonta, pero no me resulta como quiero :(

ahora si q me qdo loco porq ahi te deberia de filtrar por ambos ya q hic una prueba con una bd q tengo y me lo hizo ahora si q lo e visto todo jaja suerte
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #15 (permalink)  
Antiguo 17/08/2010, 20:25
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: duda tonta, pero no me resulta como quiero :(

Hola,

Cita:
Iniciado por carlos_belisario Ver Mensaje
ahora si q me qdo loco porq ahi te deberia de filtrar por ambos ya q hic una prueba con una bd q tengo y me lo hizo ahora si q lo e visto todo jaja suerte
Por ambos sí, el quiere uno u el otro o los dos. Dependiendo si le enviaron o no los valores. Es decir, algunas veces quiere por nombre, otras por marca y otras por nombre y marca.

Saludos,

ps:

Evidentemente en este caso tampoco se entendió la instrucción SQL que mostré.
¿Será tan complicada de entender?
(('$nombre' = '' or mo.nombre = '$nombre') and ('$sel' = '' or mo.mar_id_marca = '$sel'));
  #16 (permalink)  
Antiguo 17/08/2010, 20:38
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 3 meses
Puntos: 260
Sonrisa Respuesta: duda tonta, pero no me resulta como quiero :(

Hola,

Talves así está mas claro ...
Pseudo-codigo:

Código PHP:
Ver original
  1. $nombre = isset($_POST['nombre']) ? $_POST['nombre'] : '';
  2.     $marca = isset($_POST['marca']) ? $_POST['marca'] : '';
  3.    
  4.         $sql="select mo.nombre,ma.nombre, mo.obs_modelo
  5.         from modelos mo, marcas ma
  6.        where mo.mar_id_marca = ma.id_marca and
  7.        (('$nombre' = '' or mo.nombre = '$nombre') and
  8.         ('$marca' = '' or mo.mar_id_marca = '$sel'))";

Saludos,
  #17 (permalink)  
Antiguo 17/08/2010, 20:41
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: duda tonta, pero no me resulta como quiero :(

interesante no lo pense de esa manera q bien saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way

Etiquetas: Ninguno
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 10:59.