Bonsoir , je souhaite afficher le contenu d'une erreur en PHP dans une portion de code HTML mais je me suis cogner a plusieurs reprises XD pourriez-vous m'aidez??

// partie HTML
<body>

<?php

        if(!isset($erreur)){
            $contenu = "";
        }
        else{
            echo $contenu;
        }

?>

// infos de connexion partie php
<?php

if(!empty($login) && !empty($pass) && isset($login) && isset($pass)){
    $sql = $bdd->query('SELECT COUNT(*) FROM acces WHERE Pseudo="'.$login.'"AND Mot_de_passe="'.$pass.'"');
    $donnee = $sql->fetch();
    if($donnee[0]==1){
        session_start();
        $_SESSION['name']= $login;
        header('location:Plateforme_Etudiants.php');
        exit();
    }
    elseif($donnee[0] == 0){
        $erreur= '<div class="error">Nom d\'utilisateur ou mot de passe incorrect</div>';
        $contenu = $erreur;
        exit();

    }
    else{
        $erreur= "Plusieurs membres...";
        $contenu = $erreur;
        exit();

    }

}
else{
        $erreur = "Erreur de Saisie";
        $contenu = $erreur;
        exit();
    }

?>
</body>

17 réponses


popotte
Réponse acceptée

Alors déjà pour que ça fonctionne, il faut importer la partie PHP dans le fichier html avant la commande d'affichage
Ensuite niveau syntaxe y'a plusieur chose à changer :p
Et aussi la comande "exit()" sert a couper le script, tout ce qui se passe après le premier exit() ne sera pas lancé :X

Ensuite il faudrait utiliser des fonction sinon tu sera bloqué dans un casse tête pour reorganiser tes if elseif
Le top du top ça aurait été de faire des classes, mais on va rester en procédural pour rester simple ^^

HTML:

   <?php require('tonfichierphp.php') ?>

    <body>
        <?= $erreur ?> // Affiche $erreur
    </body>

PHP:

// D'abord on liste les erreurs possibles
$erreur = "";
$erreurs = {
    incorrect: '<div class="error">Nom d\'utilisateur ou mot de passe incorrect</div>';
    plusieursMembres: "Plusieurs membres...";
    erreurSaisie: "Erreur de Saisie";
}

// On met en place une function qui va checker que la saisie est bonne
function saisieOk()
{
    return !empty($login) && !empty($pass) && isset($login) && isset($pass)
}

// On fait une fonction qui servira a récupérer les données
function getDonnee()
{
    $sql = $bdd->query('SELECT COUNT(*) FROM acces WHERE Pseudo="'.$login.'"AND Mot_de_passe="'.$pass.'"');
    return $sql->fetch();
}

// Une fonction pour se connecter
function login()
{
    session_start();
    $_SESSION['name']= $login;
    header('location:Plateforme_Etudiants.php');
}

// le script commence ici, et on va utiliser les fonction qu'on a préparé plus haut
if (saisieOk()) {
    $donnee = getDonnee();

    switch ($donnee) {
        //Si le résultat de la donnée est 1, on lance le script qui est dans la fonction login
        case 1:
            login();
        break;

        // Si le resultat est 0, on définit $erreur en récupérant la valeur préparée plus haut
        case 0:
            $erreur = $erreurs->incorrect;
        break;

        // Si la réponse n'est ni 1 ni 0, on définit l'erreur
        default:
            $erreur = $erreurs->plusieursMembres;
    }
} else {
    // Si la saisie est incorrecte, on définit l'erreur
    $erreur = $erreurs->erreurSaisie;
}

Ca devrait fonctionner :)

God23
Auteur

merci ton explication etait superbe je peux aller travailler maintenant :)

Avec plaisir ;)

God23
Auteur

$erreurs = {
incorrect: '<div class="error">Nom d\'utilisateur ou mot de passe incorrect</div>';
plusieursMembres: "Plusieurs membres...";
erreurSaisie: "Erreur de Saisie";
}
tu vois a ce niveau on me signale une erreur je l'ai fait aujourd'hui car j'ai commencer a etudier le Javascript au niveau des "{" de $erreurs = {

