Problème d'include

Résolu
Bonjour à tous, je suis en train d'apprendre le PHP pour un futur projet scolaire mais voilà un petit problème (parmi tant d'autres) me tracasse énormément, j'ai une erreur avec une include_once mais je n'arrive pas à la résoudre. J'utilise un design MVC qui est conseillé dans le cour de Mathieu Nebra.

Voilà ma page d'inscription:

<?php

//Connection base de donnée
include_once('modele/connexion_bdd.php');

if (!isset($_GET['section']) OR $_GET['section'] == 'inscription')
{
    include_once('controleur/inscription/inscription.php');
}


Le contrôleur:

 <?php
// Vérification de la validité des informations

// Verification du pseudo
if(isset($_POST['pseudo']))
{
    $_POST['pseudo'] = htmlspecialchars($_POST['pseudo']); // Contre XXS
    {
        if (preg_match("#^[a-zA-Z0-9._-]{5,25}$#", $_POST['pseudo']))
        {
            // C'est bon
        }
        else
        {
            $erreur = 'Votre pseudo n\'est pas valide ';
        }
    }
}

// Verification MDP
if (isset($_POST['password'], $_POST['password_confirmation']) AND $_POST['password'] != $_POST['password_confirmation'])
{
    $erreur = 'Les deux mots de passes ne correspondent pas.';
}
// Verification du mail

if(isset($_POST['mail']))
{
    $_POST['mail'] = htmlspecialchars($_POST['mail']); // Contre XXS

    {
        if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#",$_POST['mail']))
        {
            // C'est bon
        }
        else
        {
           $erreur = 'Votre email n\'est pas valide ';
        }
    }
}

// On verifie la longueur du mot de passe

if(isset($_POST['password']))
    {
        if (preg_match("#[.]{6,}#",$_POST['password']))
        {
            // C'est bon
        }
        else
        {
            $erreur = 'Votre mot de passe doit contenir au minimum 6 caractères ';
        }
    }

// On verigie qu'il n'y ai pas d'erreur et que les mdp sont égaux

if ((isset($_POST['pseudo'], $_POST['email'], $_POST['password'], $_POST['password_confirmation']))
    AND $_POST['password'] == $_POST['password_confirmation'] AND empty($erreur))
{
// Hachage du mot de passe
    $pass_hache = sha1($_POST['password']);

// Envoi à la base de donnée
include_once('modele/inscription/inscription.php');

$validation = ' Bravo' . $_POST['pseudo']. ',ton inscription est un succès';

}

if (isset($erreur))
{
    echo $erreur;
}


// On affiche la page

include_once('vue/inscription/inscription.php');
?>


Mon modèle:

<?php
$req = $bdd->prepare('INSERT INTO membres(pseudo, password, mail, date_inscription) VALUES(:pseudo, :password, :mail, CURDATE())');
$req->execute(array(
    'pseudo' => $pseudo,
    'password' => $pass_hache,
    'mail' => $mail));


La Vue:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>

</head>
<body>
<?php if (isset($erreur))
{ ?>

    <p>

        <strong><?php echo $erreur; ?></strong>

    </p>
    <br>
    <br>
<?php } ?>
<form action="controleur/inscription/inscription.php" method="post">

    <p>

        <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br />

        <label for="password">Password</label> :  <input type="password" name="pass" id="password" /><br />

        <label for="password">Vérification Password</label> :  <input type="password" name="password_confirmation" id="password_confirmation" /><br />

        <label for="mail">Email</label> :  <input type="email" name="mail" id="mail" /><br />

        <input type="submit" value="Envoyer" />

    </p>
</form>
</body>
</html>


Et l'erreur ce produit seulement quand j'envoie le formulaire:



Et enfin je vous donne l'organisation des fichiers:


Merci d'avance. :)

1 réponse

  1. Modérateur
    Bonjour,

    N'aurais tu pas écris VUE au lieu de vue dans le nom du répertoire ?

    1
    1. Non c'est bon sur un autre forum on m'a donné la solution. Dans mon formulaire j'aurai du marquer
      <form action="inscription.php" method="post">

      au lieu de:
      <form action="controleur/inscription/inscription.php" method="post">

      Comme ça il suit le les include_once et tout ce passe bien. En tout cas merci de ton commentaire :)
      0
    2. Modérateur
      Au passage, quelques bonnes habitudes à prendre :

      Pour ce qui est de l'écriture du code ... les blocs IF/ELSE .. s'écrivent de préférence comme ceci :
      if ($a === $b) {
           bar();
       } elseif ($a > $b) {
            $foo->bar($arg1);
       } else {
            BazClass::bar($arg2, $arg3);
       }
      

      => voir les normes PSR http://blog.ice-dev.com/post/2013/11/17/norme-psr-1-et-psr-2

      Mettre des IF ELSE ... quand seul le ELSE contient quelque-chose ne sert strictement à rien et alourdit ton code !

      Par exemple :
      if (preg_match("#^[a-zA-Z0-9._-]{5,25}$#", $_POST['pseudo']))
       {
           // C'est bon
       }
        else
       {
           $erreur = 'Votre pseudo n\'est pas valide ';
       }
      

      peut etre écrit plus proprement :
      if (! preg_match("#^[a-zA-Z0-9._-]{5,25}$#", $_POST['pseudo']))  {
          $erreur = 'Votre pseudo n\'est pas valide ';
       }
      


      voir même... en écriture TERNAIRE :

      
       $erreur = ! preg_match("#^[a-zA-Z0-9._-]{5,25}$#", $_POST['pseudo'])  ?  'Votre pseudo n\'est pas valide ' : NULL;
      
      


      On récupère proprement les variables AVANT de les utiliser
      par exemple .... au début de ton script .. tu écris :
      //récupération des variables
      $pseudo = isset($_POST['pseudo']) ? htmlspecialchars($_POST['pseudo']) : NULL;
      $password = isset($_POST['password']) ? $_POST['password'] : NULL;
      // etc...
      


      puis dans le reste de ton code... tu utilises directement ces variables :
      
       $erreur = ! preg_match("#^[a-zA-Z0-9._-]{5,25}$#", $pseudo)  ?  "Votre pseudo n'est pas valide " : NULL;
      
      
      0
    3. Merci c'est vraiment sympa de m'apporter ces conseils, je viens de commencer donc plus vite on prend de bonnes habitudes mieux c'est, je vais corriger tout ça :D
      0