Foros del Web » Programando para Internet » PHP »

Consulta Sql

Estas en el tema de Consulta Sql en el foro de PHP en Foros del Web. Hola Comunidad, tengo la siguiente problematica.. tengo un documento php el cual contiene checkbox dinamicos, los cuales pasan por arrays, al siguiente documento. el problema ...
  #1 (permalink)  
Antiguo 09/11/2012, 19:05
Avatar de jano_root  
Fecha de Ingreso: noviembre-2012
Mensajes: 14
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Consulta Sql

Hola Comunidad, tengo la siguiente problematica..

tengo un documento php el cual contiene checkbox dinamicos, los cuales pasan por arrays, al siguiente documento. el problema es que cuando recibo los arrays con un foreach y lo ingreso a la consulta como variable, no me imprime los valores sino que imprime el valor. solo uno y no varios..

la consulta es la siguiente:

"SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%$cosa%')";

La variable cosa contiene los arrays que fueron pasados por el foreach.
por poner un ejemplo pequeño,

ese array contiene funciones:

alto
corto
grande

y cuando ingreso la variable $cosa a la consulta me imprime solo alto

"SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%alto%')";

y yo lo que quiero es que se impriman todas las funciones

"SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%alto corto grande%')";


se podra hacer?


Quizas el problema sea mas facil de lo que creo, pero les pido ayuda
  #2 (permalink)  
Antiguo 09/11/2012, 23:12
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años
Puntos: 38
Respuesta: Consulta Sql

Tu problema es con PHP no con SQL, pon tu codigo para indicarte mejor, pero lo tuyo si mal no entendi va por aki.

Código PHP:

$array 
= array('alto''corto''bajo');

$resultados = array();

