Foros del Web » Programando para Internet » PHP »

Problema con paso de variables por url

Estas en el tema de Problema con paso de variables por url en el foro de PHP en Foros del Web. Muy buenas. Estoy realizando cambios en el código fuente de un calendario que encontré en desarrolloweb.com . El caso es que tengo una variable muy ...
  #1 (permalink)  
Antiguo 11/01/2006, 00:18
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Problema con paso de variables por url

Muy buenas. Estoy realizando cambios en el código fuente de un calendario que encontré en desarrolloweb.com .

El caso es que tengo una variable muy grande que se va generando al pinchar en los días seleccionados, y al intentar pasarla por el url con $_GET deja de funcionar y ya no puedo seleccionar más días.

¿Hay alguna otra forma de pasar las variables que no sea por url? Si es así agradecería que me dijeran cómo, con algún pequeño ejemplo, por favor, que no tengo mucha idea y estoy aprendiendo sobre la marcha.

Perdonad si esta respuesta ya está en forosdelweb, pero es que en estos momentos no funciona el buscador y me corre prisa.

Gracias por adelantado.
  #2 (permalink)  
Antiguo 11/01/2006, 00:25
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 19 años, 1 mes
Puntos: 17
mmm... no netiendo bien el problema
¿puedes poner el código q utilizas? ¿por qué deja de funcionar al usar un $_GET?

La otra opción sería pasarlo por $_POST con un formulario, sin embargo no suele ser "ameno"
  #3 (permalink)  
Antiguo 11/01/2006, 00:33
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Si, posteo el código:

Lo primero, tengo 2 archivos: cal.php y script.php; En cal.php llamo a script.php con require.

En cal.php cojo la variable marray generada en script.php:

if (isset($_GET[marray])){
$a=stripslashes ($_GET[marray]);
$mx=unserialize($a);
}

El problema es que ese array es muy extenso según vayamos seleccionando días, porque es generado mediante un for con esta instrucción:

$mx[$dia." ".$mes.$ano]=1;

Voy seleccionando los días mediante las variables $dia, $mes y $ano, y claro, al final, si has seleccionado 60 días, al realizar

$c=serialize($mx);
$c=urlencode($c);

salen unos 2000 caracteres en la dirección url, y ya no puedo seguir seleccionando días.

No sé si me he explicado muy bien. ¿Alguna solución?
  #4 (permalink)  
Antiguo 11/01/2006, 01:26
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
¿Tal vez podría solucionarlo con las sesiones? Estoy leyendo y releyendo ciertos documentos web, pero no me aclaro. Además estoy probando a hacer el paso de esa variable gigantesca con las sesiones, pero claro, no tengo apenas idea.

¿Podrían ponerme un ejemplo de como pasar esa variable con sesiones viendo el código que he posteado?

La verdad, tampoco sé si esa es la solución, así que si ustedes pueden ayudarme... se lo agradecería mucho.

Espero pues.
  #5 (permalink)  
Antiguo 11/01/2006, 03:13
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Señores/as, me estoy volviendo loco. Estoy intentando pasar la variable con una sesión PHP, pero no lo consigo. Parece bastante fácil, pero no doy con ello ni a la de tres. Si no es mucha molestia, les voy a postear el código de los dos archivos por si pueden indicarme alguna solución.

Archivo cal.php:

<?
require ("script.php");

if (!$HTTP_POST_VARS && !$HTTP_GET_VARS){
$tiempo_actual = time();
$mes = date("n", $tiempo_actual);
$ano = date("Y", $tiempo_actual);
$nomostrarflecha=$mes+$ano;/
}else {
$mes = $nuevo_mes;
$ano = $nuevo_ano;
}

if (isset($_GET[mi_var_array])){
$a=stripslashes ($_GET[mi_var_array]);
$mx=unserialize($a);
}
m_cal($mes,$ano,$dia,$mx,$nomostrarflecha);
?>

-----------------------------------------
Archivo script.php:

