Bonjour. Je voudrai faire en sorte que mes membres puissent remplir un formulaire pour ajouter un article ou autre. Je souhaiterai afficher dans un champs hidden le pseudo et l'id de l'utilisateur connecté.
Sauf que quand je le fait ça ma marque toujours le premier. Je me tourne donc vers vous. Merci d'avance.

34 réponses


mespeche
Réponse acceptée

Ok impeccable, bon ton code est pas top mais on peut en faire quelque chose c'est déjà sa xD.

Alors en faite tout en haut la première ligne doit être :

session_start();

c'est obligatoire.

Ensuite dans ton accueil.php fait un

session_start(); //Première ligne de ton code
print_r($_SESSION);

et dis moi ce que sa retourne.

Variable de session.
Je te conseille de lire ce tutoriel: http://www.siteduzero.com/tutoriel-3-69651-creer-un-espace-membre-pour-son-site.html
Bonne journée.

J'ai répondu à une question de ce type je t'y renvoi donc : http://www.grafikart.fr/questions/151

Guilhem
Auteur

J'ai regarder juste après, j'ai donc testé mais j'ai une erreur. Je vais retenter et je vous tien au courant ;).

C'est quoi ton erreur ?

Guilhem
Auteur

Notice: Undefined variable: pseudo in ajout-ep.php on line 60

Notice: Undefined variable: id in ajout-ep.php on line 60

Guilhem
Auteur

Je vous montre le code:

<?php
//On se connecte a la Base de donnee

session_start(); //Démarrage de session  
$_SESSION'pseudo'] = array('pseudo' => $pseudo, 'id' => $id); //Un tableau si tu veux passer d'autres arguments  

mysql_connect('localhost', 'swholocron', ' *********');
mysql_select_db('swholocron_encyclopedie');
//On affiche un message de bienvenue, si lutilisateur est connecte, on affiche son pseudo
?>
<?php
//Si lutilisateur est connecte, on lui donne un lien pour ajouter un article
if(isset($_SESSION'pseudo']))
{
?>
<?php  
echo $_SESSION'pseudo']'pseudo']; //Affichage du nom  
?>

C'est simplement que tes variables $pseudo et $id n'existent pas encore ligne 5 et que tu les assigne quand même à des cases du tableau.

Guilhem
Auteur

Je dois donc mettre quoi ? :s
J'ai jamais utilisé les session et en php je suis pas pro ^^.

Tu pourrais m'expliquer ce que tu veux faire mais en bien détaillé ? Ce qu'il se passe sur ton application pas à pas stp ;)

Guilhem
Auteur

Alors.

  • Le membre se connecte.
  • Il atterrit sur une page accueil.php
  • Il peut choisir d'éditer son profil ou d'ajouter un article.
  • Pour ajouter un article il arrive sur "ajout-art.php".
  • Et je voudrais que dans le code source dans deux champs hidden il y ai dans le formulaire:
    <input type="hidden" value="PSEUDO_UTILISATEUR"/>
    <input type="hidden" value="ID_UTILISATEUR"/>

Sauf que quand je fais avec les sessions (code plus haut) j'ai le pseudo qui s'affiche en double, l'erreur que j'ai posté plus haut s'affiche et l'id est toujours 1.

Ok alors il faut procéder comme ceci :

Au moment où tu vérifie si l'utilisateur a le droit de s'identifier etc... Tu fais :

//Si l'utilisateur peux avoir accès tu récupères l'id et le pseudo dans la bdd
$sql = "SELECT * FROM user WHERE pseudo = $_POST'pseudo'] AND pass = $_POST'pass']";
$req = mysql_query($sql);
$user = mysql_fetch_assoc($req);
session_start();
$_SESSION'User'] = array('id' => $user'id'], 'pseudo' => $user'pseudo']);

Du coup dans ton formulaire après tu fais :

<input type="hidden" name="pseudo" value="<?php echo $_SESSION'User']'pseudo']; ?>"/>
<input type="hidden" name="id" value="<?php echo $_SESSION'User']'id']; ?>"/>

Voila, c'est en gros le principe que tu dois adopter ;)

Guilhem
Auteur

Ok :) Merci je vais tester et je te dis ! :D

Guilhem
Auteur

Marche pas....

<?php
//On se connecte a la Base de donnee
mysql_connect('localhost', 'swholocron', ' *********');
mysql_select_db('swholocron_encyclopedie');
//On affiche un message de bienvenue, si lutilisateur est connecte, on affiche son pseudo
?>
<?php
//Si lutilisateur est connecte, on lui donne un lien pour ajouter un article
if(isset($_SESSION'pseudo']))
{
?>
<?php
//Si l'utilisateur peux avoir accès tu récupères l'id et le pseudo dans la bdd  
$sql = "SELECT * FROM utilisateurs WHERE pseudo = $_POST'pseudo'] AND pass = $_POST'pass']";
$req = mysql_query($sql);
$user = mysql_fetch_assoc($req);
session_start();
$_SESSION'User'] = array('id' => $user'id'], 'pseudo' => $user'pseudo']);
?>
<form action="ajout-art_1.php" method="post">

