Un peut de PHP SQL pour finir l'apres midi !

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par user2home, 18 Avril 2011.

  1. user2home
    user2home WRInaute occasionnel
    Inscrit:
    19 Décembre 2007
    Messages:
    251
    J'aime reçus:
    0
    Bonjour à tous, j'ai un soucis avec un bout de code, si quelqu'un peut me dépanner ou me donner une piste je l'en remercie je ne trouve vraiment pas de solutions..... je suis étudiant en 1 année donc je débute en dev ( je précise cela pour éviter tout jet de pierres :wink: )

    Il s'agit de mon projet de PTI, je tente cet apres midi de compléter avec une vérification via le SESSION l'acces à des pages réservé aux membres.

    Via un IF et un ELSE, si l'utlistateurs est connecté alors j'affiche, sinon un message s'affiche.


    Voici mon fichier "action" authentification, suivit du code de ma page réservé aux membres.

    Je cherche également un moyen d'integrer du code html dans un if en php, j'ai tenté via des echo 'html'; mais c'est vraiment artisanale je pense !

    En vous remerciant par avance !


    Code:
    <?php
    
    include_once ('../../cfg/connexion.cfg.php');
    $login = $_POST['login']; //recuperation de login et mdp
    $pwd = $_POST['pwd'];
    
    
    
    $sql = "SELECT * FROM profils WHERE USERNAME='" . $login . "' AND MDP='" . $pwd . "';"; //selection du compte depuis la DB
    $resultat = mysql_query($sql);
    $ligne = mysql_fetch_array($resultat, MYSQL_ASSOC);
    
    
    $login_valide = $ligne['USERNAME'];
    $pwd_valide = $ligne['MDP'];
    //echo $sql;
    // on teste si nos variables sont définies
    if (isset($_POST['login']) && isset($_POST['pwd'])) {
    
        // je vérifie les informations du formulaire
        if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) {
            //tout est ok on demarre la session
            session_start ();
            $_SESSION['auth'] = "ok";
            $_SESSION['id'] = $ligne['IDPROFIL'];
    
            //j'enregistre le visiteur dans des variable de session
            $_SESSION['login'] = $_POST['login'];
            $_SESSION['pwd'] = $_POST['pwd'];
            header('location:../../index.php');
            // je redirige le membre
        } else {
            // Visiteur inconnu
            header('location:../../index.php');
        }
    }
    ?>
    
    Code:
    <?php
    if (!isset($_SESSION['login']) && !isset($_SESSION['pwd']) && $_SESSION['auth'] != "ok") {
     echo "Vous devez êtres enregistré vous afficher ce contenu";   
    }
    else {
    ?>
        <div id="administrer">
            <br />
            <table border="0">    
                <tr><th>Ajouter un Profil  :</th>
                    <th><a href="index.php?page=form/form_compte_ajouter_sc2&id=';<?php echo $_SESSION['id']; ?>">Starcraft II</a> - </th>
                    <th><a href="index.php?page=form/form_compte_ajouter_war3&id=<?php echo $_SESSION['id']; ?>">Warcraft III</a> - </th>
                    <th><a href="index.php?page=form/form_compte_ajouter_wow&id=<?php echo $_SESSION['id']; ?>">World Of Warcraft</a></th></tr>
            </table>
    
            <h1>TABLEAU PROVISOIR LISTAGE COMPTE</h1>
            <br />
            <br />
            <table border="1">
                <tr><th>Identifiant</th><th>Pseudo</th><th>mot de passe</th><th>Mail</th><th>Code Postal</th><th>Pays</th><th>Modifier</th><th>Supprimer</th></tr>
    <?php
        $resultat = "SELECT PR.IDPROFIL, PR.IDPAYS, P.LIBELLE, PR.USERNAME, PR.MDP, PR.EMAIL, PR.URL, PR.CODEPOSTAL  FROM profils as PR, pays as P WHERE  PR.IDPAYS=P.IDPAYS";
        $result = mysql_query($resultat);
        while ($ligne = mysql_fetch_array($result, MYSQL_ASSOC)) {
            echo "<td>";
            echo $ligne['IDPROFIL'] . "</td>
                <td> " . $ligne['USERNAME'] . "</td>
                <td> " . $ligne['MDP'] . "</td><td> " . $ligne['EMAIL'] . "</td><td> " . $ligne['CODEPOSTAL'] . "</td>
                <td> " . $ligne['LIBELLE'] . "</td>";
            echo "<td> <a href=\"index.php?page=form/form_compte_modifier&id=" . $ligne['IDPROFIL'] . "\">Modifier</a></td>";
            echo "<td> <a href=\"index.php?page=action/action_compte_suprimer&id=" . $ligne['IDPROFIL'] . "\">Supprimer</a></td></tr>";
        }
        echo "</table>";
        echo "</div>";
    }
    ?>
     
  2. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 969
    J'aime reçus:
    121
    Tu sais que tu peux faire comme tu as fais plus haut, à savoir fermer la balise php et mixer avec du HTML :

    Code:
    while ($ligne = mysql_fetch_array($result, MYSQL_ASSOC)) {
    ?>
    <td>
            <?php echo $ligne['IDPROFIL']; ?></td>
            ...
    
     
  3. user2home
    user2home WRInaute occasionnel
    Inscrit:
    19 Décembre 2007
    Messages:
    251
    J'aime reçus:
    0
    Oui, je te remercie ce problème semble résolu ! Mon soucis principal vient des pages réservé aux membres :?

    Ai je bien fais mon fichier d'authentification, me conseillez vous autre chose ?
     
  4. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 969
    J'aime reçus:
    121
    Bein du coup ton problème n'est pas du tout clair. Quels problèmes tu rencontres ? As-tu bien mis un session_start() en en-tête de tes pages, avant toute sortie HTML ?
     
  5. user2home
    user2home WRInaute occasionnel
    Inscrit:
    19 Décembre 2007
    Messages:
    251
    J'aime reçus:
    0
    J'avais effectivement oublié mon session_start en debut de page à vérouiller pour les utilisateurs non enregistrés. Après l'ajout et le test j'obtiens :

    J'en déduis que la session est deja active.... mais je ne saurai pas interpréter au dela le pourquoi de cette erreur, si la session est bien lancé ( d'après le message d'erreur ) la partie situé dans mon if ne devrai pas s'afficher si je ne suis pas logué, helas elle s'affiche tout de même .... :?
     
  6. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 969
    J'aime reçus:
    121
    Ce n'est pas parce que tu as activé les sessions sur une page que LA session que tu testes est définie. Tu as un session_start au début de la page où tu instancies tes variables de session ?
     
  7. user2home
    user2home WRInaute occasionnel
    Inscrit:
    19 Décembre 2007
    Messages:
    251
    J'aime reçus:
    0
    La page ou j'instancie mes variables de connexion est mon premier quote je ne le lance que si le login récupere en $_POST est égal au login importé depuis la BD. :?


    CODE COMPLET DU FICHIER DE CONNECTION
     
  8. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 969
    J'aime reçus:
    121
    Et si tu fais un print_r($_SESSION) ;exit(); sur la page suivante, avant tout traitement (hormis le session_start bien sûr), tu as quelque chose qui s'affiche ?
     
  9. jamalofski
    jamalofski WRInaute discret
    Inscrit:
    3 Mars 2007
    Messages:
    225
    J'aime reçus:
    0
    injection sql ?!
     
  10. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 969
    J'aime reçus:
    121
    Je répondais à la question initiale, mais en effet, niveau sécurisation, une requête qui intègre des variables $_GET / $_POST sans un minimum de sécurisation/nettoyage, c'est pas le top :/
     
  11. user2home
    user2home WRInaute occasionnel
    Inscrit:
    19 Décembre 2007
    Messages:
    251
    J'aime reçus:
    0
    Je viens d'executer ce code dans mon fichier "action authentification" donc juste après la validation du formulaire de connexion et j'obtiens :

    Code:
    Notice: Undefined variable: _SESSION in C:\wamp\www\PTICITATION\pti\pages\action\action_auth_connecter.php on line 3
    Donc j'en déduis que la session n'est pas encore définie avant la connexion de l'utilisateur ?
     
  12. user2home
    user2home WRInaute occasionnel
    Inscrit:
    19 Décembre 2007
    Messages:
    251
    J'aime reçus:
    0


    je ne peux pas tout apprendre d'un coup, j'ai deja du mal à gérer des session, pour la sécu je verai plus tard, deja comprendre la théorie "brute".

    Le site n'est pas destiné à être mis en ligne...pour le moment :)
     
  13. UsagiYojimbo
    UsagiYojimbo WRInaute accro
    Inscrit:
    23 Novembre 2005
    Messages:
    11 969
    J'aime reçus:
    121
    Y'a pas de session_start avant le print_r ?
     
  14. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Bonjour
    Je me trompe peut etre, mais il semble y avoir un souci de logique dans ton code de vérification login / password
    Code:
    $login = $_POST['login'];
    $pwd = $_POST['pwd'];
    
    jusque là presque ok, sauf que tu n'as pas vérifié que les variables existent et soient renseignées

    Code:
    $sql = "SELECT * FROM profils WHERE USERNAME='" . $login . "' AND MDP='" . $pwd . "';"; //selection du compte depuis la DB
    $resultat = mysql_query($sql);
    $ligne = mysql_fetch_array($resultat, MYSQL_ASSOC);
    
    $login_valide = $ligne['USERNAME'];
    $pwd_valide = $ligne['MDP'];
    
    donc ici forcement $pwd_valide== $pwd == $_POST['pwd'] et forcement $login_valide== $login == $_POST['login'], vu que ce sont les conditions exprimées dans ta requête SELECT


    Code:
    if (isset($_POST['login']) && isset($_POST['pwd'])) {
    
    ca c'est à faire avant de lancer la requete, sinon erreurs SQL en vue :)


    Code:
    if ($login_valide == $_POST['login'] && $pwd_valide == $_POST['pwd']) { //demarrage session
    

    ce sera toujours valide, étant donné que ce sont forcément les mêmes valeurs (cf plus haut)


    Mon conseil :
    - verification que les login & pwd sont renseignées; sinon message d'erreur
    - requete SQL sur la ligne basée sur le login seul - Si pas de résultat, connexion interdite
    - stockage dans une variable de la valeur du pwd associée au login dans la base
    - si il est identique au pwd envoyé par le formulaire, là tu connectes.

    Et bien sur, sécuriser les variables récoltées du formulaire pour éviter les injections et autres tentatives de crackage :)
     
  15. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Exemple d'injection sur ton code :

    J'indique, dans le formulaire, pour le login, l'expression suivante :

    test' OR 1=1"; et un mot de passe bidon

    ce qui me fera le traitement suivant :

    $sql = "SELECT * FROM profils WHERE USERNAME='test' OR 1=1"; ' AND MDP='bidon';";

    et ensuite une requete sql
    SELECT * FROM profils WHERE USERNAME='test' OR 1=1;

    ce qui est toujours vrai (1 est toujours égal à 1) donc je me connecte à coup sur.
     
  16. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Euh non en fait, n'importe quoi, mon dernier post n'est pas vrai. J'peux pas éditer, si quelqu'un veut le supprimer :)
     
  17. user2home
    user2home WRInaute occasionnel
    Inscrit:
    19 Décembre 2007
    Messages:
    251
    J'aime reçus:
    0
    Bonjour, après encore quelques heures mon script semble fonctionner, mon soucis viens uniquement de la connexion à présent.
    J'ai utilisé le script de http://www.lephpfacile.com/cours/18-les-sessions#h2 comme base que j'ai modifié :wink:

    Lorsque je me connect avec mon nom d'utilisateur et mon mot de passe, après avoir validé la page ce recharge.... mais je ne suis toujours pas connecté .... j'ai de nouveau ma fenetre qui me demande mon identifiant et mon mot de passe !

    La je ne vois pas du tout ce qui pourrai me faire ce soucis..... :?

     
  18. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Est-ce que tu sais lire un code ? Pas dans le sens propre, mais transformer le code un texte humainement compréhensible.

    Exemple de traduction de ton code :
    • inclure « '../../cfg/connexion.cfg.php' » (implique de transformer le code de ce fichier et de le placer à la place de cette ligne)
    • définir $login et $pwd en utilisant $_POST['login'] et $_POST['pwd']
    • sélection du profil dans la BDD en utilisant ces variables
    • définir $login_valide et $pwd_valide avec $ligne['USERNAME'] et $ligne['MDP']
    • si $_POST['login'] et $_POST['pwd'] existent
      • si $login_valide == $_POST['login'] et $pwd_valide == $_POST['pwd']
        • démarrer la session
        • définir $_SESSION['login'] et $_SESSION['pwd'] avec $_POST['login'] et $_POST['pwd']
        • redirection vers « ../../ »
      • sinon
        • écrire « Veuillez saisir un nom d'utilisateur valide »
    • sinon
      • écrire « Les variables du formulaire ne sont pas déclarées. »

    Tu ne vois pas un (même plusieurs d'ailleurs) problème de logique ?
    La programmation est avant tout de la logique, où il faut faire les choses le plus simplement possible (avec sécurité). Sans logique, il est dur d'avancer.
     
  19. nickargall
    nickargall WRInaute accro
    Inscrit:
    13 Juin 2005
    Messages:
    6 601
    J'aime reçus:
    4
    Eh copieur, c'est ce que je disais dans la page précécentde :mrgreen:
    ok je :arrow:
     
  20. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Je n'ai pas parcouru toutes les messages ;)
     
  21. user2home
    user2home WRInaute occasionnel
    Inscrit:
    19 Décembre 2007
    Messages:
    251
    J'aime reçus:
    0
    Cela te donne une réponse, ton message est limite insultant, ca approche le statut de la débilité la manière dont tu l'exprime. Et pour une fois je savais déjà tout ce que tu as marqué dans ton intervention.

    Je remercie les précédentes intervention qui m'ont permis de résoudre mon soucis ainsi que ce post ( http://www.lephpfacile.com/cours/18-les-sessions ) fort utile pour comprendre la logique des session.

    Cordialement

    EDIT: Je suis à l'écoute des plus sages mais ta façon de dire ca est pleine d'arrogance donc pour ton information

    On appel ca de l'algorithmique
     
  22. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Non mais ne t'emballe pas. Combien de personne s'aventure dans la programmation PHP ne prenant pas réellement le langage au sérieux du fait de son fort rapprochement avec la conception de site web.

    Le PHP est un langage de programmation peut-être simple à apprendre, mais capable du meilleurs comme du pire. Et si l'on ne maitrise pas celui-ci, on se retrouve avec des machines zombies grâce au crackage de site web.

    Ma question était tout à fait sérieuse. Ce n'est pas parce que la plupart du temps on la sort pour se foutre du monde qu'on ne peut pas la poser sérieusement.

    Personnellement, l'algorithmique (sur papier par exemple), je ne le fait jamais, car je n'en ai pas besoin (elle ne t'apprend strictement rien). Mais certaines personnes ont moins de « logique » et partent souvent dans un truc compliqué et peu compréhensible. Et ton code (de ton poste précédent) est tout à fait un code sans logique. Tu veux que je te le dise comment ?

    Je pourrai te pondre le code tout fait, mais ça ne t'apprendrai rien.

    J'ai pris du temps à écrire mon poste, tu penses réellement que j'aurai perdu autant de temps rien que pour me la jouer ? J'ai autre chose à faire.

    Montre nous ton code final, parce que si tu as laissé la plupart du code présent dans ton poste, tu risques d'avoir quelques surprises.

    Sur ce, tu le prends comme tu veux mais c'est hélas la réalité des choses. Certains ton données des informations importantes (notamment les injections SQL) et tu ne les as pas pris en compte.
     
  23. lunicrea
    lunicrea WRInaute occasionnel
    Inscrit:
    30 Août 2010
    Messages:
    465
    J'aime reçus:
    1
    Salut !

    C'est pas juste un problème de quiproquo au final ? Car sur un forum, mise à part les smiley, le ton est parfois complexe à déceler et on peut très facilement prendre un message comme ironique, voir agressif, alors que c'était pas du tout le but du posteur ...

    Bref, Blount n'a pas peut-être pris de gants pour dire ce qu'il pensait mais sur le fond, je pense que tu (user2home) devrais prendre en considération ce qui a été dit ;)
     
  24. user2home
    user2home WRInaute occasionnel
    Inscrit:
    19 Décembre 2007
    Messages:
    251
    J'aime reçus:
    0
    J'ai tout lus, j'ai pris ce qui pouvait me faire avancer.

    Vous postez mon code finale ne pourrai en rien faire avancer ma situation, je suis encore en apprentissage. Mon code ne peut pas être parfait du premier coup, un jour j'aurai surement la prétention de déballer mon code en public et de proposer mon aide! Pour le moment je pense pas être qualifié pour ca :mrgreen:


    Sans aucun rancune merci à tous :)
     
  25. Blount
    Blount WRInaute impliqué
    Inscrit:
    18 Novembre 2010
    Messages:
    701
    J'aime reçus:
    0
    Bin justement, montrer ton code n'a pas pour but de te dire que t'es une daube en programmation, mais te signaler les erreurs que tu fais. Les bonnes pratiques doivent être apprises dès le début, sinon, on prend l'habitude de faire avec nos erreurs et il en devient plus dur de changer.
     
Chargement...
Similar Threads - PHP SQL finir Forum Date
Stocker dans des variables php les fonctions MySql Développement d'un site Web ou d'une appli mobile 2 Février 2019
PHP : script pour mettre catalogue xml clickbank dans mysql Développement d'un site Web ou d'une appli mobile 6 Décembre 2017
[PHP/MySQL] Choix du moteur MyISAM ou InnoDB ? Développement d'un site Web ou d'une appli mobile 14 Janvier 2017
PHP -Problème retraitement données Mysql avant envoit dans un tableau array Développement d'un site Web ou d'une appli mobile 28 Décembre 2016
PHP quelle couche d'abstraction MySQL ? Développement d'un site Web ou d'une appli mobile 9 Décembre 2016
Besoin d'aide pour requête SQL PHP Développement d'un site Web ou d'une appli mobile 12 Novembre 2016
Evolution Php Mysql, nouvelles régions Développement d'un site Web ou d'une appli mobile 3 Novembre 2016
[php/mysql] Eviter de faire 20 requêtes pour un affichage Développement d'un site Web ou d'une appli mobile 19 Janvier 2016
Tableau PHP a partir de MySQL Développement d'un site Web ou d'une appli mobile 5 Décembre 2015
problème PHP/Mysql Développement d'un site Web ou d'une appli mobile 29 Octobre 2015
Tutos pour installer elacticsearch sous debian + php/mysql Développement d'un site Web ou d'une appli mobile 17 Août 2015
Vieilles versions de PHP et mySql, faut-il changer ? Administration d'un site Web 28 Mars 2015
PHP SQL tri Gros tri et algorithme Développement d'un site Web ou d'une appli mobile 16 Novembre 2014
Messagerie interne PHP/MYSQL Développement d'un site Web ou d'une appli mobile 4 Novembre 2014
Condition mysql/php Développement d'un site Web ou d'une appli mobile 12 Mai 2014
Evénements avec dates récurrentes (Php/Mysql) Développement d'un site Web ou d'une appli mobile 23 Avril 2013
Problème de vérification PHP/MySQL Développement d'un site Web ou d'une appli mobile 30 Mars 2013
Probleme avec Script PHP pour remplir mysql avec un fichier Excel Développement d'un site Web ou d'une appli mobile 13 Février 2013
Télécharger les images dans une base MySQL avec PHP Sous WordPress Développement d'un site Web ou d'une appli mobile 21 Décembre 2012
Ingénieur PHP/MYSQL - Conception / développement Développement d'un site Web ou d'une appli mobile 15 Septembre 2012