Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Javascript (http://www.forosdelweb.com/f13/)
-   -   Leer lista (http://www.forosdelweb.com/f13/leer-lista-341124/)

wcfenix 12/10/2005 10:48

Leer lista
 
Hola he hecho un pequeño script para agregar e-mails a una lista desde JavaScript el asunto es que el usuario pueda agregar e-mails a una lista y al enviar el formulario un codigo en PHP debe leer los e-mails puestos.
Pero cuando hago todo solo me lee el ultimo ingreso.
Adjunto el codigo del JS y del PHP
Código:

/*Código JS
recibe la referencia de un campo de texto y de una lista a la cual se le va a agregar el elemento
*/
function agregaMail(txt,lst){
var nCorreo = txt.value;
var canti = lst.length
lst[canti] = new Option(nCorreo,nCorreo,"defaultSelected","selected");
txt.value = "";
}

El PHP es asi:
Código:

$amigos = explode(",",$_POST["amigos"]);
for($i=0; $i<=count($amigos);$i++){
        echo $amigos[$i]."<br>";
}

Pero solo me imprime el último elemento ingresado.... alguien sabe como se puede solucionar? :stress:

tunait 12/10/2005 13:31

Qué tal,

a php le llegará el valor del elemento que etuviera seleccionado en el momento de enviar el formulario. ¿Te hace lo mismo con múltiples selecciones en el campo?

wcfenix 12/10/2005 14:22

Nupo...como te digo, solo recibe el último elemento. Sabes como se puede hacer para que reciba todos los elementos de la lista.
Debe existir alguna manera porque cuando imprimo directamente el valor recibido en PHP me indica que es un array.

tunait 12/10/2005 15:40

¿Yá le agregas los corchetes al nombre del campo?

<select name="nombreSelect[]"> :pensando:

wcfenix 12/10/2005 16:41

Y como lo recibo?
 
Pero como lo recibo en el metodo porque al referenciarlo con los [] me da error de sintaxis en JS :neurotico

tunait 12/10/2005 16:45

Accede al campo usando su id que no llevará los corchetes

<select name="nombreSelect[]" id="idSelect">

Puedes acceder entonces a él usando el método getElementById() :-):arriba:

wcfenix 12/10/2005 17:00

Ta x salir
 
A ver... ya recibe bien los campos pero al ser enviado el formulario. PHP lo no me devuelve los values. Por el contrario me da vacio. :S
Código:

/*Esta es mi funcion*/
function agregaMail(txt,lst){
        if( validaMail(txt) ){
                var nCorreo = txt.value;
                var canti = lst.length
                lst[canti] = new Option(nCorreo,nCorreo,"defaultSelected","selected");
                txt.value = "";
        }
}

y mi nuevo PHP es:
Código:

$amigos = explode(",",$_POST["amigos[]"]);
echo count($amigos)."<br>"; // <<< --- Ponga la cantidad que sea me devuelve 1
for($i=0; $i<=count($amigos);$i++){
        echo "Es".$amigos[$i]."<br>";
}
/* Solo me imprime:
Es
Es
*/


tunait 12/10/2005 17:56

Hum ... por qué no pruebas a pedírselo así

Código:

foreach($_POST["amigos[]"] as $amigo => $correo){
    echo "Es". $correo. "<br />";
    }


wcfenix 13/10/2005 00:57

sory la demora...me sige dando error :'(

wcfenix 14/10/2005 12:23

Solucion
 
Hola ya logre lo que queria. Pero no de la forma convencional (enviando todo el arreglo de elementos en la lista) tuve que hacer otra variable invisible que almacene elemento a elemento y los separe x comas (,) incluse tuve que modificar la funcion para borrar elementos de la lista.
Mi script de PHP lee esta variable y realiza un explode teniendo en cuenta las comas para almacenarlo en un arreglo y hacer lo que desee con los datos.
Adjunto ambos codigos.
Códigos en JS
Código:

/* Agregamos un elemento insertado en una lista
param txt = referencia al campo de texto que vamos a insertar.
lst = referencia a la lista donde vamos a insertar los elementos
ocu = referencia a la variable oculta donde realmente guardaremos los datos
*/
function agregaMail(txt,lst,ocu){
/*No anexo el metodo validaMail pues solo valida los e-mails devuelve true si es correcto*/
        if( validaMail(txt) ){
                var nCorreo = txt.value;
                var canti = lst.length
        // Agregamos a la lista
                lst[canti] = new Option(nCorreo,nCorreo,"defaultSelected","selected");
                txt.value = "";
        //Agregamos un valor al campo oculto
                var tempi = ocu.value;
//Si es el primer valor
                if(tempi.length < 3) {
                        tempi = nCorreo;
                } else {
                        tempi += ","+nCorreo;
                }
                ocu.value = tempi;
        }
}

/* Funcion para eliminar
lst = referencia a la lista donde vamos a eliminar el elemento seleccionado
ocu = referencia al campo oculto que recibira el formulario
*/
function borrarCorreo(lst,ocu) {
        if (lst.selectedIndex >= 0) {
                lst.options[lst.selectedIndex] = null;
                lst.selectedIndex=0;
                var total = "";
                for(i=0; i<lst.length;i++){
                        var actual = lst.options[i].value;
                        if( total.length < 3 ){
                                total = actual;
                        } else {
                                total += ","+actual;
                        }
                }
                ocu.value = total;
        } else {
                alert("No hay elementos seleccionados.");
        }
}

y bueno si desean... el PHP que recibe empieza asi.
Código:

$amigos = explode(",",$_POST["correos"]);

$correos = "";
for($i=0; $i < count($amigos);$i++){
//Verificamos el valor que ha recibido
        echo "Es ".$amigos[$i]."<br>";
}

Gracias por la ayuda. :arriba:
Cuando publiquen la web mando la direccion :policia:
Gracias tuanit :adios:


La zona horaria es GMT -6. Ahora son las 08:47.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.