Non mantiene le sessioni

  • Creatore Discussione Creatore Discussione Shyson
  • Data di inizio Data di inizio

Shyson

Utente Attivo
19 Ago 2012
1.179
1
38
In un file esterno chiamato funzioni.php ho messo le sessioni, se c'è un errore il form torna indietro ma i campi precompilati diventano vuoti.

Ho provato anche a metterle nella pagina stessa ma esce l'errore "che non sono definite"

PHP:
<?php
session_start();
 //Sessioni per il form Successi
$_SESSION['nomeS'] = $_POST['nomeS'];
$_SESSION['cittaS'] = $_POST['cittaS']; 
$_SESSION['suoemailS'] = $_POST['suoemailS'];
$_SESSION['oggettoS'] = $_POST['oggettoS'];
$_SESSION['messaggioS'] = $_POST['messaggioS'];
?>

poi richiamo il file con include

PHP:
include ("funzioni.php"); 

...

if(isset($_POST['invia'])) {
$data_localeS = time(); 
$nomeS = htmlspecialchars(ucwords(strtolower(trim($_POST['nomeS']))));
$cittaS = htmlspecialchars(ucwords(strtolower(trim($_POST['cittaS'])))); 
$suoemailS = htmlspecialchars(strtolower($_POST['suoemailS'])); 
$suoemailS = str_replace(" ","",$suoemailS); // Toglie gli spazi interni nella mail
$oggettoS = htmlspecialchars(ucfirst(trim($_POST['oggettoS'])));
$messaggioS = htmlspecialchars(ucfirst(trim($_POST['messaggioS']))); 
$validatorS = htmlspecialchars(trim($_POST['validatorS']));
//dichiaro la variabile e la rendo vuota, altrimenti da errore
$erroreS = ''; 

...

//FORM 
<input type="text" name="nomeS" class="campi1-S" value="<?php echo($_SESSION['nomeS'])?>"...
//ECC. tutti i campi
 
ciao
prova a correggere in

PHP:
<?php
if(isset($_POST['invia'])) {
include ("funzioni.php");
$data_localeS = time(); 
$nomeS = htmlspecialchars(ucwords(strtolower(trim($_POST['nomeS']))));
$cittaS = htmlspecialchars(ucwords(strtolower(trim($_POST['cittaS']))));
//...
?>
se ti da errore la session_start, toglila dal funzioni.php e
PHP:
<?php
session_start();//verifica che sia alla prima riga nemmeno uno spazio prima di <?php
if(isset($_POST['invia'])) {
include ("funzioni.php");
$data_localeS = time(); 
$nomeS = htmlspecialchars(ucwords(strtolower(trim($_POST['nomeS']))));
$cittaS = htmlspecialchars(ucwords(strtolower(trim($_POST['cittaS']))));
//...
?>
 
ciao
prova a correggere in

PHP:
<?php
if(isset($_POST['invia'])) {
include ("funzioni.php");
$data_localeS = time(); 
$nomeS = htmlspecialchars(ucwords(strtolower(trim($_POST['nomeS']))));
$cittaS = htmlspecialchars(ucwords(strtolower(trim($_POST['cittaS']))));
//...
?>
se ti da errore la session_start, toglila dal funzioni.php e
PHP:
<?php
session_start();//verifica che sia alla prima riga nemmeno uno spazio prima di <?php
if(isset($_POST['invia'])) {
include ("funzioni.php");
$data_localeS = time(); 
$nomeS = htmlspecialchars(ucwords(strtolower(trim($_POST['nomeS']))));
$cittaS = htmlspecialchars(ucwords(strtolower(trim($_POST['cittaS']))));
//...
?>

Non va, l'unico che funziona è come il primo post, solo che non mantiene i dati nel form
 
ciao
non vedo perchè non debba funzionare, guarda lo schema qui sotto

PHP:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
<?php
if(isset($_POST['invia'])){
	$_SESSION['nome']=$_POST['nome'];//che sia ricavato da include o così è lo stesso
	$nome=trim($_POST['nome']);
	echo "$nome <br />";
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <p>
    <input name="nome" type="text" id="nome" value="<?php echo $_SESSION['nome']; ?>">
</p>
  <p>
    <input name="invia" type="submit" id="invia" value="invia">
</p>
</form>
</body>
</html>
 
ciao
non vedo perchè non debba funzionare, guarda lo schema qui sotto

PHP:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
<?php
if(isset($_POST['invia'])){
	$_SESSION['nome']=$_POST['nome'];//che sia ricavato da include o così è lo stesso
	$nome=trim($_POST['nome']);
	echo "$nome <br />";
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <p>
    <input name="nome" type="text" id="nome" value="<?php echo $_SESSION['nome']; ?>">
</p>
  <p>
    <input name="invia" type="submit" id="invia" value="invia">
</p>
</form>
</body>
</html>

Ho messo così

PHP:
..
if(isset($_POST['invia'])) {
//Sessioni per il form Successi
$_SESSION['nomeS'] = $_POST['nomeS'];
$_SESSION['cittaS'] = $_POST['cittaS']; 
$_SESSION['suoemailS'] = $_POST['suoemailS'];
$_SESSION['oggettoS'] = $_POST['oggettoS'];
$_SESSION['messaggioS'] = $_POST['messaggioS'];

$data_localeS = time(); 
$nomeS = htmlspecialchars(ucwords(strtolower(trim($_POST['nomeS']))));
$cittaS = htmlspecialchars(ucwords(strtolower(trim($_POST['cittaS'])))); 
$suoemailS = htmlspecialchars(strtolower($_POST['suoemailS'])); 
$suoemailS = str_replace(" ","",$suoemailS); // Toglie gli spazi interni nella mail
$oggettoS = htmlspecialchars(ucfirst(trim($_POST['oggettoS'])));
$messaggioS = htmlspecialchars(ucfirst(trim($_POST['messaggioS']))); 
$validatorS = htmlspecialchars(trim($_POST['validatorS']));
//dichiaro la variabile e la rendo vuota, altrimenti da errore
$erroreS = ''; 
..

appare questo:
 

Allegati

  • Img_01.png
    Img_01.png
    69,8 KB · Visite: 248
Ti spiego meglio:

se vuoto il form da quei codici e riempio i campi e poi inserisco di proposito il captcha errato, il form torna indietro con i dati che avevo inserito io.

Se invece invio il form correttamente e va a buon fine, poi il form si ripresenta con quei codici (vedi img post precedenta)

PHP:
...
echo "Successo inviato!"; 
echo "<meta http-equiv='refresh' content='0; url=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
session_destroy();
 
Ultima modifica:
ciao
dai un occhio alle modifiche dello schema, ti ho aggiunto un pulsante se uno vuole ripulire il tutto.
comunque se usi le sessioni ti conviene mettere l'istruzione
$_SESSION=array();
appena fatto l'insert nel db in modo che comunque il form rimanga pulito se l'inserimento ha avuto successo
in pratica appena prima di
echo "Successo inviato!";

PHP:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
</head>
<body>
<?php
if(isset($_POST['invia'])){
	$_SESSION['nome']=$_POST['nome'];
	$nome=trim($_POST['nome']);//che sia ricavato da include o così è lo stesso
	echo "$nome <br />";
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}elseif(isset($_POST['azzera'])){//queto serve per ripulire il form se non ti serfe toglilo
	$_SESSION=array();//annulla le sessioni eventualmente (anzi meglio) mettila quando il form è stato inviato correttamente
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  <p>
    <!-- guarda la modifica su value= -->
	<input name="nome" type="text" id="nome" value="<?php if(isset($_SESSION['nome'])){ echo $_SESSION['nome'];}else{ echo "";} ?>">
</p>
  <p>
    <input name="invia" type="submit" id="invia" value="invia">
  </p>
  <p><!-- con azzera tutto ripolisci il form e annulli tutte le sessioni se non ti serve toglilo-->
    <input name="azzera" type="submit" id="azzera" value="azzera tutto">
  </p>
</form>
</body>
</html>
 

Discussioni simili