8796 sujets

Développement web côté serveur, CMS

Bonsoir,

j'aimerai comprendre comment marche la récupération de la variable de session.
j'ai deux pas pages l'une avec un formulaire et l'autre un test qui me réécrit la variable de session
voici le code

<?php
if(!empty($_POST['email'])&&(!empty($_POST['pwd']))){
session_start();
$_SESSION['email']=$_POST['email'];

}else{
?>
<form action="test.php" method="post">
    <p>
    <label for="adressemail">Adresse Mail: </label>
        <input type="text" id="email"><br />
    <label for="password">mot de passe: </label>
        <input type="password" id="pwd"><br />
    <input type="submit" value="send">
    </p>
</form>
	<p>
	Pour vous inscrire cliquez-ici: 
	<a href="inscription.php">inscription</a>
	</p>
<?php
}

?>


et donc j'envoie sur cette page

<?php

session_start();
echo $_SESSION['email'];
?>


malheureusement ca me renvoie rien du tout comme si elle était vidée .. vous savez pourquoi ???
Modifié par Heyoan (11 Mar 2010 - 00:44)
Salut,

c'est quoi le nom des pages (code du haut et du bas) ?
Comment fais-tu pour "envoyer" vers la deuxième page ?
Puisque tu n'es pas repassé par là et pour gagner du temps :
* soit ta première page ne s'appelle pas test.php auquel cas tu fais une grosse confusion : php étant un langage serveur les variables $_POST n'existent pas si tu ne les récupères pas d'abord.
* soit ta première page s'appelle bien test.php auquel cas tu fais une erreur puisque la fonction session_start doit être utilisée avant le DOCTYPE (comme header ou setcookie).

Un petit exemple :

test1.php
<?php
// Déclaration des champs (vides ou récupération des $_POST)...
$email = !empty($_POST['email']) ? trim($_POST['email']) : ''; // 
$pwd = !empty($_POST['pwd']) ? trim($_POST['pwd']) : ''; // 

$erreurs = array();

// Si le formulaire a été envoyé, on teste les champs...
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	if(empty($email)) {
		$erreurs[] = 'L\'email doit être renseigné !';
	}
	if(empty($pwd)) {
		$erreurs[] = 'Le mot de passe doit être renseigné !';
	}

	// Si aucune erreur
	if(empty($erreurs)) {
		// traitement
		session_start();
		$_SESSION['email'] = $email;
		header("Location: test2.php"); // redirection vers page de confirmation du traitement
	}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test formulaire</title>
<style type="text/css">
.alert {
	color:#990000;
}
</style>
</head>
<body>
<?php
// erreur(s) à afficher ?
if(!empty($erreurs)) {
	foreach($erreurs as $erreur) {
		echo '<p class="alert">'.$erreur."</p>\n";
	}
}
?>
<form action="test1.php" method="post">
	<p>
		<label for="email">email : </label>
		<input type="text" id="email" name="email" value="<?php echo htmlspecialchars($email); ?>" />
	</p>
	<p>
		<label for="pwd">mot de passe : </label>
		<input type="password" id="pwd" name="pwd" value="<?php echo htmlspecialchars($pwd); ?>" />
	</p>
	<p>
		<input type="submit" value="Envoyer" />
	</p>
</form>
</body>
</html>
test2.php
<?php 
session_start(); 
echo $_SESSION['email']; 
?>
Un très grand merci, vraiment ca faisait 10h que j'étais dessus et là tout simplement tu me débloque. C'est super

En fait ma grosse erreur était de faire mon action sur la page d'après ce qui ne remplissait pas les variable.

Merci infiniment
Wamdeus a écrit :
j'arrive pas à mettre résolu ... mais résolu quand même !
Il suffit d'éditer le premier message de ce sujet et de rajouter [résolu] dans le titre. Smiley cligne