Comunidad de diseño web y desarrollo en internet online

problema para comparar y mostrar resultado mysql con php

Citar            
MensajeEscrito el 07 May 2011 11:35 pm
buen dia chicos, necesito una ayuda, tengo el siguiente problema; realizo una consulta a una tabla de mi bd para solicitar 2 resultados, uno es un campo llamado "insc" en el cual se almacenan los id de las imagenes de mi tabla de imagenes formando un array, el otro campo se llama "cant" almacena las cantidades de cada imagen, al = que insc, cant almacena dichas cantidades como si se tratase de un array; ahora, tengo 2 archivos uno se encarga de mostrar al usuario la seleccion de imagenes, mientras que el otro es para la parte administrativa del sitio web y es exactamente = al formulario de seleccion de imagenes que almacena el la base de datos la informacion de insc y cant, con la diferencia de que este formulario es para editar los datos y porsupuesto la seleccion de imagenes y sus respectivas cantidades, el problema es que aunque ya todos los datos del formulario logre hacer que aparescan llenos o marcados, la parte de las imagenes que deberia mostrarse marcadas y con su respectiva cantidad en el campo de texto, aparecen normales como si se tratase del resto de las imagenes disponibles para seleccionar. lo que no logro entender es porque si trato de hacer la comparacion del id de la imagen con el array de la seleccion almacenada de forma dinamica ($insc[$i] == $idInsc) me ocurre lo que comente, pero si en cambio le indico exactamente la posicion del array ($insc[2] == $idInsc) si me realiza comparacion y me muestra la imagen marcada como seleccionada y el campo de texto con la cantidad corespondiente de imagen... por fa disculpen el testamento pero ya no se que hacer, podrian ayudarme?

Código PHP :


$link = $_GET['cid'];
$idProc = $_GET['idProc'];
$sql = "SELECT * FROM insc_proceso WHERE cid='$link' AND idProc='$idProc'"; 
$q = mysqli_query($conexion, $sql); 
while ($r = mysqli_fetch_array($q)) { 
   $cant = $r['cant']; //almacena las cantidades
   $insc = $r['insc']; //almacena los id de las imagenes
   $insc = explode(',',$insc);
   $cant = explode(',',$cant);
} 
   $sq = "SELECT * FROM insc";  
   $qu = mysqli_query($conexion,$sq);
     $element = '';
?>
__________________________________
aqui hay  html y jquery que se encarga de marcar la imagen seleccionada
___________________________________

//este es el codigo donde armo el resultado para el listado de imagenes disponibles y seleccionadas.
<?php
  $i = -1;
  while($row = mysqli_fetch_assoc($qu)){
     $idInsc = $row['idImg'];
     $img = $row['url'];
     $i++;
    if($insc[$i] == $idInsc){
    $ch = 'checked="checked"';
    $inpuCant = '<input type="text" name="cant[]" class="cant"  onblur="if(this.value==\'\') this.value=\''.$cant[$i].'\';" onfocus="if(this.value==\''.$cant[$i].'\') this.value=\'\';" value="'.$cant[$i].'"  disabled="disabled"/>';
     }else{
     $ch = '';
     $inpuCant = '<input type="text" name="cant[]" class="cant"  onblur="if(this.value==\'\') this.value=\'Cantidad\';" onfocus="if(this.value==\'Cantidad\') this.value=\'\';" value="Cantidad"  disabled="disabled"/>';
     }
     $element .= '<li><img src="../images/img_proc/'.$img.'" />
     <input type="checkbox" name="insc[]" value="'.$idInsc.'" '.$ch.'/>
     <a class="checkbox-select" href="#"></a>'.$inpuCant.'
     <a class="checkbox-deselect" href="#">Remover</a></li>
     ';
  }
?>



aqui es donde muestro el listado de imagenes disponibles y las que tienen el id coincidente con los id del array aparecen (o deberian) con un fondo de color distinto y mostrando su cantidad respectiva.

Código HTML :

<tr><td height="44" colspan="6" style="padding:0px 0px 10px 0px;"><fieldset><legend>Selecciona los Requisitos a Consignar para el Proceso
</legend>
   <ul class="checklist"><?php echo $element;?></ul></fieldset>
    </td>


por fa una ayudita que ya no se que hacer!!! :'(

Por jakiras

Claber

