Bonjour,

J'ai une question à propos de mon système de connection pour mes futurs membres.
Dans mon formulaire d'inscription j'ai réussit à gérer le problème avec des exit() même si c'est moche d'afficher qu'une phrase par page mais bon ce n'est pas grâve. Néanmoins pour le formulaire de connexion je souhaite juste que les erreurs s'affiche en dessous de l'input mais la avec le problème l'erreur ne s'affiche pas (il s'affiche quand je le laisse par default dans le code php en dessous du code html!).

Résultat du code actuel (lorsque je rentre un mot dans email) :

login.php

<form method="post" action="index.php">

        <fieldset>
        <legend>Connection : </legend>
        <p>
            <label>Email <input type="text" name="email" size="20" maxlength="20" tabindex="10" /></label>
            <br />
            <label>Password <input type="password" name="password" size="15" maxlength="15" tabindex="30" /></label>
        </p>
       <input type="submit" value="Se connecter" />
        </p>
      </fieldset>
</form>

sidebar-right.php

<?
require './connection/cnx.php';
require './connection/classdeux/analysedonnees.class.php';
require './connection/classdeux/traitementdonnees.class.php';

if(isset($_POST'email'])){
$Analyse = new AnalyseDonnees;
 $Analyse->VerifEmail($_POST'email']); 
 $Analyse->VerifPassword($_POST'password']); 
$Traitement = new TraitementDonnees;
$Traitement->VerifieDonnees($_POST'email'], $_POST'password']);
var_dump($_POST);
}
?>
 <div id="sidebar-right">
     <!-- // Espace de connection -->
<form method="post" action="index.php">

        <fieldset>
        <legend>Connection : </legend>
        <p>
            <label>Email <input type="text" name="email" size="20" maxlength="20" tabindex="10" /></label>
            <br />
            <label>Password <input type="password" name="password" size="15" maxlength="15" tabindex="30" /></label>
        </p> <input type="submit" value="Se connecter" />
        </p>
      </fieldset>
</form>
     <!-- // Newsletter -->
<? require 'newsletter.php'; ?>
</div>

analysedonnees.class.php

<? class AnalyseDonnees {
    private $email;
    private $password;

    public function VerifEmail($email){
                if (empty($email)){
            $error_email = 'veuillez ecrire un email';
            echo $error_email;
            return false;
             }else { return true;}
        }

    public function VerifPassword($password){
                if (empty($password)){
            $error_password = 'veuillez ecrire un password';
            echo $error_password;
            return false;
             }else { 
                echo 'vrai';
             return true;}
        }
    }

traitementdonnees.class.php

<? class TraitementDonnees {

    private $email;
    private $password;
    public function VerifieDonnees($email, $password){
    }
}

index.php

<?php
 session_start();
// instance PDO
 try {
    $PDO = new PDO('mysql:host=localhost;dbname=tuto2','root','');
    $PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
    $PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
 }catch(PDOException $e){
    echo 'Connection impossible a la base de donnee';
 }

require 'include.php';
include './body/header.php';
include './body/sidebar-left.php';
include './body/sidebar-right.php';
include './body/body.php';
include './body/footer.php';
?>
<h1>Session</h1>
<pre><? print_r($_SESSION); ?></pre>

10 réponses


Dans ta classe AnalyseDonnees, ajoute une variable publique " public $messages ".
Dans tes deux fonctions de vérifications, tu mettras donc :
$messages .= " ton message ... "; au lieu de tes variables error_mail et error_password
et pour afficher tes erreurs, tu n'auras juste qu'a appeler cette variable : $AnalyseDonnees->messages;

Une autre solution pourrait consister à contenir toutes tes variables erreurs dans un tableau
et à créer une fonction qui permette de mettre en forme tes messages d'erreurs.

mama78
Auteur

Merci de ta réponse,

j'ai fait ce que tu m'as dit mais les messages ne s'affichent pas c'est embettant j'ai essayé avec ou sans echo.

sidebar-right.php

<?
require './connection/cnx.php';
require './connection/classdeux/analysedonnees.class.php';
require './connection/classdeux/traitementdonnees.class.php';

if(isset($_POST'email'])){
$Analyse = new AnalyseDonnees;

$Traitement = new TraitementDonnees;
$Traitement->VerifieDonnees($_POST'email'], $_POST'password']);
var_dump($_POST);
}
?>
 <div id="sidebar-right">
     <!-- // Espace de connection -->