Ah oui en js vanilla le json n'est pas supporté :x je suis habitué aux classes ^^'
Alors remplace le json d'erreurs par un tableau ["incorect" => blabla...] et erreurs['incorrect'] ça devrait etre bon ^^

God23
Auteur

regarde ce que j'ai fait :
$erreurs[
"incorrect: 'Nom d\'utilisateur ou mot de passe incorrect'",
"plusieursMembres: 'Plusieurs membres...'",
"erreurSaisie: 'Erreur de Saisie'",
];

God23
Auteur

ah oui j'ai meme pas fait ce que tu as dit

God23
Auteur

$erreurs= [
"incorrect" => 'Nom d\'utilisateur ou mot de passe incorrect',
"plusieursMembres" => 'Plusieurs membres...',
"erreurSaisie" => 'Erreur de Saisie'
];
maintenant il y'a d'autres erreurs en bas XD
la bdd n'est pas definie

alors pour l'erreur, en gros tu n'a pas definit $bdd x)

God23
Auteur

// On met en place une function qui va checker que la saisie est bonne
function saisieOk()
{
return !empty($login) && !empty($pass) && isset($login) && isset($pass);
}

// On fait une fonction qui servira a récupérer les données
function getDonnee()
{
$sql = $bdd->query('SELECT COUNT(*) FROM acces WHERE Pseudo="'.$login.'"AND Mot_de_passe="'.$pass.'"');
return $sql->fetch();
}

// Une fonction pour se connecter
function login()
{
session_start();
$_SESSION['name']= $login;
header('location:Plateforme_Etudiants.php');
}

// le script commence ici, et on va utiliser les fonction qu'on a préparé plus haut
if (saisieOk()) {
$donnee = getDonnee();

switch ($donnee) {
    //Si le résultat de la donnée est 1, on lance le script qui est dans la fonction login
    case 1:
        login();
    break;

    // Si le resultat est 0, on définit $erreur en récupérant la valeur préparée plus haut
    case 0:
        $erreur = $erreurs["incorrect"];
    break;

    // Si la réponse n'est ni 1 ni 0, on définit l'erreur
    default:
        $erreur = $erreurs["plusieursMembres"];
}

} else {
// Si la saisie est incorrecte, on définit l'erreur
$erreur = $erreurs["erreurSaisie"];
}

?>

God23
Auteur

voici ton code ou est ce que je devrais mettre la declaration :
"if(isset($_POST['name']) && isset($_POST['password'])){
$login = $_POST['name'];
$pass = $_POST['password'];
}
try
{
$bdd = new PDO('mysql:host=localhost;dbname=monappli;port=3308;charset=utf8','root','');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e)
{
die('Erreur : '. $e->getMessage("Echec de connexion a la bd"));
}"

Mmmmh dans la fonction getdonnee :D

  function getDonnee()
  {
    try
      {
          $bdd = new PDO('mysql:host=localhost;dbname=monappli;port=3308;charset=utf8','root','');
          $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      } catch (Exception $e) {
          die('Erreur : '. $e->getMessage("Echec de connexion a la bd"));
      }

      $sql = $bdd->query('SELECT COUNT(*) FROM acces WHERE Pseudo="'.$login.'"AND Mot_de_passe="'.$pass.'"');
      return $sql->fetch();
  }

(Se sera tellement plus simple à organiser quand tu vas commencer à apprendre la POO tu verra quand tu y seras x))

God23
Auteur