function m_cal($mes,$ano,$dia,$mx,$nomostrarflecha){
if ($dia<>0){
for ($i=1;$i<=31;$i++){
if ($i==$dia){
if ($mx[$dia." ".$mes.$ano]==0){
$mx[$dia." ".$mes.$ano]=1;
}else{
unset ($mx[$dia." ".$mes.$ano]);
}
}else{
if ($mx[$dia." ".$mes.$ano]==0){
unset ($mx[$dia." ".$mes.$ano]);
}else{
$mx[$dia." ".$mes.$ano]=$mx[$dia." ".$mes.$ano];
}
}
}
}

$c=serialize($mx);
$c=urlencode($c);

if ($mx[$dia_actual." ".$mes.$ano]==1){
echo "<td bgcolor=#ff3300 id=".$dia_actual." align=center><a href=s_calendar.php?nuevo_mes=$mes&nuevo_ano=$ano& dia=$dia_actual&mi_var_array=$c&nomostrarflecha=$n omostrarflecha>$dia_actual</a></td>";
}

---------------------------------------------------

Esto es a groso modo todo el archivo. ¿Cómo puedo pasar esa ristra de variables del echo en vez de por url de otra forma, con sesiones por ejemplo? Sobre todo &mi_var_array=$c, que es la que da problemas, ya que es una variable muy extensa.

Gracias por adelantado.
  #6 (permalink)  
Antiguo 11/01/2006, 05:12
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 3 meses
Puntos: 1
Primero, creo que estas confundido con el uso de la funcion require(). Al utilizae require("script.php") en calc.php estas incluyendo script.php dentro de calc.php, no llamándolo. Es decir, las variables definidas en script.php pueden ser usadas en calc.php al igual que cualquier otra variable, sin necesidad de recuperarlas con $_GET, $_POST o lo que sea.
Si quieres pasar variables utilizando variables de sesión, debes primero iniciar la sesión con session_start() y luego registrar las variables de sesión asignándolas a elementos del array $_SESSION, eso seria más o menos así:

$_SESSION['nuevo_mes'] = $mes;

Y asi deberias registrar todas las variables que quieres utilizar en la otra página. Luego, en la página que quieres utilizar las variables registradas (calendar.php) debes continuar la sesión con session_start() y puedes recuperar las variables utilizando $_SESSION.
Más o menos seria algo así:
En calc.php
Código PHP:
session_start();
... 
//codigo de calc.php

$_SESSION['nuevo_mes'] = $mes;
$_SESSION['nuevo_ano'] = $ano;
$_SESSION['dia'] = $dia_actual;
$_SESSION['mi_var_array'] = $c;
$_SESSION['nomostrarflecha'] = $nomostrarflecha;

Y en calendar.php:
Código PHP:
session_start();
$mes $_SESSION['nuevo_mes'];
//o puedes utilizar directamente $_SESSION['nuevo_mes']
....
//y asi con las demás. 
Espero que te sirva. Saludos
  #7 (permalink)  
Antiguo 11/01/2006, 06:37
 
Fecha de Ingreso: enero-2005
Mensajes: 102
Antigüedad: 19 años, 3 meses
Puntos: 0
Gracias por contestar, JorgitoAlfajor, pero seguimos igual. No funciona.

De todas formas ya sabía que la función require() lo que hace es requerir las líneas de código de ese archivo, y no llamarlo. Es que me he equivocado al poner el "echo", porque en <a href> he puesto s_calendar.php, pero realmente estoy llamando al mismo archivo "cal.php", ya que al pulsar en cualquier día del calendario se envía a sí mismo las variables, las coge y opera con ellas.

¿Puede ser que no me funcione la session por usar require()? No tendría por qué, ¿Verdad?

Mirad, al aplicar en el código de cal.php la session hago lo siguiente (Sólo con el array $mi_var_array):

<?
session_start();
require ("script.php");

if (!$HTTP_POST_VARS && !$HTTP_GET_VARS){
$tiempo_actual = time();
$mes = date("n", $tiempo_actual);
$ano = date("Y", $tiempo_actual);
$nomostrarflecha=$mes+$ano;/
}else {
$mes = $nuevo_mes;
$ano = $nuevo_ano;
}

if (isset($_SESSION['mi_var_array'])){
$a=stripslashes ($_SESSION['mi_var_array']);
$mx=unserialize($a);
}
m_cal($mes,$ano,$dia,$mx,$nomostrarflecha);
?>

¿No sería suficiente? Pues sigue sin funcionar. De todas formas he aplicado $_SESSION a todas las variables y no funciona.

¿Alguna otra solución?
  #8 (permalink)  
Antiguo 11/01/2006, 07:14
Avatar de JorgitoAlfajor  
Fecha de Ingreso: enero-2006
Mensajes: 152
Antigüedad: 18 años, 3 meses
Puntos: 1
Si querés podes publicar todo el código de tus archivos para ver si te puedo ayudar. Saludos.
__________________
¿Se me entiende la letra?
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 16:21.