$_POST

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : $_POST

par béka » 19 mai 2006, 09:45

d'accord, ok j'ai compris
j'ai essayé et ca fonctionne
merci charabia et sadeq

par sadeq » 19 mai 2006, 09:42

La fonction session_start() doit être la première ligne dans une page php,
aucune ligne vide ou ligne html ou echo ne doit être avant sinon le serveur ne peut pas démarrer une session si des données ont été déjà affichées sur le navigateur.

Sous PHP, la session marche comme ça:
1. quand un client-navigateur demande une url de page, le serveur démarre une session pour ce client si la page demandée commence par session_start()
En fait, le serveur ne fait que créer un fichier dont le nom est un n° unique aléatoire (SID : identifiant de la session)
Le fichier SID va contenir toutes les variables de session de ce client (variables globales dont la durée de vie dure avec la navigation dans les page initialisées par session_start())
Les fichiers de sessions des clients connectés sont stockés par le serveur apache dans le dossier /tmp

2. la suite est logique : le serveur renvoi toujours le SID avec sa réponse au client-navigateur qui doit à son tour mémoriser auatomatiquement le SID dans ses cookies pour pouvoir le renvoyer une autre fois avec une nouvelle demande de page.

3. Le SID devient un ticket échangé entre le client et le serveur pour que ce dernier puisse recharger les données du client qui déclenche qui demande une page php.
En php, le fichier de session-client est accèssible par le tableau système $_SESSION.
Ainsi pour stocker une données le programme php l'écrit dans le tableau $_SESSION (ex: $_SESSION["nom"] = "ttoto"; $_SESSION["prix"]=100,00;)
De la même manière, pour lire des données le programme php utilise le tableau $_SESSION (ex: echo "$_SESSION[nom]";)

4. Quand un client efface ses cookies ou arrête son navigateur, il perd en fait ses SID auquel cas le serveur ne peut plus lui restituer ses fichiers de session donc ses données.
Le serveur détruit en fait tout fichier de session abondonné ou dont la durée de vie est dépassée ou si le programme le commande par session_destroy().

Pour la configuration des paramètres de session chez le serveur il faut consulter PHP.ini

Pour permettre les sessions client/serveur il faut que le client accèpte les cookies.

Exemple simple :
page1.php : cette page va être la première consultée et va stocker quelleque données dans une session
<?php
//démarrer ou réactiver une session pour un client
session_start();
//session_start : récupère un SID existant envoyé par le client 
//ou en crée un pour un nouveau client
//Un SID = un fichier session qui contient des données globales ($_SESSION)
?>

<p>Formulaire de saisie de données
<form>
<p>Nom <input name=nom>
<p>Prénom <input name=prenom>
<p><input type=submit action=action value=Enregistrer>
</form>

<?php
//Après validation, enregistrer les données envoyées par le formulaire dans la session
if ($_GET["enregistrer"])
   if ($_GET["nom"] && $_GET["prenom"]) {
           $_SESSION["nom"] = $_GET["nom"];
           $_SESSION["prenom"] = $_GET["prenom"];
           //Après enregistrement rediriger vers la suite
           header ("Location: page_suivante.php");
    } 
    else echo "<p>Données incorrectes!"; //Erreur: rester sur cette page
?>
Le page_suivante.php : récupère la session du client et recharge un certain nombre de données de session déjà stocké
<?php
//démarrer ou réactiver une session pour un client
session_start();
//session_start : récupère un SID existant envoyé par le client 
//ou en crée un pour un nouveau client
//Un SID = un fichier session qui contient des données globales ($_SESSION)
?>
<h1>Bienvenue, <?php echo "$_SESSION[nom] $_SESSION[prenom]"; ?> </h1>
Merci .....
Conclusion:
  • - Le client demande une page php qui fait un session_start()
    - Le serveur détermine le SID de ce client (nouveau/existant) = dans tous les cas un SID désigne un fichier de session + un tableau $_SESSION pour accèder au données du fichier ;
    Le serveur termine le programme de la page demandée et renvoi la réponse + le SID
    - Le client reçoit la réponse + le SID qu'il mémorise dans un cookie (si autorisé sur le navigateur sinon pas de session)
    Et le cycle est bouclé, à la prochaine demande de page le client remettra son SID avec (s'il s'agit bien sûr d'une page sur le même site)
    Le SID (n° aléatoire) est transmis par le client-navigateur automatiquement avec la requête HTTP.

par charabia » 19 mai 2006, 09:37

En fait les étapes sont :
1. tu as le formulaire d'inscription. La personne se logue :
-> soit c'est pas bon auquel cas tu renvoies vers ce même formulaire
-> soit c'est ok et là tu as déclaré tes sessions. Tu as donc la session $_SESSION['login'] de déclarée qui correspond déjà à ton $_POST['login'].

2. la personne est connectée et rentre dans les pages sécurisées. Là grâce au code que je t'ai donné plus haut, si la session est reconnue, dans ce cas oui puisque que la personne est rentrée, alors la personne reste bien sur la page. Si une autre personne vient sur cette même page sans être loguée, elle sera refoulé puisque tu auras mis :
if (!isset($_SESSION['login']))
Dans le cas d'un inconnu, aucune session n'a été créee puisqu'il n'est pas passé par le formulaire. Donc hop à la porte :)