foreach ( 
$array as $a)
{
   
$sql mysql_query("SELECT * FROM prod_linea_tela WHERE funciones LIKE ( % '$a' % )";

   if ( 
mysql_num_rows($sql) > )
   {
      while ( 
$row mysql_fetch_assoc($sql) )
      {
         
$resultados[] = $row['campo'];
      }
   }
}

foreach ( 
$resultados as $r)
{
   echo 
$r '<br />';

buena suerte

Última edición por rolygc; 09/11/2012 a las 23:20
  #3 (permalink)  
Antiguo 11/11/2012, 18:18
Avatar de jano_root  
Fecha de Ingreso: noviembre-2012
Mensajes: 14
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Consulta Sql

Gracias rolygc por responder, mira aca te dejo el codigo ;)

Acá recibo los checkbox dinamicos:

Cita:
<?php
echo '<div class="funcion_select">Usted selecciono las siguientes funcionalidades:</div>'.'<br />';

if(isset($_POST['funcion']) && $_POST['funcion'] == "enviar"){

if(!empty($_POST['checkbox'])){
$campo = $_POST['checkbox'];
foreach($campo as $value){


echo '<div class="funcion">'.'- '.$value.'</div>'.'<br />';
}
}
else{ echo"<div class='funcion_error'>No haz seleccionado ninguna función.. <a href='javascript:history.go(-1);'>Volver</a></div>";
}
}
echo '<div class="funcion_select">Los números indicados en cada producto, indican que funcionalidades cumple cada producto.</div>'.'<br />';
?>
---------------------------------------------------------------------------------------------------------------

y aca hago la consulta a la bd para ver coincidencias con los tags:

Cita:
<?php
$busca = "SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%$value%')";
$qr_busca = mysql_query($busca);

while($resultado = mysql_fetch_array($qr_busca)){
?>



<div class="option_product">
<h1><a href="item_tela.php?id_tela_product=<?php echo $resultado['id']; ?>&familia=<?php echo $resultado['familia'] ?>"><?php echo $resultado['cordura']?></a></h1>
</div>

<?php
}

?>

El problema es que cuando selecciono varios checkbox, el array pasa por el foreach y todo bien. me imprime los checkbox que seleccione, ejemplo:


- Protección UV

- Repelente al Agua

- Producto Complementario

- Retardante de Llama




Bueno hasta ahi vamos ok, pero cuando toda esos arrays que se supone estan dentro de $valor lo meto a la consulta sql:

SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%$value%')

Solo me imprime el ultimo checkbox que seleccione y los demas los ignora:

SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%retardante de llama%')

Siendo que lo que necesito es esto:

SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%$retardante de llama,producto complementario,repelente al agua,proteccion uv%')
  #4 (permalink)  
Antiguo 12/11/2012, 10:29
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años
Puntos: 38
Respuesta: Consulta Sql

Lo ke pasa ke $value es un array y en el foreach lo recorres bien por eso te imprime bien en patalla lo ke sellecionaste pero cuando haces la consutal, lo pasas como una variable con un solo valor y es en verdad un aaray por eso te toma solo un valor.

Intenta esto, y te repito tu problema es con PHP con con MySQL

tu primer script
Código PHP:

<?php if ( isset( $_POST['funcion'] ) && $_POST['funcion'] == "enviar" ): ?>
    
    <?php if ( empty( $_POST['checkbox'] ) ): ?>
    
        <div class='funcion_error'>
            No has seleccionado ninguna función.. 
            <a href='javascript:history.go(-1);'>Volver</a>
        </div> 
    
        <?php exit; ?>
        
    <?php endif; ?>
    
    <div class="funcion_select">
        Usted selecciono las siguientes funcionalidades:
    </div>
    
    <br />
        
    <?php $campo $_POST['checkbox']; ?>
        
    <?php foreach($campo as $value): ?>
    
        <div class="funcion"> 
            <?php echo ' - ' $value?>
        </div>
        <br />
    
    <?php endforeach; ?>
    
<?php endif; ?>

<div class="funcion_select">
    Los números indicados en cada producto, indican que funcionalidades cumple cada producto.
</div>

<br />
tu segundo script
Código PHP:
<?php

    $value    
implode(', ' $campo);
    
$busca    "SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%$value%')"
    
$qr_busca mysql_query($busca);

?>

<?php while ( $resultado mysql_fetch_array($qr_busca) ): ?>

     <div class="option_product">
        <h1>
            <a href="item_tela.php?id_tela_product=<?php echo $resultado['id']; ?>&familia=<?php echo $resultado['familia']; ?>">
                <?php echo $resultado['cordura']; ?>
            </a>
        </h1>
    </div> 

<?php endwhile; ?>
buena suerte
  #5 (permalink)  
Antiguo 12/11/2012, 12:24
Avatar de jano_root  
Fecha de Ingreso: noviembre-2012
Mensajes: 14
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Consulta Sql

Me da un Parse Error en esta linea

$value = implode(', ' $campo);

Listo lo solucione faltaba una coma (Y)

Última edición por jano_root; 12/11/2012 a las 12:40
  #6 (permalink)  
Antiguo 12/11/2012, 12:41
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 3 meses
Puntos: 155
Respuesta: Consulta Sql

pues es que le falta una coma

http://mx1.php.net/manual/en/function.implode.php

pero me imagino que el compañero lo pone como peusocodigo ya es mas tu deber captar que quizo decir y depurarlo
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #7 (permalink)  
Antiguo 12/11/2012, 12:49
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años
Puntos: 38
Respuesta: Consulta Sql

se me fue, me falto una comma depsues del ','

kedaria asi

Código PHP:
$value implode(', '$campo); 
  #8 (permalink)  
Antiguo 12/11/2012, 13:05
Avatar de jano_root  
Fecha de Ingreso: noviembre-2012
Mensajes: 14
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Consulta Sql

Solucionado, tengo un problema:

Usted selecciono las siguientes funcionalidades:

- Alta Visibilidad

- Resistente a la decoloración

- Antidesgarro

Los números indicados en cada producto, indican que funcionalidades cumple cada producto.






SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%Alta Visibilidad,Resistente a la decoloración,Antidesgarro%')

Pero no me imprime nada, existe otra forma que analize palabras completas y no solo letras iniciales y finales como es el caso de LIKE?

Última edición por jano_root; 12/11/2012 a las 13:11
  #9 (permalink)  
Antiguo 12/11/2012, 13:20
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años
Puntos: 38
Respuesta: Consulta Sql

envia la estructura de tu tabla, y algunos eemplo de datos ke tengas en ella
  #10 (permalink)  
Antiguo 12/11/2012, 13:33
Avatar de jano_root  
Fecha de Ingreso: noviembre-2012
Mensajes: 14
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Consulta Sql

La tabla " prod_linea_tela " Contiene los siguientes campos

id int(11) auto_increment
familia varchar(255)
cordura varchar(255)
descripcion longtext
ventaja longtext
uso longtext
tags varchar(100)
funciones text
usos text

--------------------------

1
0108
Cordura 1000D
Fabricado con materiales sintéticos como el Poliés...
Alta resistencia y durabilidad, lo que permite su ...
Ideal para la confección de bolsos, mochilas, male...
Linea Engomada
Generico, Impermeabilidad, Resistencia al Roce

--------------------------

Específicamente en el campo " funciones " es donde se guardan las funciones asociadas separadas por coma:

Generico, Impermeabilidad, Resistencia al Roce
  #11 (permalink)  
Antiguo 12/11/2012, 15:12
 
Fecha de Ingreso: abril-2009
Ubicación: en un lugar de la mancha
Mensajes: 236
Antigüedad: 15 años
Puntos: 38
Respuesta: Consulta Sql

Para mi tienes un mal disenno de la tabla, si tienes 3 telas ke son Impermeabilidad, Resistencia al Roce repittiras lo mismo 3 veces y si tienes 3000 lo haras 3 mil veces

mejor seria ke crees columnas por tus funciones y las acticas con un flag igual a 1 o 0 descativada.
unos de los principios de l disenno de base de datos es guardar solamente un dato en la campo

Código:
--------------------------------------------------------------------------------------------------------------------------------------------------------
| id | familia | cordura           | descripcion          | ventaja       | uso            | tags | generico | impermiable | resistencia_roce |  usos  |
--------------------------------------------------------------------------------------------------------------------------------------------------------
| 1  |  0108   | Fabricado con...  |  Alta resistencia... | Ideal para... | linea engomada |      |     1    |      1      |         1        |        |
--------------------------------------------------------------------------------------------------------------------------------------------------------
y cuando kieras buiscar lo haces por los flags igual a 1 y te dara esas funciones.

Por otra parte como los estas hacinedo tendras ke hacer el implode en el mismo orden en ke lo tienes guardado en la base de datos si no te devuelve vacio. o sea ke si estas buscando por

SELECT * FROM prod_linea_tela WHERE funciones LIKE ('%Alta Visibilidad,Resistente a la decoloración,Antidesgarro%')
no puedes tener los espacios en las comas ke tienes en tu tabla, y tendras ke tener una tela con ese mismo orden de funciones para ke devuelva algo

si no

SELECT *
FROM prod_linea_tela
WHERE funciones LIKE '%Alta Visibilidad%'
OR funciones LIKE '%Resistente a la decoloración%'
OR funciones LIKE '%Antidesgarro%'

Etiquetas: sql, variables
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 23:35.