[RESOLU] probleme session_start

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 : [RESOLU] probleme session_start

Re: [RESOLU] probleme session_start

par moogli » 16 août 2013, 18:38

Attention avec cette méthode
Note:
Cette méthode peut ne pas retourner un résultat significatif suivant les drivers PDO utilisés, car la base de données utilisée peut ne pas supporter la notion de champs auto-incrémenté ou de séquences.
c'est pour cela que je t'ai présenté la solution SQL ;)


@+

Re: probleme session_start

par tomtom59 » 16 août 2013, 18:23

Ok , j'ai enfin reussi tous fonctionne maintenant , il manquait pas grand chose :

Code : Tout sélectionner

/* on cree les variables de session du membre qui lui serviront pendant sa session*/ $_SESSION['id']= $bdd->lastInsertId() ; $_SESSION['pseudo']= $_POST['pseudo']; $_SESSION['mail']= $_POST['email'];
Un grand merci a tous ceux qui ont prit le temps d'étudier mon probleme

Re: probleme session_start

par moogli » 16 août 2013, 13:53

@Boro64 : il utilise l'extension PDO, tu ne connais pas ? il serait bon de connaitre un minimum pour l'aider (cf remarque html /css) :mrgreen:
donc le mysqli_insert_id n'est pas utilisable.

@tomtom59 : utilise la requête sql suivant pour avoir l'info que tu souhaite (n'est valable que pour mysql).
select LAST_INSERT_ID() as lastid;
tu récupère lastid dans le jeux de résultat et c'est cette info que tu met en session (dans $_SESSION['id']).


@+

Re: probleme session_start

par Boro64 » 15 août 2013, 21:17

Excuses moi, mais ça, c'est quoi?
      $_SESSION['id']= [color=#FF0000]mysql_insert_id()[/color] ;
1) as tu fait un print_r($_SESSION), histoire de voir ce qu'elle te renvoie?
2) heu....comment redire ce que t'as déjà xTG un peu plus haut à propos du html dans ton php?.... :mrgreen:
3)si je puis me permettre (ne te vexe pas) mais je pense qu'il serait bon que tu maîtrise déjà (au moins) un peu le html et les css avant d'aller plus loin... :mrgreen:

Re: probleme session_start

par tomtom59 » 15 août 2013, 20:25

On avance j'ai modifier ca :

Code : Tout sélectionner

