Newsgroup: it.comp.www.php
Titolo: sessioni in locale tutto ok, sul server ad un certo punto non passano! AIUTO URGENTE!!!

Problema, ho un form in cui vengono inseriti dei dati su cui faccio un 
check (presenza dei dati obbligatori e corretezza formale dell'email o 
del numero di telefono per ricontattar la persona). Il form si ricarica 
evidenziando le celle con i dati mancanti, se del caso, altrimenti viene 
prodotta un'nateprima e richiesta una conferma. A questo punto capita il 
pasticcio, in locale se confermo o chiedo di modificare, i dati mi 
vengono tranquillamente passati (con o senza cookie) in remoto perdo 
tutti i dati. Inoltre quando viene prodotta l'anteprima (contenuta nella 
stessa pagina del form e mostrata solo in caso di presenza di tutti i 
dati) su Mozilla il codice html immediatamente seguente al messaggio 
d'anteprima (cioč il footer della pagina) mi scompare, in Opera lo 
stesso comportamento con in piů un avvviso di "connection closed by 
remote server" ed al posto del footer compare un bel TRASMISSION STOPPED!
Tutto ciň, lo ribadisco, in locale non mi succede.
Sinceramente non so come risolverlo o dove/cosa cercare per risolvere 
questo macello.
Fatemi sapere se avete capito il problema dalla mia descrizione, se no 
posto il codice, ma č un po' lunghino...
Grazie mille
Paola

 posto il codice, ma è un po' lunghino...
Posta il codice, magari metti solo un dato, non tutti...

L'Ignorante wrote:

Ribadisco che in locale funziona tutto a meraviglia.
pagina modulo (tagliata ma lunga comunque....)[ovviamente nell'XHTML c'è 
un echo $msg;]:
<?php
session_cache_limiter('private, must-revalidate');
session_start();
include ("inc/general.php"); //riguarda solo gli arg_separator
if (!isset ($_COOKIE['PHPSESSID'])) {
	$PHPSESSID = session_id ();
	$self_iscr = $_SERVER['PHP_SELF']."?PHPSESSID=$PHPSESSID";
	$self_iscr_get = 
$_SERVER['PHP_SELF']."?back_iscr=true&amp;PHPSESSID=$PHPSESSID";
	$stampa_iscr = "send_iscriviti.php"."?PHPSESSID=$PHPSESSID";
}
else {
	$self_iscr = $_SERVER['PHP_SELF'];
	$self_iscr_get = $_SERVER['PHP_SELF']."?back_iscr=true";
	$stampa_iscr = "send_iscriviti.php";
}
$error = "style=\"border:#CC0000 groove 2px;\"";
$ant_error = "style=\"color:#CC0000; font-weight: 700;\"";
if (!isset ($_REQUEST['back_iscr'])) { //modifica viene da ant- pg dopo
	$cognome = "";
	$nome = "";
	[CUT]
	//errori
	$err_nome = "";
	$err_cognome = "";
	$sel1 = "";
	$sel2 = "";
	$sel3 = "";
	$rad1 = "";
	$rad2 = "";
	$privacy = "";
	[CUT]
	}
