Bablieh

01 Mai 2021 à 17:40 (Édité)

57

Résolu

Problème BDD

Bonjour,


Cela fait une bonne journée que je rencontre un problème avec mon site.


Voici où est-il stocké :



(Chemin : C:\MAMP\htdocs\bd)


Voici ce qu'il y a dans mon code :


connexionDB

<?php
// Déclaration d'une nouvelle classe
class connexionDB {
private $host = 'localhost'; // nom de l'host
private $name = 'asomba'; // nom de la base de donnée
private $user = 'root@localhost'; // utilisateur
private $pass = 'root'; // mot de passe
//private $pass = ''; // Ne rien mettre si on est sous windows
private $connexion;

function __construct($host = null, $name = null, $user = null, $pass = null){
if($host != null){
$this->host = $host;
$this->name = $name;
$this->user = $user;
$this->pass = $pass;
}
try{
$this->connexion = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->name,
$this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8',
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}catch (PDOException $e){
echo 'Erreur : Impossible de se connecter à la BDD !';
die();
}
}

public function query($sql, $data = array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
return $req;
}

public function insert($sql, $data = array()){
$req = $this->connexion->prepare($sql);
$req->execute($data);
}
}

// Faire une connexion à votre fonction
$DB = new connexionDB();
?>


index.php

<?php
&#65279;// Permet de savoir s'il y a une session.
&#65279;// C'est-à-dire si un utilisateur s'est connecté à votre site
session_start();

// Fichier PHP contenant la connexion à votre BDD
&#65279;include('bd/connexionDB.php');
?><!DOCTYPE html>
<html>
  &#65279;<head>
    &#65279;<meta charset="utf-8"/>
    &#65279;<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
  &#65279;  <title>Accueil</title>
  </head>
  &#65279;<body>
    &#65279;<h1>Mon site</h1>
&#65279;    <?php
      if(!isset($_SESSION['id'])){ // Si on ne détecte pas de session alors on verra les liens ci-dessous
&#65279;    ?>
      <a href="inscription.php">Inscription</a> <!-- Liens de nos futures pages -->
      &#65279;<a href="connexion.php">Connexion</a>
      <a href="motdepasse.php">Mot de passe oublié</a>
    <?php
        }else{ // Sinon s'il y a une session alors on verra les liens ci-dessous
    &#65279;?>
      &#65279;<a href="profil.php">Mon profil</a>
      &#65279;<a href="modifier-profil.php">Modifier mon profil</a>
      <a href="deconnexion.php">Déconnexion</a>
    &#65279;<?php
      } 
    ?>
  </body>
</html>


inscription.php

<?php
    session_start();
    include('bd/connexionDB.php'); // Fichier PHP contenant la connexion à votre BDD

    // S'il y a une session alors on ne retourne plus sur cette page
    if (isset($_SESSION['id'])){
        header('Location: index.php'); 
        exit;
    }

    // Si la variable "$_Post" contient des informations alors on les traitres
    if(!empty($_POST)){
        extract($_POST);
        $valid = true;

        // On se place sur le bon formulaire grâce au "name" de la balise "input"
        if (isset($_POST['inscription'])){
            $nom  = htmlentities(trim($nom)); // On récupère le nom
            $prenom = htmlentities(trim($prenom)); // on récupère le prénom
            $mail = htmlentities(strtolower(trim($mail))); // On récupère le mail
            $mdp = trim($mdp); // On récupère le mot de passe 
            $confmdp = trim($confmdp); //  On récupère la confirmation du mot de passe

            //  Vérification du nom
            if(empty($nom)){
                $valid = false;
                $er_nom = ("Le nom d' utilisateur ne peut pas être vide");
            }       

            //  Vérification du prénom
            if(empty($prenom)){
                $valid = false;
                $er_prenom = ("Le prenom d' utilisateur ne peut pas être vide");
            }       

            // Vérification du mail
            if(empty($mail)){
                $valid = false;
                $er_mail = "Le mail ne peut pas être vide";

                // On vérifit que le mail est dans le bon format
            }elseif(!preg_match("/^[a-z0-9\-_.]+@[a-z]+\.[a-z]{2,3}$/i", $mail)){
                $valid = false;
                $er_mail = "Le mail n'est pas valide";

            }else{
                // On vérifit que le mail est disponible
                $req_mail = $DB->query("SELECT mail FROM utilisateur WHERE mail = ?",
                    array($mail));

                $req_mail = $req_mail->fetch();

                if ($req_mail['mail'] <> ""){
                    $valid = false;
                    $er_mail = "Ce mail existe déjà";
                }
            }

            // Vérification du mot de passe
            if(empty($mdp)) {
                $valid = false;
                $er_mdp = "Le mot de passe ne peut pas être vide";

            }elseif($mdp != $confmdp){
                $valid = false;
                $er_mdp = "La confirmation du mot de passe ne correspond pas";
            }

            // Si toutes les conditions sont remplies alors on fait le traitement
            if($valid){

                $mdp = crypt($mdp, "$6$rounds=5000$macleapersonnaliseretagardersecret$");
                $date_creation_compte = date('Y-m-d H:i:s');

                // On insert nos données dans la table utilisateur
                $DB->insert("INSERT INTO utilisateur (nom, prenom, mail, mdp, date_creation_compte) VALUES 
                    (?, ?, ?, ?, ?)", 
                    array($nom, $prenom, $mail, $mdp, $date_creation_compte));

                header('Location: index.php');
                exit;
            }
        }
    }