ca ne fonctionne toujours pas :(

Bon j'ai essayé de deviner l'erreur ça ne devait pas etre ça :/

tu peux envoyer ton erreur??

God23
Auteur

en fait voici tout le code PHP :

<?php
// D'abord on liste les erreurs possibles
$erreur = "";
$erreurs= [
"incorrect" => 'Nom d\'utilisateur ou mot de passe incorrect',
"plusieursMembres" => 'Plusieurs membres...',
"erreurSaisie" => 'Erreur de Saisie'
];

// On met en place une function qui va checker que la saisie est bonne
function saisieOk()
{
return !empty($login) && !empty($pass) && isset($login) && isset($pass);
}

// On fait une fonction qui servira a récupérer les données
function getDonnee()
{
if(isset($_POST['name']) && isset($_POST['password'])){
$login = $_POST['name'];
$pass = $_POST['password'];
}
try
{
$bdd = new PDO('mysql:host=localhost;dbname=monappli;port=3308;charset=utf8','root','');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (Exception $e)
{
die('Erreur : '. $e->getMessage("Echec de connexion a la bd"));
}
$sql = $bdd->query('SELECT COUNT(*) FROM acces WHERE Pseudo="'.$login.'"AND Mot_de_passe="'.$pass.'"');
return $sql->fetch();
}

// Une fonction pour se connecter
function login()
{
if(isset($_POST['name']) && isset($_POST['password'])){
$login = $_POST['name'];
$pass = $_POST['password'];
}
session_start();
$_SESSION['name']= $login;
header('location:Plateforme_Etudiants.php');
}

// le script commence ici, et on va utiliser les fonction qu'on a préparé plus haut
if (saisieOk()) {
$donnee = getDonnee();

switch ($donnee) {
    //Si le résultat de la donnée est 1, on lance le script qui est dans la fonction login
    case 1:
        login();
    break;

    // Si le resultat est 0, on définit $erreur en récupérant la valeur préparée plus haut
    case 0:
        $erreur = $erreurs["incorrect"];
    break;

    // Si la réponse n'est ni 1 ni 0, on définit l'erreur
    default:
        $erreur = $erreurs["plusieursMembres"];
}

} else {
// Si la saisie est incorrecte, on définit l'erreur
$erreur = $erreurs["erreurSaisie"];
}

?>

God23
Auteur

a l'execution ca renvoie toujours cecei peut importe que ce soit une erreur ou pas "$erreur = $erreurs["erreurSaisie"];"
et meme quand les donnees sont correctes le login ne marche pas :(

Ah okay! Ton saisieOk renvoie false parce que $login et pass ne sont pas définits dans la fonction qui vérifie :o

Essayes avec ça:

<?php
// D'abord on liste les erreurs possibles
$erreur = "";
$erreurs= [
"incorrect" => 'Nom d\'utilisateur ou mot de passe incorrect',
"plusieursMembres" => 'Plusieurs membres...',
"erreurSaisie" => 'Erreur de Saisie'
];

// On définit tout de suite tes variables
$login = $_POST['name'] ?? null;
$pass = $_POST['password'] ?? null;

// On met en place une function qui va checker que la saisie est bonne

// Comme ça ici $login et $pass ne seront plus null
function saisieOk($login, $pass)
{
    return !empty($login) && !empty($pass) && isset($login) && isset($pass);
}

// On fait une fonction qui servira a récupérer les données
function getDonnee($login, $pass)
{
    try {
        $bdd = new PDO('mysql:host=localhost;dbname=monappli;port=3306;charset=utf8','root','');
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (Exception $e) {
        die('Erreur : '. $e->getMessage("Echec de connexion a la bd"));
    }

    $sql = $bdd->query('SELECT COUNT(*) FROM acces WHERE Pseudo="'.$login.'"AND Mot_de_passe="'.$pass.'"');
    return $sql->fetch();
}

// Une fonction pour se connecter
function login($login)
{
    session_start();
    $_SESSION['name']= $login;
    header('location:Plateforme_Etudiants.php');
}

// le script commence ici, et on va utiliser les fonction qu'on a préparé plus haut

// Et du coup ce if arretera de renvoyer tout le temps false
if (saisieOk($login, $pass)) {
    $donnee = getDonnee($login, $pass);

    switch ($donnee) {
        //Si le résultat de la donnée est 1, on lance le script qui est dans la fonction login
        case 1:
            login($login);
        break;

        // Si le resultat est 0, on définit $erreur en récupérant la valeur préparée plus haut
        case 0:
            $erreur = $erreurs["incorrect"];
        break;

        // Si la réponse n'est ni 1 ni 0, on définit l'erreur
        default:
            $erreur = $erreurs["plusieursMembres"];
    }

} else {
    // Si la saisie est incorrecte, on définit l'erreur
    $erreur = $erreurs["erreurSaisie"];
}

echo $erreur;

En gros tu définit directement ta variable login et pass, dans tes fonction tu passes ton login et ton pass, et j'ai remplacé ton if isset par une ternaire ??, c'est mieux x)