148 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 09 May 2011 09:32 pm
:'( por fa !! aun no he logrado solucionarlo por mas pruebas q hago, por fa ayudenme!!! :'(

Por jakiras

Claber

148 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 10 May 2011 10:52 pm
mm bueno la solucion creo que seria esta

Código PHP :

<?php
 
$link = $_GET['cid']; 
$idProc = $_GET['idProc']; 
$sql = "SELECT * FROM insc_proceso WHERE cid='$link' AND idProc='$idProc'";  
$q = mysqli_query($conexion, $sql);
//si solo se recogera un resultado no necesitas de while para eso
$r = mysqli_fetch_array($q);
   $cant = $r['cant']; //almacena las cantidades 
   $insc = $r['insc']; //almacena los id de las imagenes 
   $insc = explode(',',$insc); 
   $cant = explode(',',$cant); 
   
   $sq = "SELECT * FROM insc";   
   $qu = mysqli_query($conexion,$sq); 
     $element = ''; 
?> 
__________________________________ 
aqui hay  html y jquery que se encarga de marcar la imagen seleccionada 
___________________________________ 
 
//este es el codigo donde armo el resultado para el listado de imagenes disponibles y seleccionadas. 
<?php
//el $i seria innecesario desde el punto de vista del proceso que quieres realizar
//$i = -1; 
  while($row = mysqli_fetch_assoc($qu)){ 
     $idInsc = $row['idImg']; 
     $img = $row['url']; 

//     $i++; 
//tu error esta en los keys que intentas comparar donde esta tu error
//    if($insc[$i] == $idInsc)
   if(in_array( $idInsc, $insc))
   { 
    $ch = 'checked="checked"'; 
    $inpuCant = '<input type="text" name="cant[]" class="cant"  onblur="if(this.value==\'\') this.value=\''.$cant[$i].'\';" onfocus="if(this.value==\''.$cant[$i].'\') this.value=\'\';" value="'.$cant[$i].'"  disabled="disabled"/>'; 
     }else{ 
     $ch = ''; 
     $inpuCant = '<input type="text" name="cant[]" class="cant"  onblur="if(this.value==\'\') this.value=\'Cantidad\';" onfocus="if(this.value==\'Cantidad\') this.value=\'\';" value="Cantidad"  disabled="disabled"/>'; 
     } 
     $element .= '<li><img src="../images/img_proc/'.$img.'" /> 
     <input type="checkbox" name="insc[]" value="'.$idInsc.'" '.$ch.'/> 
     <a class="checkbox-select" href="#"></a>'.$inpuCant.' 
     <a class="checkbox-deselect" href="#">Remover</a></li> 
     '; 
  } 
?>

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 May 2011 10:57 pm
ahora tu problema creo que era la forma en que usabas explode
por ejemplo

Código PHP :

//tenemos estos ids en un string
$string_de_ids = '3,6,7,11';
//al hacer un explode lo que nos devuelve
$array_de_ids = explode(',',$string_de_ids);
//el resultado seria
$array_de_ids = array(
0 => '3',
1 => '6',
2 => '7',
3 => '11'
);

y al hacer eso con el incrementador $i nunca te pillaba los resultados exactos y si lo hacia era por coincidencia

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 May 2011 12:01 am
Admin!!!!!.... :) gracias por tu grandisima ayuda, te cuento que ya se me seleccionan las imagenes, pero ahora el problema es con las cantidades, solia emplear el contador $i para recorrer tanto el array $insc como $cant; pero ahora de la forma en que lo planteas como haria para indicarle q la cantidad que le corresponde de cada seleccion?? O.o

Por jakiras

Claber

148 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 11 May 2011 04:06 pm
pues combinalas con array_combine

http://es.php.net/manual/en/function.array-combine.php
bueno te recomiendo que heches un vistaso a las funciones de php hay un monton y muy utiles es mejor practicar con cada una, a y tambien leete los comentarios del script que te dejo

Código PHP :

<?php 
  
$link = $_GET['cid'];  
$idProc = $_GET['idProc'];  
$sql = "SELECT * FROM insc_proceso WHERE cid='$link' AND idProc='$idProc'";   
$q = mysqli_query($conexion, $sql); 
//si solo se recogera un resultado no necesitas de while para eso 
$r = mysqli_fetch_array($q); 
   $cant = $r['cant']; //almacena las cantidades  
   $insc = $r['insc']; //almacena los id de las imagenes
   
//matamos 2 pajaros de un tiro   
   $insc = explode(',',$insc);  
   $cant = explode(',',$cant);
//la key del nuevo array sera el id y su valor sera su cantidad
   $ids_y_cantidades = array_combine($insc,$cant);
   
   $sq = "SELECT * FROM insc";    
   $qu = mysqli_query($conexion,$sq);  
     $element = '';  
?>
  
__________________________________  
aqui hay  html y jquery que se encarga de marcar la imagen seleccionada  
___________________________________  
  
//este es el codigo donde armo el resultado para el listado de imagenes disponibles y seleccionadas.  
<?php 
//el $i seria innecesario desde el punto de vista del proceso que quieres realizar 
//$i = -1;  
  while($row = mysqli_fetch_assoc($qu)){  
     $idInsc = $row['idImg'];  
     $img = $row['url'];  
 
//     $i++;  
//tu error esta en los keys que intentas comparar donde esta tu error 
//    if($insc[$i] == $idInsc) 
//   if(in_array( $idInsc, $insc))
//vemos si la key existe y si existe hace lo que hace
   if(isset($ids_y_cantidades[$idInsc]))
   {  
    $ch = 'checked="checked"';  
    $inpuCant = '<input type="text" name="cant[]" class="cant"  onblur="if(this.value==\'\') this.value=\''.$ids_y_cantidades[$idInsc].'\';" onfocus="if(this.value==\''.$ids_y_cantidades[$idInsc].'\') this.value=\'\';" value="'.$ids_y_cantidades[$idInsc].'"  disabled="disabled"/>';  
     }else{  
     $ch = '';  
     $inpuCant = '<input type="text" name="cant[]" class="cant"  onblur="if(this.value==\'\') this.value=\'Cantidad\';" onfocus="if(this.value==\'Cantidad\') this.value=\'\';" value="Cantidad"  disabled="disabled"/>';  
     }  
     $element .= '<li><img src="../images/img_proc/'.$img.'" />  
     <input type="checkbox" name="insc[]" value="'.$idInsc.'" '.$ch.'/>  
     <a class="checkbox-select" href="#"></a>'.$inpuCant.'  
     <a class="checkbox-deselect" href="#">Remover</a></li>  
     ';  
  }  