else {
	if (isset ($_POST['back_iscr'])) { // solo per PHP_SELF se arriva da 
anteprima non ricarica i post
	$_SESSION = $_POST;
	}
	if (isset ($_REQUEST['back_iscr'])) {
	$nome = ucwords ($_SESSION['nome']);
	$cognome = ucwords ($_SESSION['cognome']);$doc = "";
	$doc = stripslashes ($_SESSION['doc']);
	[CUT]
	$doc = stripslashes ($_SESSION['doc']); //da impostare valori select-option
	if (isset ($_SESSION['privacy'])){ // come radio se no me la da nulla
		$privacy = $_SESSION['privacy']; //da impostare valori radio
		if ($privacy == "no") $err_privacy = "style=\"border:#CC0000 groove 
2px; width: 20px; height: 20px;\"";
		else $err_privacy = "";
		}
	else {
	$err_privacy = "style=\"border:#CC0000 groove 2px; width: 20px; height: 
20px;\"";
	$privacy = "ND"; // imposta var per avviso privacy mancante
			}
 
		if (isset ($privacy) && $privacy == "si") {
				$rad1 = "checked = \"checked\"";
				$rad2 = "";
			}
			elseif (isset ($privacy) && $privacy == "no") {
				$rad1 = "";
				$rad2 = "checked = \"checked\"";
			}
			else {
			//mi vuota il valore ND
				$rad1 = "";
				$rad2 = "";
			}
 
			$_SESSION['rad1'] = $rad1;
			$_SESSION['rad1'] = $rad1;
 
		if (isset ($doc) && $doc != "-- Seleziona un documento --") {
			$err_doc = "";
			if ($doc == "Carta d'Identità") {
				$sel1 = "selected=\"selected\"";
				$sel2 = "";
				$sel3 = "";
			}
			elseif ($doc == "Patente") {
				$sel1 =  "";
				$sel2 = "selected=\"selected\"";
				$sel3 = "";
			}
			else { //passaporto
				$sel1 =  "";
				$sel2 = "";
				$sel3 = "selected=\"selected\"";
			}
		}
		else {
			$err_doc = "style=\"border:#CC0000 groove 2px; width: auto; height: 
22px; padding: 0 5px 0 5px;\"";
			$sel1 =  "";
			$sel2 = "";
			$sel3 = "";
			}
			$_SESSION['sel1'] = $sel1;
			$_SESSION['sel2'] = $sel2;
			$_SESSION['sel3'] = $sel3;
 
	//altri errori tranne doc e privacy
	// dentro al primo else (non viene influenzato dalle var vuote primo 
accesso
	if ($nome == "") $err_nome = $error;
	else $err_nome = "";
		[CUT]
	if ($mail_iscriviti == "" || !eregi 
("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", 
$mail_iscriviti)) {
	$err_mail = $error;
	$ant_err_mail = $ant_error;
	}
	else {
	$err_mail = "";
	$ant_err_mail = "";
	}
 
	if ($tel == "" || !eregi ("^[0-9]+[0-9]$", $tel)) {
	$err_tel = $error;
	$ant_err_tel = $ant_error;
	}
	else {
	$err_tel = "";
	$ant_err_tel = "";
	}
 
	}
}
$modulo = "<form action=\"$self_iscr\" method=\"post\">
<p><label><span class=\"red\">*</span>Cognome: <input name=\"cognome\" 
type=\"text\" maxlength=\"50\" size=\"23\" value=\"$cognome\" 
$err_cognome /></label>
[CUT]
<input name=\"back_iscr\" type=\"hidden\" value=\"true\" /></label></p>
<p><label><input class=\"bott_form\" name=\"sub_iscr\" type=\"submit\" 
value=\"Verifica Dati\" /></label>&nbsp;&nbsp;&nbsp;<label><input 
class=\"bott_form\" name=\"reset\" type=\"reset\" value=\"Cancella\" 
/></label></p>
</form>";
$anteprima = "<p><div class=\"mod_sp_cogn\">COGNOME:&nbsp;&nbsp; 
<strong>$cognome</strong></div> [CUT]"."<form method=\"post\" 
action=\"$stampa_iscr\"><p><label><input type=\"submit\" 
name=\"sub_ant\" value=\"Conferma Dati\" class=\"bott_form\" 
/></label>&nbsp;&nbsp;&nbsp;<label><input type=\"button\" 
name=\"modifica\" value=\"Modifica Dati\" class=\"bott_form\" 
onclick=\"parent.location = '$self_iscr_get'\" /></label></p></form>";
// prima visualizzazione
if (!isset ($_POST['sub_iscr']) || !isset ($_POST['modifica'])) {
$msg = $modulo;
}
if (isset ($_POST['sub_iscr'])) {
if ($nome <> "" && $cognome <> "" && $indirizzo <> "" && $citta <> "" && 
$prov <> "" && $cap <> "" && $doc != "-- Seleziona un documento --" && 
$num_doc <> "" && $privacy == "si")
{
	if ($mail_iscriviti == "" && $tel == "")
	{
	$msg = "[CUT]"."$modulo";
	}
	elseif ($mail_iscriviti == "" xor $tel == "")
	{
		if ($mail_iscriviti <> "" && !eregi 
("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", 
$mail_iscriviti))
		{
		$msg = "[CUT]"."$modulo";
		}
		elseif ($tel <> "" && !eregi ("^[0-9]+[0-9]$", $tel))
		{
		$msg = "[CUT]"."$modulo";
		}
		else
		{
		//caso valido restituisce i dati inseriti
		$msg = "[CUT]"."$anteprima";
		}
	}
	else
	{
		if ($mail_iscriviti <> "" && !eregi 
("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", 
$mail_iscriviti)&& $tel <> "" && !eregi ("^[0-9]+[0-9]$", $tel))
		{
		$msg = "[CUT]"."$modulo";
		}
		else
		{
			if (!eregi 
("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", 
$mail_iscriviti)) {
	$ant_err_mail = $error;
	$msg = "[CUT]"."$anteprima";
			}
			elseif (!eregi ("^[0-9]+[0-9]$", $tel)) {
			$msg = "[CUT]"."$anteprima";
				}
			else {
			$msg = "[CUT]"."$anteprima";
			}
		}
	}
}
elseif ($nome <> "" && $cognome <> "" && $indirizzo <> "" && $citta <> 
"" && $prov <> "" && $cap <> "" && $doc <> "" && $num_doc <> "" && 
$privacy != "si")
{
$msg = "[CUT]"."$modulo";
}
else
{
$msg = "[CUT]"."$modulo";
 
}
}
?>
Pagina conferma invio mail per richiesta iscrizione e link per stampa 
modulo (qua perdo tutte le variabili dell'array $_SESSION provenienti 
dalla pagina precedente, ma solo in remoto, in locale funziona tutto, 
compreso il passaggio seguente alla pagina che mi genera al volo il 
pdf!) - [ovviamente nell'XHTML c'è un echo $msg;]
<?php
session_cache_limiter('private, must-revalidate');
session_start();
include ("inc/general.php");
$check_pdf = 1;
$_SESSION['check_pdf'] = $check_pdf;
if (!isset ($_COOKIE['PHPSESSID'])) {
	$PHPSESSID = session_id ();
	$print_pdf = "pdf_iscriviti.php"; //accodato automaticamente
}
else {
	$print_pdf = "pdf_iscriviti.php";
}
if (isset ($_POST['sub_ant'])) {
$nome = ucwords ($_SESSION['nome']);
$cognome = ucwords ($_SESSION['cognome']);
$msg = "<h2>Conferma invio e stampa modulo</h2><p>Grazie <strong>$nome 
$cognome</strong>,<br />
<br />la tua richiesta è stata inviata alla segreteria di Trieste 
Sanit&agrave; che ti contatter&agrave; per formalizzare 
l'iscrizione.</p><p><strong><a href=\"$print_pdf\" onclick=\"window.open 
(this.href); return false;\" title=\"Stampa il modulo in pdf\">STAMPA IL 
MODULO</a> in <span title=\"Portable Document Format - Questo tipo di 
file si aprono con Acrobat&reg; Reader&reg;\" class=\"spiega\">formato 
pdf</span> con i tuoi dati da consegnare alla nostra 
segreteria.</strong></p><p class=\"note\">[Se non hai Acrobat&reg; 
Reader&reg; per leggere i file pdf, puoi <a onclick=\"window.open 
(this.href); return false;\" title=\"Scarica gratuitamente Acrobat 
Reader dal sito ufficiale\" 
href=\"
http://www.adobe.it/products/acrobat/readstep2.html\
">prelevarlo 
gratuitamente da qui</a>.]</p>";
}
else {
	$msg = "<h2>ATTENZIONE: IMPOSSIBILE COMPLETARE L'ISCRIZIONE CON LA 
STAMPA DEL MODULO</h2><p>Probabilmente sei arrivato in questa pagina a 
causa di un link errato od inserito a mano nella barra di 
navigazione.</p><p>Sei vuoi iscriverti a Trieste Sanit&agrave; puoi 
farlo dalla sezione <a href=\"iscriviti.php\" title=\"Modulo ed 
istruzioni per l'iscrizione a Trieste Sanit&agrave;\">Iscriviti</a>.";
}
?>

 	$self_iscr = $_SERVER['PHP_SELF']."?PHPSESSID=$PHPSESSID";