<input type="hidden" name="pseudo" value="<?php echo $_SESSION'User']'pseudo']; ?>"/>
<input type="hidden" name="id" value="<?php echo $_SESSION'User']'id']; ?>"/>

Erreur:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/serietvfilms/public_html/membres/ajout-ep.php on line 71

Il me faudrait peut être la ligne 71 xD

Guilhem
Auteur

xD Je te dis laquelle c'est la 16.

Tu as récopié texto ce que j'ai dis c'est normal xD, c'était juste pour te mettre sur la voix. A la place de $_POST'...'] faut mettre tes variable que tu récupére du formulaire de login

Guilhem
Auteur
Nom d'utilisateur:<input type="text" name="pseudo" value="<?php if(isset($_POST'pseudo'])){echo $_POST'pseudo'];} ?>" /><br />
Mot de passe:<input type="password" name="pass" /><br />

C'est un script de supportduweb.com
J'ai utilisé les même...

Sa devient très compliqué la xD. En fait c'est pas compliqué. Quand tu te loggue il faut que tu mettre en session le pseudo et l'id de la personne. Et quand tu veux ajouter l'article tu as juste à récupérer la session en cours

Guilhem
Auteur

.... Désolé mais je vois pas comment faire :/ xD

Tu as deux pages, ta page de login et ta page qui permet d'écrire les articles c'est sa ?

Guilhem
Auteur

Oui
connexion.php
et
ajout-art.php

Colle moi le code de ton connexion.php

Guilhem
Auteur
<div class="corp_ctn">
<?php
//On se connecte a la Base de donnee
include('mysqlcnn.php');
//Si lutilisateur est connecte, on le deconecte
if(isset($_SESSION'pseudo']))
{
    //On le deconecte en supprimant simplement la session pseudo
    unset($_SESSION'pseudo']);
?>
Vous avez bien été déconnecté.<br />
<a href="accueil.php">Accueil</a>
<?php
}
else
{
    //On verifie si le formulaire a ete envoye
    if(isset($_POST'pseudo'], $_POST'pass']))
    {
        //On echappe les variables pour pouvoir les mettre dans des requetes SQL
        if(get_magic_quotes_gpc())
        {
            $pseudo = mysql_real_escape_string(stripslashes($_POST'pseudo']));
            $pass = stripslashes($_POST'pass']);
        }
        else
        {
            $pseudo = mysql_real_escape_string($_POST'pseudo']);
            $pass = $_POST'pass'];
        }
        //On recupere le mot de passe de lutilisateur
        $req = mysql_query('select pass from utilisateurs where pseudo="'.$pseudo.'"');
        $dn = mysql_fetch_array($req);
        //On le compare a celui quil a entre et on verifie si le membre existe
        if($dn'pass']==$pass and mysql_num_rows($req)>0)
        {
            //Si le mot de passe, on ne vas pas afficher le formulaire
            $form = false;
            //On enregistre son pseudo dans les sessions
            $_SESSION'pseudo'] = $_POST'pseudo'];
?>
<?php
echo "Vous avez bien été connecté.";
header("Location: accueil.php");
?>
<?php
        }
        else
        {
            //Sinon, on indique que la combinaison nest pas bonne
            $form = true;
            $message = 'La combinaison que vous avez entré n\'est pas bonne.';
        }
    }
    else
    {
        $form = true;
    }
    if($form)
    {
        //On affiche un message sil y a lieu
    if(isset($message))
    {
        echo '<strong>'.$message.'</strong>';
    }
    //On affiche le formulaire
?>
<form action="connection.php" method="post">
Veuillez entrer vos identifiants pour vous connecter:<br />
Nom d'utilisateur:<input type="text" name="pseudo" value="<?php if(isset($_POST'pseudo'])){echo $_POST'pseudo'];} ?>" /><br />
Mot de passe:<input type="password" name="pass" /><br />
<input type="submit" value="Connection" />
</form>
<?php
    }
}
?>
                </div>

    </div>
Guilhem
Auteur

Avant l'include ? de la page de connexion, l'include y'a:

"session_start();
<ICI lES INFOS POUR SE CONNECTER A LA BDD>"

Ok, dans ce cas la session est déjà lancée donc pas besoin de session_start(), comme j'ai dit. Par contre ton include doit être tout en haut. Un session_start() doit être lancé avec tout contenu. Il faut que se soit la première ligne de ton code.

Guilhem
Auteur

Enfait j'ai enlevé le session_start de l'include.
Je l'ai mis sur la première ligne de l'accueil ensuite y'a la connection a la BDD et ensuite print_r($_SESSION);

Et j'ai: "Array ( ) Bonjour,..."

Guilhem
Auteur

Je ne suis pas très dégourdi en php :D

Ton print_r($_SESSION) est bien dans ta page où tu veux récupérer ton pseudo ?

Guilhem
Auteur

C'est bon ça marche ! :
Array ( [pseudo] => Keller )

A bin enfin ^^ Bon bin a toi de continuer alors ;) Bonne chance et oublie pas de valider la question.

Guilhem
Auteur

Merci a toi ! :)

Et comment on valide ? xD

De rien, l'icône verte à côté de nos messages à droite.

un tableu de session