<form method="post" action="index.php">

        <fieldset>
        <legend>Connection : </legend>
        <p>
            <label>Email <input type="text" name="email" size="20" maxlength="20" tabindex="10" /></label>
            <br /><? $AnalyseDonnees->message_email; ?>
            <label>Password <input type="password" name="password" size="15" maxlength="15" tabindex="30" /></label>
            <br /><?= $AnalyseDonnees->message_password; ?>
        </p> <input type="submit" value="Se connecter" />
        </p>
      </fieldset>
</form>
     <!-- // Newsletter -->
<? require 'newsletter.php'; ?>
</div>

analysedonnees.class.php

<? class AnalyseDonnees {
    private $email;
    private $password;
    public $message_email;
    public $message_password;

    public function VerifEmail($email){
                if (empty($email)){
            $message_email = 'veuillez ecrire un email<br>';
            return false;
             }else { return true;}
        }

    public function VerifPassword($password){
                if (empty($password)){
            $message_password = 'veuillez ecrire un password<br>';
            return false;
             }else { 
             return true;}
        }
    }
    $AnalyseDonnees = new AnalyseDonnees();

A première vue, j'ai remarqué une erreur. Tu instancies ta classe dans une variable du nom de Analyse et non AnalyseDonnees comme tu cherches à l'appeler dans ta vue.

$Analyse->message_email; 
$Analyse->message_password;

Essaye de changer déjà cela

mama78
Auteur

Rebonjour, c'est vraiment bizarre car Analyse n'est pas reconnu j'ai essayé avec isset l'erreur ne se montre pu mais rien ne s'execute (aucune phrase d'erreur).

<?
require './connection/cnx.php';
require './connection/classdeux/analysedonnees.class.php';
require './connection/classdeux/traitementdonnees.class.php';

if(isset($_POST'email'])){
$Analyse = new AnalyseDonnees;
$Traitement = new TraitementDonnees;
$Traitement->VerifieDonnees($_POST'email'], $_POST'password']);
var_dump($_POST);
}
?>
 <div id="sidebar-right">
     <!-- // Espace de connection -->
<form method="post" action="index.php">

        <fieldset>
        <legend>Connection : </legend>
        <p>
            <label>Email <input type="text" name="email" size="20" maxlength="20" tabindex="10" /></label>
            <br /><? if (isset($Analyse->message_email)){ $Analyse->message_email; }; ?>
            <label>Password <input type="password" name="password" size="15" maxlength="15" tabindex="30" /></label>
            <br /><?= $Analyse->message_password; ?>
        </p> <input type="submit" value="Se connecter" />
        </p>
      </fieldset>
</form>
     <!-- // Newsletter -->
<? require 'newsletter.php'; ?>
</div>

Tu peux enlever tes isset car par défaut les variables erreurs sont vide s'il n'y a pas d'erreur. En revanche, si tu n'affiches pas ces variables, en effet, cela risque de ne rien t'afficher.

<label>Email <input type="text" name="email" size="20" maxlength="20" tabindex="10" /></label>
<br /><? echo $Analyse->message_email; ?>
<label>Password <input type="password" name="password" size="15" maxlength="15" tabindex="30" /></label>
<br /><? echo $Analyse->message_password; ?>

Aussi, tu n'utilises pas les attributs de ta classe mais créent de nouvelles variables. Apporte la correction suivante à ta classe :

<? class AnalyseDonnees {

    private $email;
    private $password;
    public $message_email;
    public $message_password;

    public function VerifEmail($email){
                if (empty($email)){
            $this->message_email = 'veuillez ecrire un email<br>';
            return false;
             }else { return true;}
        }

    public function VerifPassword($password){
                if (empty($password)){
            $this->message_password = 'veuillez ecrire un password<br>';
            return false;
             }else { 
             return true;}
        }
    }
mama78
Auteur

Salut l'ami, merci de ton aide!
j'ai bien mis les $this et afficher via echo (même si j'avais déjà afficher avec <?= ....)

un ptit screen des erreurs que j'avais déjà !!^^

En affichant la page tel qu'elle, il est normal qu'il y ait des erreurs. En revanche, as tu cliqué sur " se connecter " ?
Cela permettra à tes variables de formulaire d'exister et donc d'instancier ton objet par la même occasion qui ne l'est pas pour le moment ;)

mama78
Auteur

Re, les erreurs disparraissent (c'est normal) mais aucun message ne s'affiche ça commence grâve à me souler :x
je crois il n'y a pas de solution ..

Envoi moi tes fichiers a fdusautoir@hotmail.fr. Je te fais un retour d'ici ce soir

mama78
Auteur

merci beaucoup mon gars!!! je t'envoie sa