?>

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 18 May 2011 04:03 pm
admin de verdad mil gracias por tu ayuda, no habia tenido chance de pasar y agradecerte... hace dias habia leido sobre array_combine y pense que me podria esrvir, pero no entendi mucho a q se refierian con keys y values... O.o es q la neta no soy programadora sino diseñadora XD, apenas estoy aprendiendo php jeje...
tu solucion me anda de maravilla y me llamo la atención que habias empleado array_combine jeje.. oye pero ahora tengo un problema mas loco todavia; me toco agregar una tercera columna en la que se almacenan las descripciones de cada imagen osea ahora tendria que mostrar los array $insc, $cant y $desc... O.o como podria hacerlo?? es que segun lo que leí de array_combine es solo para 2 array y ya yo tngo 3:'(
re-copio tu codigo para agregar lo q tngo ahora... :'(

Código PHP :

<?php  
   
$link = $_GET['cid'];   
$idProc = $_GET['idProc'];   
$sql = "SELECT * FROM insc_proceso WHERE cid='$link' AND idProc='$idProc'";    
$q = mysqli_query($conexion, $sql);  
//si solo se recogera un resultado no necesitas de while para eso  
$r = mysqli_fetch_array($q);  
   $cant = $r['cant']; //almacena las cantidades   
   $insc = $r['insc']; //almacena los id de las imagenes 
   $desc = $r['desc']; //almacena la descripcion asignada a cada imagen
//matamos 2 pajaros de un tiro    
   $insc = explode(',',$insc);   
   $cant = explode(',',$cant); 
   $desc = explode(',',$desc);   //este es el nuevo array
//la key del nuevo array sera el id y su valor sera su cantidad 
   $ids_y_cantidades = array_combine($insc,$cant); 
    
   $sq = "SELECT * FROM insc";     
   $qu = mysqli_query($conexion,$sq);   
     $element = '';   
?>
 
   
__________________________________   
aqui hay  html y jquery que se encarga de marcar la imagen seleccionada   
___________________________________   
   
//este es el codigo donde armo el resultado para el listado de imagenes disponibles y seleccionadas.   
<?php  
//el $i seria innecesario desde el punto de vista del proceso que quieres realizar  
//$i = -1;   
  while($row = mysqli_fetch_assoc($qu)){   
     $idInsc = $row['idImg'];
     $description = $row['titulo'];//descripcion por defecto de cada imagen, el usuario decide si dejarla, kitarla, agregar una nueva... etc..
     $img = $row['url'];   
  
//     $i++;   
//tu error esta en los keys que intentas comparar donde esta tu error  
//    if($insc[$i] == $idInsc)  
//   if(in_array( $idInsc, $insc)) 
//vemos si la key existe y si existe hace lo que hace 
   if(isset($ids_y_cantidades[$idInsc])) 
   {   
    $ch = 'checked="checked"';   
    $inpuCant = '<input type="text" name="cant[]" class="cant"  onblur="if(this.value==\'\') this.value=\''.$ids_y_cantidades[$idInsc].'\';" onfocus="if(this.value==\''.$ids_y_cantidades[$idInsc].'\') this.value=\'\';" value="'.$ids_y_cantidades[$idInsc].'"  disabled="disabled"/><br><input type="text" name="desc[]" class="desc" value="'.$desc[].'"  disabled="disabled"/>';   
     }else{   
     $ch = '';   
     $inpuCant = '<input type="text" name="cant[]" class="cant"  onblur="if(this.value==\'\') this.value=\'Cantidad\';" onfocus="if(this.value==\'Cantidad\') this.value=\'\';" value="Cantidad"  disabled="disabled"/><br><input type="text" name="desc[]" class="desc" value="'.$description.'"  disabled="disabled"/>';  
     }   
     $element .= '<li><img src="../images/img_proc/'.$img.'" />   
     <input type="checkbox" name="insc[]" value="'.$idInsc.'" '.$ch.'/>   
     <a class="checkbox-select" href="#"></a>'.$inpuCant.'   
     <a class="checkbox-deselect" href="#">Remover</a></li>   
     ';   
  }   
?>

Por jakiras

Claber

148 de clabLevel



Genero:Femenino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.