Avatar Image
Usuario habitual
Usuario habitual

Hola,

alguien por favor podria ayudarme a entender la funcion foreach.

Para que se usa y como funciona. Llorando

Muchas gracias.
Angelito

Avatar Image
Usuario habitual
Usuario habitual

Bueno, foreach no es una función, es una sentencia de control de flujo. Giño Se usa para recorrer tablas y ejecutar instrucciones sobre cada elemento. Por ejemplo,

<?php

$tabla = array (1, 4, 7 , 2);

foreach ($tabla as $numero)
{
echo "<p>$numero</p>";
}

?>

Cuando el programa llega al foreach, examina el array $tabla y le asigna el valor de su primer elemento (1) a la variable $numero. Entonces ejecuta la sentencia "echo", lo que produciría <p>1</p>

A continuación, le asigna a $numero el valor del segundo elemento (4) y vuelve a repetir las instrucciones. En este caso sacaría <p>4</p>

El proceso se repite para cada elemento del array. Al final el programa sacaría

<p>1</p><p>4</p><p>7</p><p>2</p>

Espero haberme explicado. Saludos.

Avatar Image
Usuario habitual
Usuario habitual

Sip, de hecho, te explicas bien, solo que no se si lo he entendido bien. RollEyes

Bueno, por ejemplo, si en vez de estos numeros que usaste como ejemkplo, quiero poner datos sacados de una consulta, es decir, hago una consulta a ver cuales campos cumplen una condicion los que asi sean los preparo primero en un array y luego en el foreach?

Porque mi gran problema es que dinamicamente creo checkbox y luego doy la opcion de borrar los que seleccione el usuario.

Es en un sistema de privados, muy parecido a hotmail. Un usuario por ejemplo tiene 10 mensajes, luego quiere borrar 6, los marca y los envia en un form a otra pagina para que los borre.

El foreach me podria ayudar en esto, es que no puedo lograr quelos borre, no se como hacerlo. Si sabes algo al respecto me gustaria alguna ayuda por favor.

Muchas gracias Caid.

Un saludo.

Avatar Image
Usuario habitual
Usuario habitual

No, a ver. foreach se usa sólo sobre arrays, y las funciones de base de datos trabajan con "recursos". Por tanto, se usan bucles "while" para recorrerlos.

Por ejemplo, si ejecutas esta sentencia SQL

$datos= mysql_query("SELECT id, asunto FROM mensajes where id < 10");

en $datos queda almacenado un "recurso" que contiene todos los datos que le has pedido a la base de datos.

Para acceder a ellos tienes que usar mysql_fetch_array(), o alguna función similar. Esas funciones lo que hacen es extraer los datos de una línea, y almacenarlos en un array. Por ejemplo...

while ($fila = mysql_fetch_array($datos)) {
echo $fila['id']."---->".$fila['asunto']
}

La primera vez que el programa llega a while, mysql_fetch_array() saca la primera fila de datos y la almacena en el array $fila. Por tanto, $fila['asunto'] contiene el asunto del primer mensaje.

En la siguiente iteración, mysql_fetch_array() saca la segunda fila de datos, y en $fila['asunto'] tienes el asunto del segundo mensaje. Así sucesivamente, hasta que el recurso $datos se queda vacío, mysql_fetch_array devuelve falso, y el bucle se acaba.

Saludos.

Avatar Image
Usuario habitual
Usuario habitual

Gracias Caid.

Entiendo perfectamente eso que me explicas, al mostrar los datos sacados de una consulta, pues esto lo hago bien, me funciona bien, el problema que tengo es al recoger los mensajes seleccionados.

Es decir, yo puedo presentar bien estos datos al usuario, pero no puedo conseguir que este interactue con ellos, que los borre, que los cambie de carpeta, es decir hacer un UPDATE a algunos que el usuario seleccione en checkboxes, porque puedo ponerle la una opcion al lado de cada mensaje de borrar o cambiar de carpeta, pero eso sería hacerlo uno por uno, yo quiero que cada línea de mensaje aparezca con un checkbox, y lo hago, genero un chexbox dinamicamente al mostrar lso mensjes.