par béka » 19 mai 2006, 09:31

d'accord
je vais essayer
mais ca veut dire aussi, que lorsqu'il s'identifie, je dois faire un truc du genre
$_session['login']=$_post['login']
sur la page qui vérifie si les champs sont corrects et après sur les autres pages, je dois mettre ce que tu m'as indiqué charabia ?
j'ai bien compris?

par charabia » 19 mai 2006, 09:27

Non il ne suffit pas de mettre session_start() pour protéger ta page. Ca veut juste dire que tu démarres les sessions.

Pour protéger tu dois rajouter en plus une détection puis redirection si non ok. Par exemple :
<?php
session_start();
if (!isset($_SESSION['login'])) {
    header ('Location: index.php');
    exit();
}
?>
S'il ne détecte pas la session alors c'est que la personne n'est pas connecté, donc redirection à la page d'accueil.

par béka » 19 mai 2006, 09:14

ok d'accord ca marche maintenant, et maintenant que mon utilisateur est identifié, pour lui autoriser l'accès a certaines pages qui sont également protégées, je dois mettre uniquement session_start() à chaque début de page protégée?

par béka » 19 mai 2006, 09:11

donc il faudrait que je le mette tout en haut de ma page?
et après je peux laisser mon code html?

par iclo » 19 mai 2006, 08:58

Tu ne peux avoir aucun code html avant la création de la session.

par béka » 19 mai 2006, 08:26

voila mon message d'erreur :
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\hippolyte\etudiant\depot\depot.php:12) in c:\program files\easyphp1-8\www\hippolyte\etudiant\depot\depot.php on line 42
et la ligne 42 de la page en question correspond a :
<?php session_start();
Voila, pouvez me renseigner ?

par Ryle » 18 mai 2006, 17:39

Quel est ton message d'erreur ? index non défini ?
sur quelle ligne ?
essaye de trouver quel index n'est pas encore défini à ce moment là.. utilise des print_r() pour voir ce que contiennent les tableaux..
pourquoi l'index n'est il pas défini ?
à quel moment devrait il être défini ?
d'où viennent les valeurs que tu essayes de mettre en session ?
...

par béka » 18 mai 2006, 17:33

Voila mon code de la page ou je veux réutiliser les champs saisis par l'utilisateur
<?php session_start(); ?>

Code : Tout sélectionner

<form action="enregistrement/enregistrement.php" method="post"> <p class="Texte"> Nom* : <br> <input name="nom_etudiant" type="text" size="20" value="<? echo $_SESSION['nom'] ?>"><br><br> Prénom* : <br> <input name="prenom_etudiant" type="text" size="20" value="<? echo $_SESSION['prenom'] ?>"><br><br>
Et j'ai un message d'erreur, pourquoi?

et sur ma page ou l'utilisateur rentre les informations, voila mon code :
session_start();
$_SESSION['nom']=$_POST['nom_etudiant'];
$_SESSION['prenom']=$_POST['prenom_etudiant'];
[/code]

par béka » 18 mai 2006, 17:24

je dois mettre ca dans quelle page? login.php ?

par béka » 18 mai 2006, 17:05

bon ben je vais essayé ce soir, et si je rencontre des problèmes je reviendrais... vous ne vous débarraserez pas de moi aussi rapidement.. lol :D

par Ryle » 18 mai 2006, 16:25

Il n'y a pourtant rien de sorcier dans les sessions, c'est un bête tableau que tu vas avoir sur chaque page ou tu les démarres, exactement ce que tu veux faire avec ton $_POST :

La ou tu récupères les données que tu souhaites conserver, tout ce que tu as à faire c'est :
session_start(); // demarre la session
$_SESSION['mesDonneesPost'] = $_POST; // colle ton tableau post dans la session
Et la où tu veux les utiliser tu fais
session_start(); // demarre la session
$monPOST = $_SESSION['mesDonneesPost']; // récupère ton tableau post de la session
et tu intérroges $monPOST['...'] comme tu le ferais avec $_POST. Pour les subtilités tu as tout le temps de voir venir, mais ça quand même, c'est pas ce qu'il y a de plus compliqué non plus, si ? :)

par charabia » 18 mai 2006, 16:24

Bé il faut juste que tu déclares tes sessions dès que c'est ok :
$_SESSION['nom'] = $_POST['nom_etudiant'];
$_SESSION['prenom'] = $_POST['prenom_etudiant'];
Et ensuite tu utilises $_SESSION['nom'] et $_SESSION['prenom'] sur tes autres pages