Foros del Web » Programando para Internet » PHP »

recojida de respuestas de una funcion con un while

Estas en el tema de recojida de respuestas de una funcion con un while en el foro de PHP en Foros del Web. hola a todos, Tengo este código; Código PHP: if (($fam == 3) or ($fam == 4)){                          $niv = select($fila['padre']); ?>     <ul>       <li><a href="productos.php">Productos y Servicios</a></li>                           <?php  while ( $i  <=  $niv [ 'nivel' ]) {                                           ...
  #1 (permalink)  
Antiguo 30/09/2009, 09:20
Avatar de Phoenix23  
Fecha de Ingreso: agosto-2007
Ubicación: 43.286211, -2.171349
Mensajes: 253
Antigüedad: 16 años, 7 meses
Puntos: 1
recojida de respuestas de una funcion con un while

hola a todos,

Tengo este código;
Código PHP:
if (($fam == 3) or ($fam == 4)){
                
        $niv = select($fila['padre']); ?>

    <ul>
      <li><a href="productos.php">Productos y Servicios</a></li>
                  
      <?php while ($i <= $niv['nivel']) {
                    
                    
          
$fila $i select($fila $i['padre']);  ?>
                    
         <li><a href="productos.php?fam=<?php echo $fila.$i['padre']; ?>&familia=<?php echo $fila.$i['familia']; ?>"><?php echo ucfirst($fila.$i['familia']);?></a></li>
                     
          <?php 
                   
          $i
++;
                     
             } 
?>
y esta funcion:

Código PHP:
function select($padre) {
    
    
$sql "SELECT * FROM familia WHERE Idfamilia=".$padre;
    
$res mysql_query($sql) or die (mysql_error());
    return 
mysql_fetch_array($res);


Lo que quiero es mientras $i sea menor o igual a $niv['nivel'] me muestre el li. No se si estoy concatenando bien los $i con fila. No me funcion y no encuentro la solucion. sabeis como hacerlo de alguna otra manera o enque falla?

Gracias de antemano y saludos
__________________
"La vida se mide por las veces que te levantas, no por las veces que te caes"

visita zarautz!!!
  #2 (permalink)  
Antiguo 30/09/2009, 12:52
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: recojida de respuestas de una funcion con un while

$fila . $i = funcion(algo); - Es incorrecto, supongo que concatenara $fila con el resultado (true o false) de asignar el valor de la funcion a $i

Sin ver todo tu codigo es dificil saber, pero creo que $i solo lo necesitas para realizar la consulta y no para concatenar:

Código php:
Ver original
  1. $fila = select($i);
  2. echo "<li><a href=\"productos.php?fam={$fila['padre']}&familia={$fila['familia']}\">" . ucfirst($fila['familia']) . "</a></li>";
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 01/10/2009, 01:43
Avatar de Phoenix23  
Fecha de Ingreso: agosto-2007
Ubicación: 43.286211, -2.171349
Mensajes: 253
Antigüedad: 16 años, 7 meses
Puntos: 1
Hola,

Gracias por la respuesta, pero no me soluciona. esto es lo que quiero hacer:

Código PHP:
if ($fam == 5) {
            
                $fila2 = select($fila['padre']);
                $fila3 = select($fila2['padre']); 
                $fila4 = select($fila3['padre']); 
                
            ?>
                
                <ul>
                  <li><a href="productos.php">Productos y Servicios</a></li>
                  <li class="segundo"><a href="productos.php?fam=<?php echo $fila4['padre']; ?>&familia=<?php echo $fila4['familia']; ?>"><?php echo ucfirst($fila4['familia']); ?></a></li>
                  <li class="tercero"><a href="productos.php?fam=<?php echo $fila3['padre']; ?>&familia=<?php echo $fila3['familia']; ?>"><?php echo ucfirst($fila3['familia']); ?></a></li>
                  <li class="tercero"><a href="productos.php?fam=<?php echo $fila2['padre']; ?>&familia=<?php echo $fila2['familia']; ?>"><?php echo ucfirst($fila2['familia']); ?></a></li>
                  <li class="ultimo"><a href="#" class="ultimo"><?php echo ucfirst($familia); ?></a></li>
                </ul>
                
        <?php }
De esta forma me saca los resultados que yo quiero y mi intencion es hacer esto

Código PHP:
$fila2 select($fila['padre']);
$fila3 select($fila2['padre']); 
$fila4 select($fila3['padre']); 
automático. Por eso le hacia $fila.$i = select($fila.$i['padre']);. No se como conseguir lo que consigo a mano un poco autamatizado porque sino tengo que estar calculando cuantas veces tengo que llamr a la funcion en cada caso.

Muchas gracias de antemano y saludos

Al final ya esta solucionado. Lo he hecho asi:

Código PHP:
$niv = select($fila['padre']); 
$nivel = $niv['nivel'];
        
?>

     <ul>
    <li><a href="productos.php">Productos y Servicios</a></li>
              
      <?php for ($i=0$i <= $nivel$i++) {                    
                            
        
$fila select($fila['padre']); ?>
        <li class="<?php echo $clase?>"><a href="productos.php?fam=<?php echo $fila['padre']; ?>&familia=<?php $fila['familia']; ?>"><?php echo ucfirst($fila['familia']); ?></a></li> 
                 
        <?php ?> 
            
       <li class="ultimo"><a class="ultimo" href="#"><?php echo ucfirst($familia?></a></li>
            
</ul>
y funciona bien. Ahora tengo un problema que me sac los valores a mostrar al reves. Por ejemplo si quiero que me saque:

madera --> aglomerado --> blanco

me saca:

blanco --> aglomerado --> madera

He cambiado el for y puesto asi:

for ($i=$nivel; $i >=0 ; $i--)

que a mi me parece debia de funcionar pero no funciona y no se porque.

Gracias de antemano y saludos
__________________
"La vida se mide por las veces que te levantas, no por las veces que te caes"

visita zarautz!!!

Última edición por GatorV; 01/10/2009 a las 09:37
  #4 (permalink)  
Antiguo 01/10/2009, 16:40
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: recojida de respuestas de una funcion con un while

Carga todos los datos de una sola vez asegurandote de obtenerlos en orden inverso con ORDER BY campo DESC

Código php:
Ver original
  1. function select($padre) {
  2.     $familias = array();
  3.     $sql = "SELECT * FROM familia WHERE Idfamilia=$padre ORDER BY Idfamilia DESC";
  4.     $res = mysql_query($sql) or die (mysql_error());
  5.     while($row = mysql_fetch_assoc($res))
  6.         $familias[] = $row;
  7.     return $familias;
  8. }

En vez de tu actual while, solo recorres los resultados:
Código php:
Ver original
  1. $familias = select($fila['padre']);
  2. foreach($familias as $fam) {
  3.       echo "<li><a href=\"productos.php?fam={$fila['padre']}&familia={$fam['familia']}\">" . ucfirst($fam['familia']) . "</a></li>";
  4. }
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 05/10/2009, 04:43
Avatar de Phoenix23  
Fecha de Ingreso: agosto-2007
Ubicación: 43.286211, -2.171349
Mensajes: 253
Antigüedad: 16 años, 7 meses
Puntos: 1
Gracias por responder triby y perdona mi tardanza en responder pero no he podido hacerlo antes.

La función esa que me has pasado solo coje una por cada vez que se le llamay no me ordena ni nada, no se como podria ser para que cojiese todos a la vez.

Gracias de antemano y saludos

Hola a todos,

Nadie sabe como hacer la funcion de triby para que coja todos los registros a la vez en vez de solo una?

Ya sienton ser tan pesado, pero he probado de todas las maneras y no consigo que funcione. Gracias a todos por vuestro interes

Saludos
__________________
"La vida se mide por las veces que te levantas, no por las veces que te caes"

visita zarautz!!!

Última edición por GatorV; 05/10/2009 a las 21:42
  #6 (permalink)  
Antiguo 06/10/2009, 12:58
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: recojida de respuestas de una funcion con un while

Solamente cambia la parte del WHERE, filtrando los resultados que deseas, ejemplos:

Código:
WHERE Idfamilia > 1 AND Idfamilia < 4
WHERE campox = $valorx
__________________
- León, Guanajuato
- GV-Foto
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 11:11.