Avatar Image
Machacateclados
Machacateclados

Hola buenas

Como dice el título, tengo un array (o vector) que necesito pasar de un script a otro a través de un formulario por $_POST.

En mi servidor local la programación es perfecta y hace lo que quiero, pero al subirlo a webcindario y probarlo solo pasa el primer valor del array o eso creo, dado que tampoco da fallos específicos.

He mirado por si hay alguna función desactivada de las que uso pero creo que no. Dejo aquí la función con la que convierto el array para luego pasarlo al formulario y la función con la que lo vuelvo a pasar a array

Función para poder pasarlo por POST:

Cita:

           function array_envia($participantes)
           {
               $tmp = serialize($participantes);
               $tmp = urlencode($tmp);
           
               return $tmp;
           }//fin funcion
           $participantes=array_envia($participantes);

de ahi $participantes es mandada por el formulario. $participantes es un array con esta estructura: $participantes[valor]["campo interno"] es decir es bidimensional, pero aún asi localmente lo recorre y lo pasa bien con esta función

Luego para devolver el array a su estado natural tras pasarlo de un script a otro lo hago con esta otra función

Cita:

       $participantes==$_POST['participantes'];
       function array_recibe($url_array)
       {
           $tmp = stripslashes($url_array);
           $tmp = urldecode($tmp);
           $tmp = unserialize($tmp);
          return $tmp;
       }//fin funcion
       $participantes=array_recibe($participantes);

y solo muestra el primer valor, es decir solo pasa el primer valor de los muchos que llego a pasar

¿Hay algo desactivado de esas funciones en miarroba/webcindario? Es sino para buscar otra alternativa para poder pasar un array de script a script

Gracias

Avatar Image
@man / @woman
@man / @woman
Escrito originalmente por @JoaoTeamm

¿Hay algo desactivado de esas funciones en miarroba/webcindario?

NO

Cuando mi@ desactiva funciones, los códigos dan errores.

Respecto porque en local te funciona y en remoto no, tendrás que mirarlo, lo más seguro es que en local tengas configurado el php con menos restricciones... yo empezaría por meter unos print_r para asegurarte que antes de pasar el array, esta como crees que esta...

Avatar Image
Machacateclados
Machacateclados

Hola nuevamente @NoSetup.org

Siento ser pesado

Despues de hacer varias pruebas, lo serializa antes de pasarlo correctamente, pero al pasarlo de un script a otro por post, en el scrpit que lo recibe aparece totalmente en blanco, es decir, como si pasara un valor nulo por POST, por tanto al des-serializar da error porque no hay valor alguno.

No se que restricción que en modo local tenga activa puede estar dando el problema en el remoto. Es verdad que no hay acceso a vuestra php.ini pero si esas funciones no están desactivadas..... hay algo en concreto que pueda ser?

Es que veo algo jodido el tener que cambiar toda la programación y pasar ese array de otra forma (que no se si la habrá) de script a script, aunque si no hay mas remedio tendré que hacerlo asi.

Aún asi espero tu respuesta, gracias de nuevo

Edito mi mensaje: he intentado que en vez de serialize sea a través de una variable de sesión pero esa variable se pasa como un valor vacío. He intentado que en vez de usar un array bidimensional sea unidimensional, pero tampoco, también da un valor vacio ese array. No se, hay algo desactivado con los arrays? es digamos la duda que me queda, o si la variable supera X tamaño, no se pasa? Gracias de nuevo

Avatar Image
@man / @woman
@man / @woman

mi@ no ha tocado nada de arrays...

Haz una prueba... con un array facil, antes de psaar el mismo, haz un print_r, pasalo, haz otro print_r y comprueba... y pon el código que usas.

Avatar Image
Machacateclados
Machacateclados

@NoSetup.org,

Gracias por tu interés!!

Dejo un ejemplo que en modo local saca el resultado pero al subirlo muestra valor nulo:

Cita:

