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 :

Formulaire envoyé seulement si vide


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 24
    Points : 13
    Points
    13
    Par défaut Formulaire envoyé seulement si vide
    Bonjour à tous !

    Je travaille sur un système d'authentification de base, mais je rencontre un problème que je n'ai jamais eu auparavant. Mon formulaire de connexion ne fonctionne que si un champs est remplie (également si les deux sont laissés vides). Si je remplie login et password, le formulaire me renvoie sur la même page (?p=accueil).

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <form method="post" action="?p=connexion"> 
    	<label for="login">Nom</label><input type="text" name="login" maxlength="20" id="login"/><br/>
    	<label for="password">Mot de passe</label><input type="password" name="password" id="password"/><br/><br/>
    	<input type="submit" value="CONNEXION" />
    </form>

    Est ce que vous avez une idée de pourquoi le formulaire ne fonctionne pas si les deux champs sont renseignés ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    si tu ne montres pas le script de TRAITEMENT, ça va être difficile à dire !

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Voici des précisions utiles en effet ^^

    Code php : 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
    (!empty($_GET['p'])) ? ($page_demandee = $_GET['p']) : ($page_demandee = null);
     
    echo 'La page demandée est : '.$page_demandee.'<br/>';
     
    /* Si aucun utilisateur connecté et que la page demandée est publique, on l'affiche */
    if(!isset($_SESSION['id']) && in_array($page_demandee, $public_pages))
    {
        require_once('Controleurs/' . $page_demandee . '.php');
    }
     
    /* Un utilisateur est connecté et la page demandée est autorisée aux membres */
    else if(!empty($_SESSION['id']) && in_array($page_demandee, $member_pages))
    {
        require_once('Controleurs/' . $page_demandee . '.php');
    }
     
    /* Dans tout les autres cas, on affiche l'accueil */
    else
    {
        require_once('Controleurs/accueil.php');
    }


    et le code de la connexion :

    Code php : 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
    if(!empty($_POST['login']) && !empty($_POST['password']))
    {
        $_SQL = SQL::getInstance();
     
        $req = 'SELECT id, login, password FROM member WHERE login = :login';
     
        $rep = $_SQL->prepare($req);
     
        $rep->execute(array(':login' => $_POST['login']));
     
        $resultat = $rep->fetchAll();
    	echo 'Requête en cours<br/>';
     
        if(count($resultat) == 1)
        {
    		echo "Requête effectuée, résultat trouvé<br/>";
            if(password_verify($_POST['password'], $resultat[0]['password']))
            {
    			echo 'Identifiants vérifiés<br/>';
                // We can store some specific data in SESSION to access it easily
                $_SESSION['id'] = $resultat[0]['id'];
     
                // Load all member data
                // It's supposed to be the only SQL job until the member ask for an action
                // other than just show some data
                $member = new Member($_SESSION['id']);
                $member->loadAccountDataFromMemberId();
     
                // Store the object in SESSION
                $_SESSION['data'] = $member;
     
                header('Location: index.php?p=accueil');
     
                exit();
            }
     
            header('Location: index.php?erreur=1');
     
            exit();
        }
     
     
        header('Location: index.php?erreur=1');
     
        exit();
    }

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($_POST['login']) && !empty($_POST['password']))
    1- Tu as plusieurs if dans le script :

    • mets des echo dedans pour savoir où passe le code,
    • et commente les header (pour éviter la redirection, et donc voir l'affichage des echo).


    2- $resultat = $rep->fetchAll(); :
    Pourquoi faire un fetchAll alors que tu n'attends qu'un seul résultat ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    --> je vais reprendre en effet le fetch que ce soit plus adapté

    --> en effet en enlevant les redirections ça va mieux !
    du coup j'obtiens une erreur qui me surprend car le code quasi identique marche sur un autre projet, et là ... non

    Deprecated: Non-static method Score::loadListFromMemberId() should not be called statically

    Dans la classe Member :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public function loadAccountDataFromMemberId()
        {
            $this->scores = Score::loadListFromMemberId($this->id);
            if(is_array($this->scores))
                return true;
            return false;  
        }

    Dans la classe score :

    Code php : 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
    	public function loadListFromMemberId($id)
    	{
            $_SQL = SQL::getInstance();
            $req = 'SELECT  s.id as s_id, 
    						s.valeur as s_valeur
                    FROM scoreMember sm JOIN score s ON  sm.idScore = s.id
                    WHERE sm.idScore = :id';
     
            $rep = $_SQL->prepare($req);
            $rep->execute(array(':id' => $id));
            $resultat = $rep->fetchAll();
            if(count($resultat) > 0)
            {
                $scores = array();
                $i = 0;
                foreach($resultat as $score)
                {
                    // We store basics data
                    $scores[$i] = new score($score['s_id']);
    				$scores[$i]->setValeur($score['s_valeur']);
                    ++$i;
                }
                return $scores;
            }
            return false; 		
    	}

    et c'est donc cet appel qui pose problème :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                $member = new Member($_SESSION['id']);
                $member->loadAccountDataFromMemberId();

    EDIT : Oui forcément sans oublier le static dans l'en tête de fonction c'est mieux ...

    EDIT 2 : Il y a un problème que j'ai du mal à comprendre.

    Fatal error: Uncaught PDOException: You cannot serialize or unserialize PDO instances

    Lors de la validation du formulaire, l'utilisateur est amené sur mon contrôleur de connexion :

    Code php : 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
    if(!empty($_POST['login']) && !empty($_POST['password']))
    {
        $_SQL = SQL::getInstance();
        $req = 'SELECT id, login, password FROM member WHERE login = :login';
        $rep = $_SQL->prepare($req);
        $rep->execute(array(':login' => $_POST['login']));
        $resultat = $rep->fetchAll();
        if(count($resultat) == 1)
        {
            if(password_verify($_POST['password'], $resultat[0]['password']))
            {
                // We can store some specific data in SESSION to access it easily
                $_SESSION['id'] = $resultat[0]['id'];
                // Load all member data
                // It's supposed to be the only SQL job until the member ask for an action
                // other than just show some data
                $member = new Member($_SESSION['id']);
                $member->loadAccountDataFromMemberId();
                 // Store the object in SESSION
                $_SESSION['data'] = $member;
                //header('Location: index.php?p=accueil');
                exit();
            }
            //header('Location: index.php?erreur=1');
            exit();
        }
        //header('Location: index.php?erreur=1');
        exit();
    }

    J'ai du coup commenté les redirections pour que l'erreur s'affiche.
    Je ne comprends pas comment résoudre le souci ><

Discussions similaires

  1. ne pas envoyer les données d'un formulaire si c' est vide
    Par petiflamand dans le forum Langage
    Réponses: 3
    Dernier message: 07/10/2017, 20h23
  2. Ne pas envoyer le formulaire si champs est vide.
    Par serv dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/12/2006, 14h39
  3. Formulaire envoyé plusieurs fois
    Par pierre50 dans le forum Langage
    Réponses: 4
    Dernier message: 29/03/2006, 20h11
  4. Réponses: 15
    Dernier message: 13/03/2006, 16h24
  5. Réponses: 5
    Dernier message: 06/11/2005, 11h26

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