/* on cree les variables de session du membre qui lui serviront pendant sa session*/ $_SESSION['id']= [color=#FF0000]mysql_insert_id()[/color] ; $_SESSION['pseudo']= $reponse['pseudo']; $_SESSION['mail']= $reponse['email'];
Ca retourne bien une valeur mais c'est tjrs = a 0

Quoi rajouter pour avoir l'id du membre qui vient de s'inscrir??

Re: probleme session_start

par Boro64 » 15 août 2013, 17:32

Ben, si c'est simple; regarde bien le manuel, et après ton:
/*Si le pseudo est libre et l'email valide, alors on enregistre le nouveau membre*/
                    $req=$bdd->prepare('INSERT INTO membre(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
                    $req->execute(array('pseudo'=>$_POST['pseudo'], 'pass'=>$mdp, 'email'=>$_POST['email']));
il te suffit de récupérer l'id créé (au hasard, dans ta $_SESSION['id'] ) ...

Re: probleme session_start

par tomtom59 » 15 août 2013, 16:54

C chaud , j'ai lu le manuel mais c'est assez galere , je ne sais pas comment l'integrer au code????

Re: probleme session_start

par Boro64 » 15 août 2013, 10:58

Salut,

Lorsque tu fais ton insertion dans bdd, utilise ensuite mysqli_insert_id

Re: probleme session_start

par tomtom59 » 15 août 2013, 10:04

Ok bien vu moogli , j'ai donc remplacer les $resultat par des $post , et ca fonctionne pour les données qui ont était rentré dans le formulaire , par contre je ne sais pas comment récupérer l'id du membre qui se connecte (vu qu'il ne le rentre pas dans le formulaire) ???

je remet le code a jour

Code : Tout sélectionner

<?php session_start()?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Document sans titre</title> </head> <body> <?php /* il faut demarrer la session*/ if (empty($_SESSION['id'])) //les membres connecte ne peuvent pas s'inscrire { /* il faut que toutes les variables du formulaires existent*/ if(isset($_POST['pseudo']) && isset($_POST['mdp']) && isset($_POST['email'])) { /*il faut que tous les champs soient renseignes*/ if($_POST['pseudo']!="" && $_POST['mdp']!="" && $_POST['email']!="") { /*connexion a la BDD*/ try { $bdd = new PDO('mysql:host=localhost;dbname=formulaire', 'root', ''); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } /* on teste l'adresse email, si c'est bon, on continue, sinon, on affiche un message d'erreur*/ if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}.[a-z]{2,4}$#", $_POST['email'])) { /*on verifie si un membre ne possede pas deja le meme pseudo*/ $req = $bdd->prepare('SELECT id FROM membre WHERE pseudo = :pseudo'); $req->execute(array('pseudo'=> $_POST['pseudo'])); $nb_resultats_recherche_membre=$req->fetch(); if(!$nb_resultats_recherche_membre) /*si il n'y a pas de resultat*/ { /*on crypte le mot de passe*/ $mdp = sha1($_POST['mdp']); /*Si le pseudo est libre et l'email valide, alors on enregistre le nouveau membre*/ $req=$bdd->prepare('INSERT INTO membre(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())'); $req->execute(array('pseudo'=>$_POST['pseudo'], 'pass'=>$mdp, 'email'=>$_POST['email'])); /* on demarre la session */ [color=#FF0000] /* on cree les variables de session du membre qui lui serviront pendant sa session*/ $_SESSION['id']= ???????; $_SESSION['pseudo']= $_POST['pseudo']; $_SESSION['mail']= $_POST['email'];[/color] header('Location: membre.php'); } else { echo "Un membre possede deja ce pseudo"; } } else { echo "Votre adresse email n'est pas valide"; } } else { echo "Il faut remplir tous les champs"; } } else { echo "Une erreur s'est produite"; } } else { echo "Vous n'avez pas le droit d'acceder a cette page"; } ?> </body> </html>

Re: probleme session_start

par moogli » 13 août 2013, 22:09

Salut,

Le problème, dans le cas de la création de compte c'est que tu enregistre en session un id a partir d'une variable qui n'existe pas.
Avec cette ligne
$_SESSION['id']= $resultat['id'];
$resultat n'existe pas !
Tu devrais avoir une erreur avec ligne (variable inexistante).

Dans ce cas $_SESSION['id'] contient donc null (mais existe) du coup sur la page membre rien ne s'affiche.

Pour activer les erreurs il faut modifier le paramètre error_reporting a E_ALL dans le php.ini (dans le répertoire php du répertoire d'installation de wamp).

Le log serveurs c'est, par défaut, dans le répertoire Apache\logs.
A moins qu'il y ai un répertoire log dans le repertoir d'installation de wamp.

@+

Re: probleme session_start

par tomtom59 » 13 août 2013, 20:53

ok , je suis en local avec wamp , comment je fais pour activer les erreurs ? Et qu'appel tu logs de php et ou les trouver ? Par contre je ne rencontre pas de vrai erreur , la page membre s'affiche bien , c'est juste que ca me mais un espace vide ou je devrais avoir l'ID et le mail , pas contre ma page login avec le meme code pratiquement m'affiche bien les données

Re: probleme session_start

par xTG » 13 août 2013, 20:11

Tu as tout plein de html en plein dans le code PHP...
Par exemple :
 <span style="color: #FF0000">
               /* on cree les variables de session du membre qui lui serviront pendant sa session*/
               $_SESSION['id']= $resultat['id'];
               $_SESSION['pseudo']= $pseudo;
               $_SESSION['mail']= $resultat['email'];
                                        </span>
Ton script ne peut que générer des erreurs...
Actives l'affichage des erreurs sur ton serveur, ou bien vas voir les logs de PHP. ;)

Re: probleme session_start

par tomtom59 » 13 août 2013, 19:45

Ok j'ai modifié mon code comme indiqué , mais j'ai toujours le meme probleme , pas de données envoyé sur ma page membre.php
<?php session_start()?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?php
/* il faut demarrer la session*/

 
if (empty($_SESSION['id'])) //les membres connecte ne peuvent pas s'inscrire
{
    /* il faut que toutes les variables du formulaires existent*/
    if(isset($_POST['pseudo']) && isset($_POST['mdp']) && isset($_POST['email']))
    {
        /*il faut que tous les champs soient renseignes*/
        if($_POST['pseudo']!="" && $_POST['mdp']!="" && $_POST['email']!="")
        {
            /*connexion a la BDD*/
            try
            {
                $bdd = new PDO('mysql:host=localhost;dbname=formulaire', 'root', '');
            }
            catch (Exception $e)
            {
	        die('Erreur : ' . $e->getMessage());
            }
 
            /* on teste l'adresse email, si c'est bon, on continue, sinon, on affiche un message d'erreur*/
            if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}.[a-z]{2,4}$#", $_POST['email']))
            {
                /*on verifie si un membre ne possede pas deja le meme pseudo*/
                $req = $bdd->prepare('SELECT id FROM membre WHERE pseudo = :pseudo');
	        $req->execute(array('pseudo'=> $_POST['pseudo']));
	        $nb_resultats_recherche_membre=$req->fetch();
 
                if(!$nb_resultats_recherche_membre) /*si il n'y a pas de resultat*/
                {
                    /*on crypte le mot de passe*/
                    $mdp = sha1($_POST['mdp']);
 
                    /*Si le pseudo est libre et l'email valide, alors on enregistre le nouveau membre*/
                    $req=$bdd->prepare('INSERT INTO membre(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
                    $req->execute(array('pseudo'=>$_POST['pseudo'], 'pass'=>$mdp, 'email'=>$_POST['email']));
				
				
			/* on demarre la session */
               
 [color=#FF0000]
               /* on cree les variables de session du membre qui lui serviront pendant sa session*/
               $_SESSION['id']= $resultat['id'];
	       $_SESSION['pseudo']= $pseudo;
	       $_SESSION['mail']= $resultat['email'];
					[/color]
 
                    header('Location: membre.php');
					
                }
                else
                {
                    echo "Un membre possede deja ce pseudo";
                }	
            }
            else
            {
                echo "Votre adresse email n'est pas valide";
            }
        }
        else
        {
           echo "Il faut remplir tous les champs"; 
        }
    }
    else
    {
        echo "Une erreur s'est produite";
    }
}
else
{
     echo "Vous n'avez pas le droit d'acceder a cette page";
}
?>
</body>
</html>
et
<?php session_start()?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?php
echo "page membre";
?>
<?php
echo  'id : ',$_SESSION['id'],'<br />
     mail : ',$_SESSION['mail'],'<br />
<form action="logout.php" method="post">
<input type="submit" value="logout"/>
</form>';
?>
<?php
echo '<form action="index.php" method="post">
<input type="submit" value="acceuille"/>
</form>';
?>
</body>
</html>

Re: probleme session_start

par Spols » 13 août 2013, 08:52

Une session se démarrre en tout début de script, et surtout avant le moindre envoi de donnée donc y compris avant
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>
L'ouverture de session ne doit se faire qu'une fois par page, donc pas besoin dele rajouter une 2ème fois dans ta page.

Tu devrais faire afficher toutes les erreurs tu aurais tout de suite eu une qui te signale ton ouverture de session après affichage.

probleme session_start

par tomtom59 » 12 août 2013, 21:48

Bonsoir ,
Je suis en train de coder un formulaire d'inscription sur mon index.php qui renvoi sur membre.php , mais le probleme est que je n'arrive pas a garder la session ouverte , quand j'arrive sur membre .php les données normalement envoyées ne sont pas la , je vous met mes 2 codes :

En vous remerciant :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?php
/* il faut demarrer la session*/
session_start();

if (empty($_SESSION['id'])) //les membres connecte ne peuvent pas s'inscrire
{
/* il faut que toutes les variables du formulaires existent*/
if(isset($_POST['pseudo']) && isset($_POST['mdp']) && isset($_POST['email']))
{
/*il faut que tous les champs soient renseignes*/
if($_POST['pseudo']!="" && $_POST['mdp']!="" && $_POST['email']!="")
{
/*connexion a la BDD*/
try
{
$bdd = new PDO('mysql:host=localhost;dbname=formulaire', 'root', '');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

/* on teste l'adresse email, si c'est bon, on continue, sinon, on affiche un message d'erreur*/
if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}.[a-z]{2,4}$#", $_POST['email']))
{
/*on verifie si un membre ne possede pas deja le meme pseudo*/
$req = $bdd->prepare('SELECT id FROM membre WHERE pseudo = :pseudo');
$req->execute(array('pseudo'=> $_POST['pseudo']));
$nb_resultats_recherche_membre=$req->fetch();

if(!$nb_resultats_recherche_membre) /*si il n'y a pas de resultat*/
{
/*on crypte le mot de passe*/
$mdp = sha1($_POST['mdp']);

/*Si le pseudo est libre et l'email valide, alors on enregistre le nouveau membre*/
$req=$bdd->prepare('INSERT INTO membre(pseudo, pass, email, date_inscription) VALUES(:pseudo, :pass, :email, CURDATE())');
$req->execute(array('pseudo'=>$_POST['pseudo'], 'pass'=>$mdp, 'email'=>$_POST['email']));

/* on demarre la session */
session_start();

/* on cree les variables de session du membre qui lui serviront pendant sa session*/
$_SESSION['id']= $resultat['id'];
$_SESSION['pseudo']= $pseudo;
$_SESSION['mail']= $resultat['email'];


header('Location: membre.php');
}
else
{
echo "Un membre possede deja ce pseudo";
}
}
else
{
echo "Votre adresse email n'est pas valide";
}
}
else
{
echo "Il faut remplir tous les champs";
}
}
else
{
echo "Une erreur s'est produite";
}
}
else
{
echo "Vous n'avez pas le droit d'acceder a cette page";
}
?>
</body>
</html>

et

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?php
session_start();
echo "page membre";
?>
<?php
echo 'id : ',$_SESSION['id'],'<br />
mail : ',$_SESSION['mail'],'<br />
<form action="logout.php" method="post">
<input type="submit" value="logout"/>
</form>';
?>
</body>
</html>