Récupérer les données d'un formulaire pour faire des cookies

Discussion dans 'Web, design' créé par DeScH, 11 Juin 2006.

Statut de la discussion:
Fermée.
  1. Offline
    DeScH AstaLaVista
    Salut
    Qq1 saurait m'expliquer ce qui cloche à mon code? Aucun cookie ne s'enregistre. Quand je ne mets pas de variables, ça marche sans problèmes :s
    Merci

    <?php
    if (isset($_POST['username']) AND isset($_POST['password']))
    {
    $username = $HTTP_POST_VARS['username'];
    $password = $HTTP_POST_VARS['password'];
    ?>
    <?php
    $timestamp_expire = time() + 365*24*3600; // Le cookie expirera dans un an
    $_COOKIE('username', $username, $timestamp_expire); // On écrit un cookie
    $_COOKIE('password', $password, $timestamp_expire); // On écrit un autre cookie...
    }
    ?>
    <body>
    <br> <h3>Vous connecter
    </h3>
    <div class="element_menu">

    <p>
    <form action="test.php" method="get">
    <div align="left">Login:<br>
    <input name="username" type="text" size="12">
    <br>
    Password
    <br>
    <input name="password" type="password" value="" size="12">
    <br>
    </div>
    <p align="left">

    <input type="submit" class="button" name="Se connecter" value="Envoyer">&nbsp;
    </p>
    </form>
    </div>
    </body>
    DeScH, 11 Juin 2006
    #1
  2. Offline
    k o D Belge !
    C'est

    setcookie('username', $username, $timestamp_expire);


    $_COOKIE[username] donnera la valeur de la variable username dans ton cookie.
    Enfin essaye ainsi ;)

    Edit:
    De même, pourquoi utilises-tu la superglobale $HTTP_POST_VARS[] alors que tu utilises $_POST[] juste au-dessus?

    (je peux me tromper, çà fait longtemps que je n'ai plus fait de PHP, et les nouvelles normes PHP5 je ne les connais pas o_O )
    k o D, 11 Juin 2006
    #2
  3. Offline
    DeScH AstaLaVista
    C'est trouvé, j'ai mis get à la place de post :baille:
    DeScH, 11 Juin 2006
    #3
  4. Offline
    DeScH AstaLaVista
    J'ai encore un problème :s
    Je n'arrive pas à mettre en parallele le mot de passe et le nom d'utilisateur que j'ai enregistré dans le cookie avec la base de donnée. Quelqu'un saurait m'expliquer?
    DeScH, 12 Juin 2006
    #4
  5. Offline
    II phl II Touriste
    qu'appelles-tu mettre en // ?

    Enregistrer username et pass dans la DB ?
    Vérifier que username et pass existe dans la DB ?
    Autre chose ?
    II phl II, 12 Juin 2006
    #5
  6. Offline
    DeScH AstaLaVista
    En fait, je veux récupérer le nom d'utilisateur et le mot de passe d'un formulaire créé dans ma page, je veux en faire un cookie
    si le cookie correspond au login dans la bae de donnée, il se connectera avec son menu
    sinon il réaffichera le formulaire pour se conecter
    J'y arrive en sessions, mais pas moyen en cookie
    DeScH, 12 Juin 2006
    #6
  7. Offline
    II phl II Touriste
    ta page devrait ressembler à ça :

    <?php
    if (isset($_POST['username']) AND isset($_POST['password']))
    {
    $username = $_POST['username'];
    $password = $_POST['password'];

    $timestamp_expire = time() + 365*24*3600; // Le cookie expirera dans un an
    setCOOKIE('username', $username, $timestamp_expire); // On écrit un cookie
    setCOOKIE('password', $password, $timestamp_expire); // On écrit un autre cookie...

    echo '2 cookies ont été enregistré';
    exit;

    }
    ?>
    <body>
    <br> <h3>Vous connecter
    </h3>
    <div class="element_menu">

    <p>
    <form action="cookies.php" method="post">
    <div align="left">Login:<br>
    <input name="username" type="text" size="12">
    <br>
    Password
    <br>
    <input name="password" type="password" value="" size="12">
    <br>
    </div>
    <p align="left">

    <input type="submit" class="button" name="Se connecter" value="Envoyer">&nbsp;
    </p>
    </form>
    </div>
    </body>

    J'ai mis en gras ce que j'ai changé

    Donc il faut bien mettre setcookie et pas $_COOKIE pour créer le cookie
    Cette page sert à créer 2 cookies à partir d'un formulaire

    Il te faudrait donc au préalable une page (verif.php par expl) qui vérifierait l'existence de ces 2 cookies :
    - s'ils existent : on récupère la valeur de ces 2 cookies grâce à $_COOKIE['nom_cookie'] puis on compare ces valeurs avec celles qu'on a dans la DB (requette SQL + comparaison)
    - s'ils n'existent pas : on les crée puis on renvoie l'utilisateur vers la page verif.php (qui va détecter les 2 cookies, comparer leur valeur et le logguer si ça correspond avec la DB)
    II phl II, 12 Juin 2006
    #7
  8. Offline
    DeScH AstaLaVista
    Merci Phl, J'ai fait comme ça mais j'ai mis dans le meme fichier en fait.
    DeScH, 12 Juin 2006
    #8
  9. Offline
    II phl II Touriste
    de rien, content pour toi si tout fonctionne =]
    II phl II, 12 Juin 2006
    #9
  10. Offline
    DeScH AstaLaVista
    En fait j'ai encore un petit problème:

    <?php include('config.php');?>
    <?php

    if (isset($_POST['username']) AND isset($_POST['password']))
    {
    $username = $_POST['username'];
    $user_password = md5($_POST['password']);
    $timestamp_expire = time() + 365*24*3600; // Le cookie expirera dans un an



    mysql_connect($dbhost, $dbuser, $dbpasswd);
    mysql_select_db($dbname, $dbprotect);
    $verif_query=sprintf("SELECT * FROM phpbb_users WHERE username='$username' AND user_password='$user_password'"); // requête sur la base administrateurs
    $verif = mysql_query($verif_query, $dbprotect) or die(mysql_error());
    $row_verif = mysql_fetch_assoc($verif);
    $username1 = mysql_num_rows($verif);

    if ($username1) { // On test s'il y a un utilisateur correspondant

    // déclaration des variables de session
    setcookie("username",$username, $timestamp_expire );
    setcookie("user_pass",$user_password,$timestamp_expire );
    $_COOKIE['username'] = $row_verif['username']; // Son Login
    $_COOKIE['user_password'] = $row_verif['user_password']; // Son mot de passe (à éviter)
    $_COOKIE['user_level'] = $row_verif['user_level']; // le privilège de l'utilisateur (permet de définir des niveaux d'utilisateur)

    header("Location:test.php"); // redirection si OK
    }
    else {
    header("Location:test.php?erreur=username"); // redirection si utilisateur non reconnu
    }
    }
    mysql_close();

    // GESTION DE LA Déconnexion
    if(isset($_GET['erreur']) && $_GET['erreur'] == 'logout'){ // Test sur les paramètres d'URL qui permettront d'identifier un "contexte" de déconnexion
    setcookie('username'); // exemple 1
    setcookie('user_pass'); // exemple 1
    header("Location:test.php?erreur=delog");
    }
    ?>

    <head>
    <link rel="stylesheet" media="screen" type="text/css" title="style" href="stylemenu.css"/>
    <style type="text/css">
    <!--
    .Style2 {font-size: 9}
    -->
    </style>
    </head>

    <body>
    <br> <h3>Vous connecter
    </h3>
    <div class="element_menu">
    <?php
    if ($_COOKIE['username'] and $_COOKIE['user_pass']){ ?>
    <p:colere:font color="#C0C0C0">Bienvenue <?php echo $_COOKIE['username']; ?>,
    vous êtes connecté &nbsp;</font>
    <p:colere:a href="gestion/accueil.php">Votre menu </a>
    <p>
    <form method="POST" action="test.php?erreur=logout">
    <p align="center">
    <input type="submit" class="button" name="deconnection" value="Déconnection">
    </p>
    </form>
    <p>


    <?php }
    else
    { ?>
    <form action="test.php" method="post">
    <div align="left">Login:<br>
    <input name="username" type="text" size="12">
    <br>
    Password:<br>
    <input name="password" type="password" value="" size="12">
    <br>
    </div>
    <p align="left">

    <input type="submit" class="button" name="Se connecter" value="Se connecter">&nbsp;

    </form>
    <br>
    <br>
    <span class="Style2":colere:a href="/forum/profile.php?mode=register" class="Style3"> Si vous n'êtes pas encore membre de Planetnfs,
    cliquez ici</a> <font color="#999999":colere:/font:colere:font color="#999999":colere:/font:colere:/span:colere:font color="#999999"> <br:colere:br>

    <?php } ?>

    <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "username")) { // Affiche l'erreur ?:colere:span class="Style5">Login
    ou mot de passe incorrect</span> <?php } ?>
    <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "delog")) { // Affiche l'erreur ?>
    </span:colere:/font>
    <span class="Style2":colere:font style="font-size: 9 pts">Déconnexion
    réussie... A bientôt !</font:colere:/span:colere:font style="font-size: 9pt"> <?php } else {?>
    </font:colere:/font>

    <?php } ?>
    <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru")) { // Affiche l'erreur ?>
    <span class="Style5">vous
    n'avez pas les droits pour afficher cette page </span>

    <?php } ?>
    </div>


    Il me met une erreur à la ligne que j'ai mis en gras:
    Il dit :

    Notice: Undefined index: username in c:\program files\easyphp1-7\www\nfsmwv4\menu.php on line 58

    Pourtant ma variable est bien déclaré plus haut. Je ne comprend pas lol
    (Je suis un noob en php encore, j'apprend tout moi meme la :p)


    PS: quand je me suis connecté et déconnecté, ça marche.
    DeScH, 12 Juin 2006
    #10
  11. Offline
    II phl II Touriste
    essaye p-e en mettant la ligne sous cette forme :

    if (isset($_COOKIE['username']) AND isset($_COOKIE['password']))
    {
    }
    II phl II, 12 Juin 2006
    #11
  12. Offline
    DeScH AstaLaVista
    il ne se connecte meme pas en mettant ca :-s
    DeScH, 12 Juin 2006
    #12
  13. Offline
    Loetheri Absent
    Ton cookie n'est pas automatiquement créé ... Voilà, le problème.

    Si je peux me permettre, indente ton code.
    Tu le commentes de façon assez dense bien que certaines choses sont parfois inutile.
    Evite d'ouvrir, fermer, ouvrir tes balises.
    Essaye de faire toutes tes connexions au début de ta page PHP.
    Ne mets jamais de mot de passe et de nom d'utilisateur dans un cookie.
    Il est plus facile de jouer avec des ID qu'avec des chaines de caractères (comme un "username" que l'on traduira par "utilisateur")
    Le nom de tes variables sont soit en français soit en anglais mais jamais un mix des deux.
    N'hésite pas à faire des echos au lieu de fermer tes balises. Tu gagneras, je trouve, en lisibilité.
    Loetheri, 12 Juin 2006
    #13
Statut de la discussion:
Fermée.