IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Session et formulaire


Sujet :

Langage PHP

  1. #21
    Invité
    Invité(e)
    Par défaut
    Ne mets surtout pas tes paramètres de connection dans des SESSIONS, malheureux !
    1/ Tu crées un fichier connexion.php, dans un dossier "_connect" :
    dans lequel tu fais la connexion (avec les paramètres en dur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $BDD_IP = ...;
    $BDD_util = ...;
    $BDD_PSW = ...;
    $BDD_name = ...;
    $db = mysql_connect($BDD_IP, $BDD_util, $BDD_PSW);  // 1
    mysql_select_db($BDD_name,$db);
    2/ Dans chaque page, tu mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php require_once('_connect/connexion.php'); ?>

  2. #22
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    le but est de demander les paramètres de connexion à une BDD dans une page
    Pas sûr que les sessions soient approprié pour faire ce genre de chose.

    Ceci dit, peu importe la raison d'utiliser les sessions, je dirais qu'il serait peut être bon d'éviter de multiplier les problèmes.


    Les sessions devraient fonctionner, cependant tu ne fait presque aucun retour sur les codes et ce que les autres membres t'ont demandés.
    Difficile dans ces conditions de se faire une idée de la nature de l'erreur.

    Au passage rajoute un point d'arrêt (un exit) juste après le header.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    header ('Location:page2.php');
    exit(); // Point d'arrêt
    Supprime ce code (provisoirement) :

    Aussi, affiche l'ID de session et son nom, histoire d'en savoir un peu plus.
    La valeur de l'ID doit être la même quelque soit la page affichée (là où un session_start() est effectué).
    Donc dans la page de formulaire : (page 1 - login)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
    // EN HAUT DE LA PAGE
    session_start();
     
    ?>
    <!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="cs" lang="cs">
    <head>
        <title>session login</title>
    </head>
    <body>
    <div>
     
    <pre><?php print_r($_SESSION); ?></pre>
    <p>session_id : <?php echo session_id(); ?></p>
    <p>session_name : <?php echo session_name(); ?></p>
     
        <form method="post" action="ses2.php">
            login : <input type="text" name="login" />
            <input type="submit" value="Envoyer" />
        </form>
     
    </div>
     
    </body>
     
    </html>
    Puis en 2ème page (ses2.php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <?php
    // EN HAUT DE LA PAGE
    session_start();
     
    if (isset($_POST['login'])) {
        $_SESSION['login'] = $_POST['login'];
     
        // Redirection
        header('Location: page2.php');
        exit(); // Point d'arrêt
    }
    else {
        echo 'Problème d\'identification';
    }
    ?>
    Puis en 3ème page : (page2.php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
    // EN HAUT DE LA PAGE
    session_start();
     
    ?>
    <!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="cs" lang="cs">
    <head>
        <title>session page 2</title>
    </head>
    <body>
     
    <div>
    <pre><?php print_r($_SESSION); ?></pre>
    <p>session_id : <?php echo session_id(); ?></p>
    <p>session_name : <?php echo session_name(); ?></p>
    </div>
     
    </body>
    Donc en passant en 1er à la page login, puis en validant le formulaire que ce passe t-il ?
    La redirection fonctionne t-elle ? (page2.php est elle affichée après validation)

    Quels sont les infos dans la page 1 et page2.php ?
    L'ID de session est-elle la même ?

    As tu observé les cookies qu'il doit avoir dans ton navigateur en rapport au nom de domaine, vois tu quelque chose d'anormal (genre plusieurs cookies au lieu d'un).


    Bref ... tu peux faire plein de choses comme ceci pour aider à comprendre le problème.
    Fais des retours ici.
    Au passage, est-ce que l'affichage des erreurs de Php est activé ? (display_error du php.ini)
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #23
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Je mets des sessions parce que les paramètres de connexion peuvent changer (plusieurs BDD)

  4. #24
    Invité
    Invité(e)
    Par défaut
    "plusieurs tables" ne veut pas dire "plusieurs paramètres de connexion à la base de données" !!

    Ce sont les même paramètres, pour une seule et même base de données !
    Le nom des tables s'écrit dans les requêtes !

  5. #25
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Lorsque je valide le formulaire, j'ai bien page2 qui s'affiche, l'ID est le même, la session aussi

  6. #26
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je mets des sessions parce que les paramètres de connexion peuvent changer (plusieurs BDD)
    Les sessions ne sont pas des données sûr, fiables, elles peuvent être mises à mal pour peu que le code autour soit lui aussi peu fiable/sécurisé.

    Donner accès à une Base de données en se basant sur les sessions c'est prendre de sacrés risques.
    Ceci dit, ça c'est à toi de voir.

    Au passage il est courant d'exploiter une Base de données pour gérer les sessions, qui eux par défaut sont gérés dans des fichiers, histoire de renforcer la sécurité.
    De ton coté tu effectue l'inverse.
    Faut voir.


    Mais encore une fois, il serait bon d'éviter de tout mélanger.
    La manière de faire une connexion est un problème, la gestion des sessions et un tout autre problème (rien avoir je dirais).


    Qu'en est-il des suggestions que j'ai mis plus haut ?
    Si tu ne fais aucun retour et bien ???
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #27
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Lorsque je valide le formulaire, j'ai bien page2 qui s'affiche, l'ID est le même, la session aussi
    Pour info la valeurs de l'ID de session c'est la session.
    Si elle changeait ça voudrait dire que ce serait une autre session.
    Vu que ce n'est pas le cas alors la gestion des sessions fonctionnent correctement.

    Et le print_r sur $_SESSION, il y a rien ?
    Ce tableau doit avoir au moins 1 élément, le "login" (peu importe sa valeur).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #28
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Oui il la donne, je me suis trompé ... c'est un tableau dans lequel je vois aussi les paramètres de connection (qui pourtont sons définis dans d'autre pages ... du coups je pensais pas qu'il y avait le login)

  9. #29
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Oui il la donne, je me suis trompé ... c'est un tableau dans lequel je vois aussi les paramètres de connection (qui pourtont sons définis dans d'autre pages ... du coups je pensais pas qu'il y avait le login)
    C'est le but principal des session, c'est de définir 1 fois un élément dans la session et cette donnée sera dispo dans l'ensemble du site.

    D'où le coté risqué des sessions, car si quelqu'un mal intentionné parvient à usurper une identité (par le biais du cookie, en snifant le réseau, ou tout autre moyen) c'est sur l'ensemble du site qu'il aura accès, et toutes les fonctionnalités qui vont avec.


    Donc tout fonctionne (et fonctionnait) correctement, non ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  10. #30
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Maintenant, je voudrais récuperer les paramètres de connection sur d'autres pages pour ouvrir la même connexion à chaque, avez vous ou une idée du code à mettre pour récupérer les variables sur d'autre pages ?

  11. #31
    Invité
    Invité(e)
    Par défaut
    J'ai répondu ici.

    A lire : Se connecter à notre base via PHP

  12. #32
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Oui mais les paramètres tapées par l'utilisateur je les demande dans une page quelconque et après je fais un passage de variable entre les deux pages ? J'ai pas très bien compris ...

  13. #33
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    j'ai surtout l'impression qu'il te manque les bases essentielles.
    Je t'invite à LIRE ce tutoriel, et faire les petits exercices proposés : PHP : Le tutoriel pour grands débutants pressés

    Tu y trouveras de nombreuses réponses à tes nombreuses questions.

  14. #34
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Sinon, je pense que je vais les demander dans une page puis je les ferai un passage de variable vers la page connect que j'appelerai partout ; faisable ?

  15. #35
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    J'ai maintenant ceci :
    Page formulaire de connexion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FORM method=post action="connection.php">
    (puis je demande les champs) ensuite je veux les transmettre à la page connexion en hidden :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    echo('<input type='hidden' name='BDD_name2' value=\''.$_POST['BDD_name'].'\' />'); 
    echo('<input type='hidden' name='BDD_IP2' value=\''.$_POST['BDD_IP'].'\' />'); 
    echo('<input type='hidden' name='BDD_PSW2' value=\''.$_POST['BDD_PSW'].'\' />'); 
    echo('<input type='hidden' name='BDD_util2' value=\''.$_POST['BDD_util'].'\' />'); 
    ?>
    Page connection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $BDD_name1 = isset($_POST['BDD_name2']) ? $_POST['BDD_name2'] : '';
    $BDD_util1 = isset($_POST['BDD_util2']) ? $_POST['BDD_util2'] : '';
    $BDD_IP1 = isset($_POST['BDD_IP2']) ? $_POST['BDD_IP2'] : '';
    $BDD_PSW1 = isset($_POST['BDD_PSW2']) ? $_POST['BDD_PSW2'] : '';
     
    $db = mysql_connect($BDD_IP1, $BDD_util1, $BDD_PSW1);  // 1
    mysql_select_db($BDD_name1,$db);
    ?>
    La connexion ne passe pas, il y a apparemment une erreur de syntaxe sur les champs cachés (les variables ne sont pas récupérés dans la page connexion).
    Merci;

  16. #36
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Il y a des erreurs de syntaxes.
    D'ailleurs Php aurait dû te renvoyer des messages d'erreurs. Si ce n'est pas le cas il serait bon d'activer l'affichage des erreur (display_errors).
    C'est pour comprendre ces erreurs et les réparer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FORM method=post action="connection.php">
    Il faut être plus rigoureux que ça, comme mettre systématiquement des doubles quotes à toutes les valeurs des attributs HTML.
    Sinon tu risques de perdre du temps sur des broutilles.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post" action="connection.php">

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo('<input type='hidden' name='BDD_name2' value=\''.$_POST['BDD_name'].'\' />');
    D'abord, echo tout comme include et require sont des exceptions, se ne sont pas des fonctions, se sont des instruction du langage.
    Voir la doc : echo

    Du coup il est inutile de mettre des parenthèses genre : echo('un contenu').
    Personnelle je trouve qu'on se complique la vie inutilement.

    Puis comme tous les langages, il y a des délimiteurs.
    Le problème c'est que ces délimiteurs sont les mêmes en Php et en HTML.
    Tout l'art est d'éviter qu'ils entrent en conflits (c'est le cas dans ton code).

    Le plus simple c'est de se fixer (s'imposer) des règles d'écritures, si possibles les plus simples et les plus courantes.

    Pour ma part elles respecte cela (simples et courantes) :
    - Simple quotes -> ' coté Php
    - Doubles quotes -> " coté HTML

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    echo '<input type="hidden" name="BDD_name2" value="'.$_POST['BDD_name'].'" />';
    echo '<input type="hidden" name="BDD_IP2" value="'.$_POST['BDD_IP'].'" />';
    echo '<input type="hidden" name="BDD_PSW2" value="'.$_POST['BDD_PSW'].'" />';
    echo '<input type="hidden" name="BDD_util2" value="'.$_POST['BDD_util'].'" />';
    ?>
    Plus besoin d'échapper quoi que ce soit, et plus de conflit entre Php/HTML.


    Ceci dit personnellement je favorise très majoritairement l'affichage du HTML sans Php (pas de echo), c'est nettement plus simple et plus claire.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <input type="hidden" name="BDD_name2" value="<?php echo $_POST['BDD_name']; ?>" />
    <input type="hidden" name="BDD_IP2" value="<?php echo $_POST['BDD_IP']; ?>" />
    <input type="hidden" name="BDD_PSW2" value="<?php echo $_POST['BDD_PSW']; ?>" />
    <input type="hidden" name="BDD_util2" value="<?php echo $_POST['BDD_util']; ?>" />
    Même chose, pas d'échappement, pas de conflit.



    Ceci dit je ne comprends pas pourquoi tu exploites $_POST[...] dans ton formulaire ?
    Si ces données sont dans $_POST c'est quelles ont déjà été validées.
    Pourquoi alors ré afficher la même chose ?
    Si ces données ne sont pas dans $_POST alors ça va provoquer des erreurs.

    Théoriquement quand on affiche la 1ère fois le formulaire rien n'a encore été validé, donc théoriquement toujours le $_POST doit être vide, ne contenant aucun de ces paramètres.

    Je ne pige pas.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  17. #37
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    C'est vrai il faut attendre la validation du formulaire!

  18. #38
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Pour revenir au sessions, voyez vous pourquoi je n'arrive pas à me connecter à la BDD ? Alors que je récupère bien les valeurs d'un formulaire, j'arrive maintenant à les afficher ... ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     session_start(); 
    echo "BDD_name : "; echo $_SESSION['BDD_name']; echo "<br />";
    echo "BDD_IP : "; echo $_SESSION['BDD_IP']; echo "<br />";
    echo "BDD_PSW : "; echo $_SESSION['BDD_PSW']; echo "<br />";
    echo "BDD_util : "; echo $_SESSION['BDD_util']; echo "<br />";
     
    $db = mysql_connect('$_SESSION["BDD_IP"]', '$_SESSION["BDD_util"]', '$_SESSION["BDD_PSW"]');  
    mysql_select_db('$_SESSION["BDD_name"]',$db);
    ?>
    Merci,

  19. #39
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Une idée me vient à l'esprit.
    Sait on jamais.

    Admettons que tous ces paramètres soient connus à l'avance, ou peuvent l'être car stocké quelque part (quitte à le faire), dans une fichier, voir une Bdd "maitre" (ou master).

    Et bien au lieu de demander aux utilisateurs de saisir les paramètres, il suffirait de récupérer la liste des différentes connexions, puis de les proposer dans un menu déroulant (par exemple).
    A l'utilisateur de faire le choix.

    Ceci peu éviter pleins d'erreurs possibles (erreur de saisies, ne serait-que ça).
    De plus, on peu faire en sorte que ces paramètres soient jamais affichés dans une page (donc ne circule sur le réseau), mais de proposer un ID (identifiant correspondant à une connexion).

    Rien n'empêche de demander de saisir le mot de passe, voire le login et mot de passe.
    Ce qui évite de demander le nom du serveur, le nom de la Bdd, c'est toujours ça en moins.


    Encore faut il que cette liste de connexion existe ou puisse être faite.
    Pure suggestion.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  20. #40
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Points : 20
    Points
    20
    Par défaut
    Non, on crée souvent des BDD, mais dans un futur proche ... je mettrais tout cas dans une BDD, là ce sont des phases de tests ... sinon une idée pour la connection à la BDD avec le code précédent ?

Discussions similaires

  1. Perte de session après formulaire
    Par j0o0 dans le forum Langage
    Réponses: 9
    Dernier message: 09/05/2009, 22h22
  2. sessions et formulaires
    Par Nooby dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2008, 13h24
  3. session et formulaire
    Par haphp dans le forum Langage
    Réponses: 5
    Dernier message: 17/05/2008, 15h06
  4. Pb session après formulaire à deux boutons
    Par Lolie11 dans le forum Langage
    Réponses: 11
    Dernier message: 06/06/2007, 15h42
  5. Réponses: 32
    Dernier message: 20/03/2006, 14h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo