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

PHP & Base de données Discussion :

Autorisation pour les formulaires


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Autorisation pour les formulaires
    bonjour

    je cherche à protéger mon formulaire de commentaires des entrées intepestives de pub et autres floodage. et dans cet optique, je souhaite ajouter une entrée "mot de passe" qui devra etre verifiée par rapport à la table "membres" (pour rappel, tout ce qui concerne les commentaires se trouvent dans la table "commentaires")
    j'ai lu quelques pages d'un livre et il aborde les AS (alias).
    je me susi dit qu'en utilisant un alias, je pourrait récupérer le mot de passe dans une table et le comparer à celui de l'autre par rapport au pseudo entré, mais je n'ai pas su faire correctement.
    puis j'ai tenté de prendre simplement le pass de la table "membres" et de la comprarer à l'entrée de l'utilisateur ....
    je n'y arrive pas où c'est une histoire de synthaxe/position du code...

    lien pour voir le résultat :

    http://symposion.fr/test_array.php

    je n'ai rien trouvé sur la toile ou sur le livre qui puisse m'aider (des explications simple que je puisse comprendre évidemment)

    apres plusieurs heures de tentative, je me heurte à un mur et je m'épuise en tachant de comprendre des choses qui ne sont pas expliquées

    que signifie une requete où il apparait ".... WHERE pseudo='.$pseudo.' ');

    il s'agit de requete qui pourrait peut-etre m'aider ?

    comment définit-on qu'un pseudo est tant une table et comment on le compare avec celui entré par l'utilisateur dans le formulaire et à quel moment doit-on faire cette comparaison dans le script ?

    je suis un peu perdu et je tiens à signaler quand meme que je suis un super novice en pdo et débutant en PHP.

    tout ce qui peut etre une évidence pour vous est un questionnement pour moi.

    j'adore apprendre et j'ai grandement besoin d'aide

    puis-je compter sur vous et votre aide ?

    je vous post ce que j'ai fait en dernier lieu dans mon script et je ne vois rien d'autre à faire meme si je ne cesse de chercher

    merci à vous

    ps : une autre cose que j'ai du mal à comprendre si PDOStatement est un objet que l'on utilise en php (une classe me semble-t-il...)

    quand doit-on utiliser PDOStatement->closeCursor ? je ne l'ai vu utilisé que pour des requête comportant un fetch() (ce qui me parait logique)

    est-ce qu'on l'utilise qua dans le cas de ces fetch() ?

    code :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    if(isset($_POST['submit'])){
     
     
     	//  $Jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");  
    	 // $Mois = array("","janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");  
    	 // $datefr = $Jour[date("w")]." ".date("d")." ".$Mois[date("n")]." ".date("Y").", ".date("H")." : ".date("i");
        $loggin =  $_POST['pseudo']; // htmlspecialchars ne sert à rien ici. Il ne faut l'utiliser que lorsqu'il y a une sortie de texte, pas une entrée. De plus, le "a écrit" est une donnée qui reviens donc elle aura sa place dans la boucle en bas
        $mess = $_POST['message']; // pareil
        $pass = $_POST['passwd'];
     
     
     
            // si tous les champs sont vides
            if(empty($_POST['pseudo']) OR empty($_POST['message']) OR empty($_POST['passwd'])){
                echo '<p class="vide">Un des champs est vide</p>';
            }
            // vérification d'un pseudo existant
                if(isset($_POST['pseudo']){
                try{
                $verif = $connexion->query('SELECT pseudo, pass FROM membres');
                $data = $verif->fetch();
                    if($data != $loggin){
                        echo 'vous devez être connecté(e) pour poster un commentaire';
                    }
                }
                catch(Exception $e){
                echo 'Erreur : '.$e;
                }
            }
     
            // si tout est ok
            else{
                try{
                // on définit les logins / paramètres de la base de donnée
                 $insertion_table = $connexion->prepare('INSERT INTO commentaires(pseudo, message,date_enregistrement) VALUES(:pseudo, :message,:date_enregistrement)')
                 or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
                 $insertion_table->execute(array('pseudo'=>$loggin, 'message'=>$mess, 'date_enregistrement'=>time())); // on éxécute la requete
                }
                catch(Exception $e){
                    echo 'problème d\'insertion dans la bdd : '.$e->getMessage();
                }
     
     
                try{
    		      $result= $connexion->query('SELECT * FROM commentaires ORDER BY date_enregistrement DESC'); // on séléctionne tous les champs de la table commentaires
                 while ($donnees = $result->fetch()){
                    echo '<div id="pseudo">';
                    echo '<div class="heure">'.date('l d m Y H:i', $donnees['date_enregistrement']).'</div>';
                    echo '<div class="nom">'.htmlentities($donnees['pseudo']).' a écrit : </div></div>';
                    echo '<div id="bloc_message">"'.nl2br(htmlentities($donnees['message'])).'"</div>';
                    // ici donc, on rajoute htmlentities (un dérivé de htmlspecialchars()) car cette fois ci, on sort le texte. De plus, on peut voir que " a écrit : " reviens car il sera rajouté à chaque passage de la boucle
                }
     
                }
                catch(Exception $e){
                    echo 'problème avec la requête d\'affichage : '.$e->getMessage();
                }
                $result->closeCursor();
        }
    }

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut aussi que tu apprennes SQL.

    Pour une authentification, on cherche s'il le coupe login/pass saisi dans le formulaire existe dans la base de données :

    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
    if(isset($_POST['submit'])){
            if(empty($_POST['pseudo']) OR empty($_POST['message']) OR empty($_POST['passwd'])){
                echo '<p class="vide">Un des champs est vide</p>';
            }
            else {
                  // préparation de la requête
                  $sth = $connexion->prepare('SELECT COUNT(*) FROM membres WHERE pseudo = :pseudo AND pass = :pass');
                  // execution avec les paramètres 
                  $sth->execute(array(':pseudo'=>$_POST['pseudo'], ':pass'=>$_POST['passwd']));
                  // s'il n'y a pas de résultat
                    if ($sth->fetchColumn() != 1) {
                        echo 'vous devez être connecté(e) pour poster un commentaire';
                    }
                    else {
                        // insertion du commentaire
                   }
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    ah je cherche ca depuis un moment mais sans comprendre en fait....
    je dois voir pour justement vérifier si une sesion existe parce que ca ne veut as dire qu'il est connecté s'il est dans la base... je me trompe ?

    merci encore

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu veux que les utilisateurs s'authentifient une seule fois et alors il te faut un mécanisme de session PHP
    Sinon ils saisissent leurs identifiants a chaque commentaire envoyé.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    justement je suis en train de chercher comment créer cette session...
    je dois les rediriger sur une page d'ouvertre de session ou bien je peux le faire en direct du script déjà écrit ?
    dsl je suis nul mais j'apprends déjà beaucoup en peu de temps grace au différents internaute et toi y compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Les données sont trouvées et on va chercher l'existence d'une Session
                    else { // si le pseudo est trouvé
                    	if (empty($_SESSION['pseudo'])) { //et que la session n'existe pas
        				echo 'ouverture de session';
    					}

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    question stupide :
    peut-on inverser pregmatch comme on le fait pour isset() ou empty() avec le "!" ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Non (il n'y a pas de question stupide)
    et oui, on peut.
    preg_match() retourne 1 si le pattern fourni correspond, 0 s'il ne correspond pas, ou FALSE si une erreur survient.
    Avertissement
    Cette fonction peut retourner FALSE, mais elle peut aussi retourner une valeur équivalent à FALSE.
    Veuillez lire la section sur les booléens pour plus d'informations.
    Utilisez l'opérateur === pour tester la valeur de retour exacte de cette fonction.
    Pour bien te former : Cours et tutoriels pour apprendre PHP.

Discussions similaires

  1. Classe utilitaire pour les formulaires
    Par sir_gcc dans le forum Zend_Form
    Réponses: 8
    Dernier message: 20/10/2007, 14h39
  2. crystal report pour les formulaires
    Par guitariste dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/07/2007, 10h28
  3. A propos de TriActif pour les formulaires
    Par Alain6121967 dans le forum IHM
    Réponses: 2
    Dernier message: 07/03/2007, 10h23
  4. [PHP-JS] PHP et JavaScript pour les formulaires
    Par Ylias dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 26/07/2006, 22h47
  5. Norme JavaScript pour les formulaire
    Par rdams dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/09/2005, 14h14

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