Perche' usare $_COOKIE? Comunque dovresti scrivere:
if (!isset ($_COOKIE[session_name ()])) {
ma comunque sarebbe sufficiente:
$self_iscr = $_SERVER['PHP_SELF'] . "?" . SID . '&amp;' . 
             @$_SERVER['QUERY_STRING'];
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

"Elanor"

phpinfo(); sia in locale che sul server e controlla il valore del parametro 
use_trans_sid.
se questo nel server č impotsto su 0 allora perdi lo stato e quindi ti tocca 
aggiungere a mano un campo hidden con il valore dell'id di sessione.
ciao
pbgiorno

pbgiorno wrote:

php_info in remoto č disabilitato ;)
comunque non perdo la sessione, perdo semplicemente i dati! Se nel 
modulo mancano alcuni dati lo ricarica presentandomi TUTTI i dati 
eccetto quelli mancanti (e funzionano anche gli errori impostati), se ci 
sono tutti i dati l'anteprima si visualizza correttamente, ma se cerco 
di modiicare i dati o di confermarli dall'anteprima li perdo tutti 
(tranne l'id di sessione).
davvero non so piů cosa fare :(
Paola

 Paola
Aggiungo che esattamente dopo il primo invio (che mi ricarica il form se 
i dati mancano, o mi manda all'anteprima se i dati sono completi) la 
pagina mi si tronca esattamente dopo la visualizzazione di $msg 
(contenente il form o l'anteprima a seconda dei casi con tutte le 
varibili al loro posto). Il footer non c'è e neanche il ciclo foreach 
(immediatamente seguente a $msg) che avevo impostato per controllare 
l'effettiva presenza delle variabili all'interno dell'array $_SESSION.
AIUTO!
Il piano B è prendere a testate il muro.... qualcuno ha un piano A da 
suggerirmi?
Grazie
Paola

Elanor wrote:

Ecco mi ricorrego ancora, con i cookie attivati mi fa vedere anche il 
ciclo foreach dopo l'anteprima, ma se invio o cerco i modificare perdo 
tutti i dati comunque... ed anche la sessione
è davvero un bel pasticcio, anche perchè in locale continua a funzionare....

 
  Scusa ma non riesco a seguire, sto ancora imparando e sono agli inzi. 
Ho provato a cercare in giro ma non capisco dove vuoi arrivare.
Se pazientemente potessi illuminarmi....
  dici che il problema è questo?

Elanor wrote:

Quando lavori con le sessioni non dovresti andare a toccare il cookie
di sessione, se ne occupa PHP.
Non sempre il cookie di sessione si chiama PHPSESSID per cui e' meglio
utilizzare session_name ().
Inoltre piuttosto che toccare il cookie di sessione o abiliti il
trans-sid oppure utilizzi la costante SID in fase di riscrittura degli
url.


 
Non conoscevo la costante SID, adesso mi sono data una letta al manuale 
ed ho colmato una (delle tante) lacune.
La costante SID però usa l'id di sessione settato di default in php.ini, 
non è possibile modificarlo con session_name()?
Quello che non capivo in realtà era @$_SERVER['QUERY_STRING']; (@ a parte).

 modificarlo con session_name()?
<?php 
session_name ("WebsiteID"); 
session_start ();
print (SID);
?>
Restituisce:
WebsiteID=611b3451f93d194d62db9726b00e4112


 
Visto che sei così gentile, (dovrei farti un monumento oppure offrirti 
una cena ;) puoi dare un'occhiata al nuovo post che ho mandato sempre ad 
argomento sessioni. Ho fatto un test con un codice davvero elementare (e 
breve) e sul sever non funziona comunque nulla..... prima che mi venga 
il fegato grosso vorrei sapere se sono io a sbagliare tutto o meno.
Grazie mille
Paola