?>
<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Inscription</title>
    </head>
    <body>      
        <div>Inscription</div>
        <form method="post">
            <?php
                // S'il y a une erreur sur le nom alors on affiche
                if (isset($er_nom)){
                ?>
                    <div><?= $er_nom ?></div>
                <?php   
                }
            ?>
            <input type="text" placeholder="Votre nom" name="nom" value="<?php if(isset($nom)){ echo $nom; }?>" required>   
            <?php
                if (isset($er_prenom)){
                ?>
                    <div><?= $er_prenom ?></div>
                <?php   
                }
            ?>
            <input type="text" placeholder="Votre prénom" name="prenom" value="<?php if(isset($prenom)){ echo $prenom; }?>" required>   
            <?php
                if (isset($er_mail)){
                ?>
                    <div><?= $er_mail ?></div>
                <?php   
                }
            ?>
            <input type="email" placeholder="Adresse mail" name="mail" value="<?php if(isset($mail)){ echo $mail; }?>" required>
            <?php
                if (isset($er_mdp)){
                ?>
                    <div><?= $er_mdp ?></div>
                <?php   
                }
            ?>
            <input type="password" placeholder="Mot de passe" name="mdp" value="<?php if(isset($mdp)){ echo $mdp; }?>" required>
            <input type="password" placeholder="Confirmer le mot de passe" name="confmdp" required>
            <button type="submit" name="inscription">Envoyer</button>
        </form>
    </body>
</html>


Lorsque j'essaye d'ouvrir mon code avec Chrome, aucune page ne s'affiche seulement du texte :



Pouvez-vous s'il-vous-plaît m'aider à trouver le problème ?

Je vous remercie d'avance.

Cette pub permet au site de vivre ...

6 commentaires

C'est vraiment sympa de ta part @Flomir


Avec grand plaisir j'arrive sous peu

Re @Bablieh,


Si tu veux, je te propose que tu ailles sur le Discord de Sitedudev, et que tu me ping,

je t'enverrai une invitation une fois que je t'ai vu 😀


Comme ça tu pourras m'envoyer en ZIP l'ensemble des fichiers de ton site, pour que j'y jette un coup d'œil 😉


Redis-moi.

Rien n'y fait malheureusement, j'ai pourtant suivi ton conseil @Flomir

Re @Bablieh 😀:


Je viens de trouver ton soucis, il est invisible, quand je dis invisible, c'est à l'œil nu regarde:



Dans ton code, il y a des espaces invisibles, donc c'est pour cela que ton navigateur interprète ton code comme un "TEXT" 😅,


Solution:

• Tu prends l'ensemble de ton code Inscription et tu le colles dans un formateur de code: par exemple celui-ci: freeformatter.com


Autre chose aussi:

• Pour éviter cette erreur, il faut télécharger le code, au lieu de le copier coller car cela peut créer des espaces invisibles

• Toutes tes pages doivent être sous l'extension .php, si tu veux éviter des erreurs plus tard 😁


Bon courage !

@Flomir 😃

Salut @Flomir


Je te remercie de m'avoir répondu aussi rapidement.


J'utilise d'ores et déjà Sublime Text, je pense que le soucis n'est pas là.

J'ai suivi tes conseils et modifié le fichier index.php mais cela ne marchait toujours pas.


J'ai donc modifié l'extension du dit fichier en : index.html et voici le résultat :



Cela a presque marché, le soucis étant que quand je sélectionne "Inscription" je me retrouve avec le code comme d'habitude :



Je tiens à préciser que MAMP est allumé (et que j'ai également essayé avec WAMP, rien n'y fait).

Hey @Bablieh !


J'ai édité ton topic car il posait problème.

J'ai remarqué un gros "bordel" dans ta page index ! C'est à cause de l'éditeur (IDE) que tu utilises.

Ton éditeurs affiche des caractères Unicode réels, donc il t'affiche des &#65279;


Solution:

• Utiliser un IDE comme:

=> Visual Studio Code

=> Sublime Text


Autre Problème:

• Dans ta page de connexion à la base de donnée, du doit enlever le password root en laissant un vide "" comme tu es sur Windows.

Voici ta page index modifié:

<?php
session_start();
// Fichier PHP contenant la connexion à votre BDD
include('bd/connexionDB.php');
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
    <title>Accueil</title>
 </head>
<body>
    <h1>Mon site</h1>
    <?php
        if(!isset($_SESSION['id'])){ // Si on ne détecte pas de session alors on verra les liens ci-dessous
    ?>
      <a href="inscription.php">Inscription</a> <!-- Liens de nos futures pages -->
      <a href="connexion.php">Connexion</a>
      <a href="motdepasse.php">Mot de passe oublié</a>
    <?php
    }else{ // Sinon s'il y a une session alors on verra les liens ci-dessous
    ?>
    <a href="profil.php">Mon profil</a>
    <a href="modifier-profil.php">Modifier mon profil</a>
    <a href="deconnexion.php">Déconnexion</a>
    
    <?php } ?>
  </body>
</html>
Cette pub permet au site de vivre ...