Lo que no logro es que al seleccionar cierta cantidad, luego pueda borrarlos, como funciona hotmail o yahoo, por ejemplo. Que cuando quieres borrar mensajes, sencillamente los marcas, luego presionas "Eliminar" y se eliminan, hay alguna forma de hacer esto, bueno, la verdad es que la hay, pero, TIENES ALGUNA IDEA DE COMO HACERLO??

Es dificil, lo se, pero bueno, gracias de verdad man.

Un saludo.

Avatar Image
Usuario habitual
Usuario habitual

Ah, vale, creo que ahora te entiendo. Es fácil de hacer, pero no tiene nada que ver con arrays ni foreachs Sonrisa Se hace en dos pasos:

1- Cuando generas el formulario, tienes que generar un control "checkbox" por cada mensaje que estás visualizando, y además tienes que ser capaz de saber a qué mensaje se refiere cada "checkbox".

La forma más fácil de hacer ésto es darle nombres diferentes a cada checkbox, en función del mensaje al que se refiere. Por ejemplo ...

Codigo PHP:

$datos= mysql_query("SELECT id, asunto FROM mensajes");
...
while ($fila = mysql_fetch_array($datos)) {
     echo '<input type="checkbox" name="chk_'.$fila['id'].'">';
     echo $fila['id']
     echo '<input type="text" name="asunto" value="'.$fila['asunto'].'">';
}



Si estás mostrando los mensajes con id 1, 5 y 7, este código generaría los "checkbox" chk_1, chk_5 y chk_7 (además del resto de campos de tu formulario)

2- Cuando procesas el formulario, tienes que compobar si se ha marcado el "checkbox" correspondiente al id de cada mensaje.

Hay varias formas de hacer ésto. La más sencilla (pero no la más rápida) es recuperar otra vez todos los mensajes mostrados, y ver si el "checkbox" correspondiente ha sido marcado:

Codigo PHP:

$datos= mysql_query("SELECT id, asunto FROM mensajes");
while ($fila = mysql_fetch_array($datos)) {
     if ( isset ($_POST[ 'chk_'.$fila['id'] ] ))
     {
         // Aquí haces la operación que sea con ese mensaje. Por ejemplo
         mysql_query("DELETE FROM mensajes WHERE id=".$fila['id']);
     }
}



Este bucle va mirando cada uno de los mensajes que visualizaste. Cuando mira el mensaje con id 1, comprueba si se seleccionó el checkbox chk_1, y en caso afirmativo hace la operación. Cuando mira el id 5, comprueba chk_5, y así.

Saludos.

Ediciones: añadidas explicaciones.
Avatar Image
Usuario habitual
Usuario habitual

Ok Caid, ahora creo tener el asunto claro, como mencionas al final, la pagina que procesa los mensajes borrá los que fueron marcados y enviados en el form. Eso ya lo tengo claro.

Y sí, entiendo que no es la más rapida, pero si funciona la uso.

Mil gracias.

ATENCIÓN: Este tema no tiene actividad desde hace más de 6 MESES,
te recomendamos abrir un nuevo tema en lugar de responder al actual
Opciones:
Ir al subforo:
Permisos:
TU NO PUEDES Escribir nuevos temas
TU NO PUEDES Responder a los temas
TU NO PUEDES Editar tus propios mensajes
TU NO PUEDES Borrar tus propios mensajes
Temas similares
TemaUsuariosRespuestasVisitasActividad
Por: , el 26/Nov/2004, 14:53
Yoshi_AFCL tenspirit12kNov/04
Por: , el 12/Mar/2011, 06:48
Alan35235735 NoSetup.org12kMar/11
Por: User 5407694, el 04/Ago/2008, 21:26
User 5407694 NoSetup.org15kAug/08
Por: , el 16/Ago/2005, 18:12
LORDARMATO Atomo6425kAug/05
Por: , el 01/Ago/2005, 02:16
mrvicio_03kAug/05