<?php
if(!isset($_POST['enviar']))
{
   //--> creamos el array
   $ejemplo[]="Hola";
   $ejemplo[]="Buenas";
   $ejemplo[]="Hasta Luego";
   $ejemplo[]="Hasta Pronto";
   $ejemplo[]="Adios";
   $n = count($ejemplo);
   $j = 0;
   echo"<big><big><strong>RESULTADO ANTES DE ENVIAR POR FORMULARIO<br></strong></big></big>";
   while($j<$n)
   {
       echo"Posicion $j: $ejemplo[$j]<br>";
       $j++;
   }//fin while
   echo"<br><br>Hacemos lo propio con PRINT R:<br>";    
   print_r ($ejemplo);
   
   //-->FUNCION PARA SERIALIZAR EL ARRAY
   function array_envia($variable)
   {
       $tmp = serialize($variable);
       return $tmp;
   }//fin funcion
   $ejemplo=array_envia($ejemplo); //-->LO SERIALIZAMOS
   
   ?>
   <form action="arrayejemplop1.php" method="post" name="form" id="form">
   <?php
   //-->PASAMOS EL ARRAY POR HIDDEN
   echo"<input type='hidden' name='ejemplo' value='$ejemplo'>";
   echo"<br><br><input type='submit' name='enviar' value='Enviar'><br>";
   echo"</form>";
   
   //-->DES-SERIALIZAMOS PARA COMPROBAR QUE LO HACE BIEN ANTES DE ENVIAR
   function array_recibe($url_array)
   {
       $tmp = unserialize($url_array);
          return $tmp;
   }//fin funcion
   $ejemplo=array_recibe($ejemplo);
   
   //-->VOLVEMOS A RECORRERLO PARA VER SI EXACTAMENTE DA EL MISMO RESULTADO
   echo"<br><br><br>";
   $n = count($ejemplo);
   $j = 0;
   while($j<$n)
   {
       echo"Posicion $j: $ejemplo[$j]<br>";
       $j++;
   }//fin while
   echo"<br><br>Hacemos lo propio con PRINT R:<br>";    
   print_r ($ejemplo);
   
}//fin existe enviar
else
{
   echo"<big><big><strong>RESULTADO DESPUES DE ENVIAR POR FORMULARIO<br></strong></big></big>";
   //-->RECIBIMOS POR POST EL ARRAY
   $ejemplo=$_POST['ejemplo'];
   //-->DES-SERIALIZAMOS PARA COMPROBAR QUE LO HACE BIEN TRAS RECIBIR
   function array_recibe($url_array)
   {
       $tmp = unserialize($url_array);
          return $tmp;
   }//fin funcion
   $ejemplo=array_recibe($ejemplo);
   
   //-->VOLVEMOS A RECORRERLO PARA VER SI EXACTAMENTE DA EL MISMO RESULTADO
   echo"<br><br><br>";
   $n = count($ejemplo);
   $j = 0;
   while($j<$n)
   {
       echo"Posicion $j: $ejemplo[$j]<br>";
       $j++;
   }//fin while
   echo"<br><br>Hacemos lo propio con PRINT R:<br>";    
   print_r ($ejemplo);
   print_r ("<br>El valor de count es: " . $n);
   ?><br /><br /><input type="button" value="Volver" onClick=" window.location.href='arrayejemplop1.php' "><?php
   
}//fin no existe enviar

?>

Decir que por $_Session este mismo ejemplo si funciona en remoto, asi que alguna cagada tendré que tener en mi código cuando probé a hacerlo por $_Session que no consigo ver, pero aún asi serializando, si es verdad que seguro que tengo otra cagada que aún no he visto pero con este ejemplo, espero poder salir de dudas

Gracias

Avatar Image
Colega ;)
Colega ;)

No se si te has dado cuenta, pero en ningún momento estás pasando un array por POST, estás pasando una variable con un array serializado como contenido... dícese, una variable normal y corriente que si no te está llegando es porque tienes algo mal al enviarla.

Mira el formulario de envío, que casi seguro el resultado del serialize te está rompiendo el formulario ;)

Avatar Image
Machacateclados
Machacateclados
Escrito originalmente por @Tito

No se si te has dado cuenta, pero en ningún momento estás pasando un array por POST, estás pasando una variable con un array serializado como contenido... dícese, una variable normal y corriente que si no te está llegando es porque tienes algo mal al enviarla.

Mira el formulario de envío, que casi seguro el resultado del serialize te está rompiendo el formulario ;)

Gracias tambien por tu respuesta

Claro la mando serializada porque por alguna razon que si que se que algo hago mal, al mandarla por $_Session da también valor nulo.

El formulario debe estar bien o eso creo, porque en modo local no da error ninguno, es mas este sería el resultado de Serialize antes de enviar y despues de enviar en modo local:

Primero antes de enviarlo por POST

Cita: Antes del envio

a:5:{i:0;s:4:"Hola";i:1;s:6:"Buenas";i:2;s:11:"Hasta Luego";i:3;s:12:"Hasta Pronto";i:4;s:5:"Adios";}

Despues de enviarlo por POST antes de des-serializarlo

Cita: Despues del envio

a:5:{i:0;s:4:"Hola";i:1;s:6:"Buenas";i:2;s:11:"Hasta Luego";i:3;s:12:"Hasta Pronto";i:4;s:5:"Adios";}

Sin embargo este es el resultado en el remoto:

Antes del envio

Cita:

a:5:{i:0;s:4:"Hola";i:1;s:6:"Buenas";i:2;s:11:"Hasta Luego";i:3;s:12:"Hasta Pronto";i:4;s:5:"Adios";}

Despues de enviar:

Cita:

a:5:{i:0;s:4:\"Hola\";i:1;s:6:\"Buenas\";i:2;s:11:\"Hasta Luego\";i:3;s:12:\"Hasta Pronto\";i:4;s:5:\"Adios\";}

Mete \ y creo que eso hace que como bien dices lo meta todo en una variable y no en array, pero no entiendo el por qué dado que como digo en local si lo interpreta perfectamente.

Soy consciente de que algo hay mal o al menos mejorable, pero la verdad que estoy perdido o cegado ahora mismo y no lo veo. Sino creo que no he entendido bien lo que me has querido decir en tu respuesta

Gracias de nuevo

Avatar Image
@man / @woman
@man / @woman

Intenta usar stripslashes($str) antes de des-serializar.

Avatar Image
Machacateclados
Machacateclados
Escrito originalmente por @GestionXls

Intenta usar stripslashes($str) antes de des-serializar.

Gracias por la respuesta!

En el mensaje primero que puse, lo usaba, pero viendo que tampoco cumplia supuestamente su función, lo quise simplificar quitandolo, pero tampoco...... la verdad que no se ya por donde tirar.

Supongo que algo hay mal, pero que es? No lo se

Avatar Image
Machacateclados
Machacateclados

¿Nadie ve nada raro o encuentra una explicación?

Avatar Image
Machacateclados
Machacateclados

@NoSetup.org, @Tito

Se que estareis hasta arriba de trabajo, pero asi a simple vista seguis sin ver nada raro?

Avatar Image
Colega ;)
Colega ;)

@JoaoTeamm, perdona pero no puedo estar a revisar códigos.

En un principio mi consejo es que para enviar hagas un htmlspecialchars del serialize y al recogerlo, un stripslashes antes del unserialize ya que webcindario tiene el magic_quotes activado.

Aquí te dejo un código muy simple (sin comprobaciones ni nada) para que te hagas una idea y puedas partir de ahí:

<?php

if( $_POST['var'] ) {
    $data = unserialize( stripslashes($_POST['var']) ); 
    echo 'Nos ha llegado: <pre>'. htmlspecialchars(print_r($data,true)) .'</pre>'; 
} else {
    $data = array('a','b','c','d','e'); 
    echo '<form method="post">';
        echo '<input type="hidden" name="var" value="'.htmlspecialchars( serialize($data) ).'"/>';
        echo '<input type="submit" value="Enviar"/>'; 
    echo '</form>';
}

?>
Avatar Image
Machacateclados
Machacateclados

Bien muchisimas gracias por la ayuda.

Espero poder probarlo antes del fin de semana y cuento aquí si funciona o no

Gracias de nuevo un saludo

Avatar Image
Machacateclados
Machacateclados

@Tito,

Mil gracias

Probado, comprobado, modificado y por supuesto FUNCIONANDO!!

Ahora si! Muchas gracias otra vez

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 12/Oct/2015, 19:28
joakinricardo GestionXls13kOct/15
Por: , el 06/Abr/2005, 13:27
QuiNtaN Atomo64 gohrum alphasierra fb@72604982518229kNov/16