BESOIN D'AIDE

Vandess

Vandess Le 3 août 2016 à 23:37 (Édité le 25 janvier 2019 à 17:52)

BONJOUR.
je me nomme Vandess. j'ai suivie votre tutoriel concernant la creation d'un espace membre en php que vous fait en trois parties. Au fait j'ai eu un probleme pendant la première partie et c'est ce qui fait que je n'arrive pas continuer pour suivre la deuxième partie.
Mon problème est que, si vous vous rappeller bien au niveau de la connexion entre le fichier ".php" et la base de données que on n'a créer dans wampserver sur "phpmyadmin". Quand vous avez fini de relier la base de donnée au fichier ".php", vous avez essayé de tester en mettant  << echo "ok"; >>. et quand vous avez cliqué sur  "je m'inscrit" sur votre navigateur il a affiché "ok". Moi quand je l'ai fait cela ne sais pas affiché et il n'ont pas affiché qu'il y avait un message d'erreur. je n'ai rien compris mais j'ai essayé de continuer jusqu'a ce que vous mettez les variables " $erreur; else ". Tous ces deux variables n'affichait pas leur message sur le navigateur. mais on affcihait pas egalement qu'il y avait une erreur. jusqu'a ce que on m'affiche une erreur de " else" sur la ligne 42 pourtant je ne vois d'erreur. donc je vous envoye mon fichier  ".php" pour que vous jetter un cout d'oeil la dessus. et m'aidez a resoudre ce problème.
ET si vous avez besoin d'autre information qui vont vous aidez a resoudre mon problème n'hesitez pas a me le demander

voicie le ficher
<?php
$bdd = new pdo('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_POST['forminscription']))
{
    $pseudo = htmlspecialchars($_POST['pseudo']);
   $Mail = htmlspecialchars($_POST['Mail']);
    $Mail2 = htmlspecialchars($_POST['Mail2']);
   $mdp = sha1($_POST['mdp']);
   $mdp2 = sha1($_POST['mdp2']);
   if(!empty($_POST['pseudo']) AND !empty($_POST['Mail']) AND !empty($_POST['Mail2']) AND !empty($_POST['mpd']) AND !empty($_POST['mdp2']))
   {
       $pseudolength =   strlen($pseudo);
       if($pseudolength <= 255)
       {
          if(filter_var($mail, FILTER_VALIDATE_EMAIL))
          {
          $reqmail = $bdd->prepare("SELECT * FROM membre WHERE mail =?");
          $reqmail->execute(array($mail));
          $mailexist = $reqmail->rowCount();
          if($mailexist == 0)
          {
          if($Mail == $Mail2)
          {
             if($mpd == $mdp2)
             {
                $insertmbr = $bdd->prepare("INSERT INTO membre(pseudo, mail, mot de passe) VALUES(?, ?, ?)");
                $insertmbr->execute(arry($pseudo, $mail, $mdp));
                $erreur = "votre compte a été bien crée !";
             }
             else
             {
          }      $erreur = "vos mots de passes ne correspondent pas !";
         }       }
             else
             {
                $erreur = "Adresse mail déja utilisée !";
             }
          else
          {
             $erreur = "vos adresses mail ne correspondent pas !";
          }
          else
          {
             $erreur = "votre adresse mail'est pas valide !";
          }
       }
       else
       {
          $erreur = "votre pseudo ne doit pas dépasser 255 carractères !";
       }
   } 
   else
   {
      $erreur = "tous les champs doivent être complétés !";
   }
   
}
?>
<!DOCTYPE html>
<html>
<head>
   <title>Vand Blog Chat</title>
   <meta charset="utf-8">
</head>
<body>
  <div align="center">
      <h2>INSCRIPTION</h2>
      <br /><br /><br />
      <form methode="POST" action="">
         <table>
           <tr>
             <td align="right">
               <label for="Pseudo"> Pseudo :</label>
            </td>
            <td>
               <input type="text" placeholder="votre pseudo" id="Pseudo" name="pseudo" value="<?php if(isset($pseudo)) { echo $pseudo; } ?>"
            </td>
           </tr>
           <tr>
             <td align="right">
               <label for="Mail"> Mail :</label>
            </td>
            <td>
               <input type="email" placeholder=" Votre Mail" id="Mail" name="Mail" value="<?php if(isset($Mail)) { echo $Mail; } ?>"/>
            </td>
            <tr>
             <td align="right">
               <label for="Mail2"> Confirmation Du Mail :</label>
            </td>
            <td>
               <input type="email" placeholder="confirmez votre Mail" id="Mail2" name="Mail2" value="<?php if(isset($Mail2)) { echo $Mail2; } ?>"/>
            </td>
           </tr>
            <tr>
             <td align="right">
               <label for="mdp"> Mot De Passe :</label>
            </td>
            <td>
               <input type="password" placeholder="Votre Mot De Passe" id="mdp" name="mdp">
            </td>
             <tr>
             <td align="right">
               <label for="mdp2"> Confirmation Votre Mot De Passe :</label>
            </td>
            <td>
               <input type="password" placeholder="confirmez votre Mdp" id="mdp2" name="mdp2">
            </td>
           </tr>
           <tr>
               <td></td>
               <td align="center">
                  <br />
                <input type="submit" name="forminscription" value=" S'inscrire"/>
               </td>
           </tr>
        </table>
      </form>
      <?php
      if(isset($erreur))
      {
         echo '<font color="red">'.$erreur."</font>";
      }
      ?>
  </div> 
</body>
</html>
TheFlameflo

TheFlameflo Le 3 août 2016 à 23:54

Salut !

J'ai trouvé quelques petites erreurs qu'il serait utile de corriger :
Ligne 2 : on instancie un objet PDO, si je me souviens bien, il est obligatoire de mettre PDO en majuscule.
Ligne 27 : il est écrit arry à la place de array.
Ligne 32 et 33 : les '}' n'ont pas leur place là. Il faut les place au dessus des else, ce qui devrait donner ceci (remplace le code correspondant) :
else
             {
               $erreur = "vos mots de passes ne correspondent pas !";
             }
             }
             else
             {
                $erreur = "Adresse mail déja utilisée !";
             }
             }
          else
          {
             $erreur = "vos adresses mail ne correspondent pas !";
          }
          else
          {
             $erreur = "votre adresse mail'est pas valide !";
          }
Ça devrait être fonctionnel, je n'ai pas indenté le code pour qu'il soit "beau".

Dernière petite remarque :
(je ne sais pas si c'est l'éditeur de code du site qui bug ou une erreur de ta part, mais je préfère prévenir. Ça aidera peut-être aussi d'autres utilisateurs)
Je te conseille fortement de t'habituer à indenter le code.
Premièrement, c'est beaucoup plus lisible pour toi et ceux qui t'aident et qui liront le code.
Deuxièmement, ce type d'erreur de if/else est facilement repérable et évitable.
Finalement, ça fait plus propre et on peut mieux se repérer.

Bonne chance pour la suite et j'espère t'avoir aidé !
TrecKo

TrecKo Le 4 août 2016 à 00:04

Hello !

Quand j'ai lu ton code j'ai vu une erreur que @TheFlameflo ne t'a pas dit, il s'agit de cette erreur
 if(!empty($_POST['pseudo']) AND !empty($_POST['Mail']) AND !empty($_POST['Mail2']) AND !empty($_POST['mpd']) AND !empty($_POST['mdp2']))
Ce code se trouve à la ligne 10. Lors de la vérification du mdp tu as marquer "mpd" au lieu de "mdp". Essai de corriger cela et ton code fonctionnera sûrement 😀

J'espère t'avoir aider et bonne chance pour la suite 😀
Ranarxhag

Ranarxhag Le 4 août 2016 à 00:05 (Édité le 4 août 2016 à 00:06)

OMG ce code ! 😮

Bon, comme l'a dit TheflameFlo, lorsqu'on instancie un objet, il est impératif de respecter les majuscules. C'est sensible à la casse. Ainsi, l'objet Pdo ne sera pas pareil que l'objet PDO.

L'indentation est quasiment obligatoire ! A peine on voit ton code, on a envie de laisser tomber. On à l'impression que tu fermes les accolades un peu partout juste pour faire genre.

Enfin, tu a fais je ne sais combien d'erreurs de frappe ! Attention !!!!

Alors pour mes conseils à moi, je te dirais de suivre les tutoriaux de façon instructive. Inutile de recopier du code que l'on ne comprend pas, ça sert à rien et on se retrouve avec des erreurs complètement idiotes. De plus, dès la première erreur, tu aurais dût t'arrêter et réfléchir à ce qui ne va pas. Les erreurs générées par PHP sont BIEN ASSEZ CLAIRES et ce n'est pas en rajoutant une variable ou une condition par-ci par-là qu'elle va disparaître.
TheFlameflo

TheFlameflo Le 4 août 2016 à 05:05 (Édité le 4 août 2016 à 06:58)

Salut !

J'ai pensé que te donner un exemple de code avec une bonne indentation pourrait peut-être t'aider.
J'ai pris une page d'inscription que j'ai écris il y a quelques temps (ne copie pas, il y a certaines choses qui pourrait causer des bugs) et que je crois avoir bien indenté.
if(isset($_SESSION['id']))
{
header('Location: index.php');
}
?>
<div class="wrap-body">
    <div class="body-index">
        <?php
if(isset($_POST['forminscription']))
{
    $pseudo = htmlspecialchars($_POST['pseudo']);
    $mail = htmlspecialchars($_POST['mail']);
    $mail2 = htmlspecialchars($_POST['mail2']);
    $mdp = sha1($_POST['mdp']);
    $mdp2 = sha1($_POST['mdp2']);

    if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
    {
        $pseudolength = strlen($pseudo);
        if($pseudolength <= 255)
        {
            if($mail == $mail2)
            {
                if(filter_var($mail, FILTER_VALIDATE_EMAIL))
                {
                    $reqmail = $bdd->prepare('SELECT * FROM espace_membre WHERE mail = ?');
                    $reqmail->execute(array($mail));
                    $mailexist = $reqmail->rowCount();
                    $reqpseudo = $bdd->prepare('SELECT * FROM espace_membre WHERE pseudo = ?');
                    $reqpseudo->execute(array($pseudo));
                    $pseudoexist = $reqpseudo->rowCount();
                    if($mailexist == 0 && $pseudoexist == 0)
                    {
                        if($mdp == $mdp2)
                        {
                        $keyLength = 18;
                        $key = "";
                        for($i=1;$i<$keyLength;$i++)
                        {
                            $key .= mt_rand(0,9);
                        }
                            
                        $header="MIME-Version: 1.0\r\n";
                            $header.='From:"MonSite"<monsite@outlook.fr>'."\n";
                            $header.='Content-Type:text/html; charset="ISO-8859-1"'."\n";
                            $header.='Content-Transfer-Encoding: 8bit';

                            $message='
                            <html>
                                <body>
                                    <div align="center">
                                        <a href="monsite.com/confirmation.php?pseudo='.urlencode($pseudo).'&key='.$key.'">Confirmez votre compte !</a>
                                    </div>
                                </body>
                            </html>
                            ';

                            mail($mail, "Confirmation de compte", $message, $header);
                            
                         $insertmbr = $bdd->prepare('INSERT INTO espace_membre(pseudo, mail, motdepasse, confirmkey) VALUES(?, ?, ?, ?)');
                        $insertmbr->execute(array($pseudo, $mail, $mdp, $key));
                            $erreur = "Votre compte a bien été créé !";
                            header('Location: index.php'); 
                        }
                        else
                        {
                            $erreur = "Vos mots de passes ne correspondent pas !";
                        }
                    }
                    else
                    {
                        $erreur = "Adresse mail déjà utilisée ! et/ou pseudo déjà utilisé !";
                    }
                }
                else
                {
                    $erreur = "Votre adresse mail n'est pas valide !";
                }
            }
            else
            {
                $erreur = "Vos adresses mail ne correspondent pas !";
            }
        }
        else
        {
            $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !";
        }
    }
    else
    {
        $erreur = "Tous les champs doivent être complétés !";
    }
}

Chaque fois qu'on ouvre un if, l'intérieur doit être "poussé" d'une tabulation de plus.
Par exemple :
if(maCondition)
{
   echo 'Texte';
   //tabulation
}
else
{
   echo 'Texte';
   //tabulation
}
Si tu ajoutes un autre if dans ton if, ça devient encore plus important d'indenter (je ne rajouterai pas les commentaires, je crois que tu as compris ! 😉
if(condition)
{
   if(autreCondition)
   {
      echo 'test';
   }
   else
   {
      echo 'autre test';
   }
}
else
{
   echo 'test';
}
Tu peux voir que si tout était collé à gauche ou que j'aurais sauté des tabulations, tout commence à aller dans tous les sens.

Perso, j'ai aussi été confronté à ce problème, qui m'a causé presque les mêmes soucis que toi, je te conseille Sublime Text que j'ai testé et qui offre une aide quand on tape des conditions, etc.
Teste en plusieurs et prend celui sur lequel tu es le plus à l'aise ! 😀

Bonne chance !
Vandess

Vandess Le 5 août 2016 à 01:39

SALUT

Vraiment merci les gars pour l'aide que vous m'apporter. Merci également pour les conseils j'en tiendrai compte merci. 
Je vais essayer de reprendre tout le tuto et j'en tiendrai compte de vos conseils.

VRAIMENT MERCI ENCORE POUR L'AIDE
TheFlameflo

TheFlameflo Le 5 août 2016 à 01:42

Je suis heureux, et j'imagine que les autres membres aussi, d'avoir pu t'aider !

N'oublie pas de passer le sujet en "Résolu". 😀
TheOldNoob

TheOldNoob Le 5 août 2016 à 08:33

Salut les Primdawan,

J'ai pas suivis se tuto de Prim, mais du coup, est-ce que le forum est fait avec se code? Parce que c'est pas du cout securisé. :(
Vandess

Vandess Le 5 août 2016 à 18:43

Salut les gars !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 j'ai lu vos reponses conseils et 'jai recris mon code paraport au problème que j'ai evoquer en tenant compte biensure de vos reponses et vos conseils. tout ces bien passer par contre il y a eu un peit problème au niveau de ma base de données.
je ne sais qu'est ce qui ce passe mais quand un membre s'inscrit, cela ne s'enregistre pas sur la base de données donc jetez un cout d'oeil sur mon code et les image de la base de données.

avant



après


<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_POST['forminscription']))
{
   $Pseudo = htmlspecialchars($_POST['Pseudo']);
   $Mail = htmlspecialchars($_POST['Mail']);
   $Mail2 = htmlspecialchars($_POST['Mail2']);
   $mdp = sha1($_POST['mdp']);
   $mdp2 = sha1($_POST['mdp2']);
   if(!empty($_POST['Pseudo']) AND !empty($_POST['Mail']) AND !empty($_POST['Mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
   {
        $Pseudolength = strlen($Pseudo);
      if($Pseudolength <= 255)
      {
              if($Mail == $Mail2)
              { 
                 if(filter_var($Mail, FILTER_VALIDATE_EMAIL))
                 {
                    $reqmail = $bdd->prepare("SELECT * FROM membre WHERE mail = ?");
                    $reqmail->execute(array($Mail));
                    $mailexist = $reqmail->rowCount();
                    if($mailexist == 0)
                    {
                            if($mdp == $mdp2)
                            {
                                 $insertmbr = $bdd->prepare("INSERT INTO membre(pseudo, mail, mot de passe) VALUES(?, ?, ?)");
                                 $insertmbr->execute(array($Pseudo, $Mail, $mdp));
                                 $erreur = "Votre compte a bien ete cree !";
                            }
                            else
                            {
                                $erreur = "Vos mots de passes ne correspondent pas !";
                            }
                        }
                        else
                        {
                           $erreur = "Adresse mail déja utilisée !";
                        }
                    } 
                    else
                    {
                       $erreur = "Votre adresse mail n'est pas valide !";
                    }  
              }
              else
              {
                 $erreur = "Vos adresses mail ne correspondent pas !";
              }
      }
      else
      {
         $erreur = "Votre Pseudo ne doit pas depasser 255 caractère !";
      }
   }
   else
   {
      $erreur = "tous les champs doivent être complétés !";
   }
}
?>
<html>
<head>
   <title>vand blog chat</title>
   <meta charset="utf-8">
</head>
<body>
    <div align="center">
         <h2>INSCRIPTION</h2>
         <br /><br />
         <form method="POST" action="">
              <table>
                  <tr>
                      <td align="right">
                           <label for="Pseudo">Pseudo :</label>
                      </td>
                      <td>    
                           <input type="text" placeholder="Votre Pseudo" id="Pseudo" name="Pseudo" value="<?php if(isset($Pseudo)) { echo $Pseudo; } ?>" />
                      </td>
                  </tr>
                  <tr>
                      <td align="right">
                           <label for="Mail">Mail :</label>
                      </td>
                      <td>    
                           <input type="email" placeholder="Votre Mail" id="Mail" name="Mail" value="<?php if(isset($Mail)) { echo $Mail; } ?>" />
                      </td>
                  </tr>
                  <tr>
                      <td align="right">
                           <label for="Mail2">confirmation du Mail :</label>
                      </td>
                      <td>    
                           <input type="email" placeholder="confirmez votre Mail" id="Mail2" name="Mail2" value="<?php if(isset($Mail)) { echo $Mail; } ?>" />
                      </td>
                  </tr>
                  <tr>
                      <td align="right">
                           <label for="mdp">Mot de passe :</label>
                      </td>
                      <td>    
                           <input type="password" placeholder="Votre mot de passe" id="mdp" name="mdp" />
                      </td>
                  </tr>
                  <tr>
                      <td align="right">
                           <label for="mdp2">confirmation du Mot de passe :</label>
                      </td>
                      <td>    
                           <input type="password" placeholder="confirmez Votre mdp" id="mdp2" name="mdp2" />
                      </td>
                  </tr>
                  <tr>
                       <td></td>
                       <td align="center">
                            <br />
                            <input type="submit" name="forminscription" value="S'incrire" />
                       </td>
                  </tr>      
              </table>
        </form>
        <?php
        if(isset($erreur))
        {
           echo  '<font color="red">'.$erreur."</font>";
        }
        ?>   
    </div>
</body>
</html>
MERCI.
TheOldNoob

TheOldNoob Le 5 août 2016 à 18:56

Dans ta table membre, ton champs mot de passe est pas bon, tu ne peu pas mettre d'espace. Tu doit mettre mot_de_passe.

Après, se code est une catastrophe en therme de securité 😀
TheFlameflo

TheFlameflo Le 5 août 2016 à 20:17

Salut !

@Vandess : J'ai relu ton code et je trouve que tu t'es amélioré ! C'est beaucoup plus lisible et beau. 😄

@TheHoldNoob :J'imagine que PrimFX l'a sécurisé de son côté, mais pourrais-tu expliquer pourquoi il n'est pas sécuritaire ?

Bonne chance pour la suite ! 😀
TheOldNoob

TheOldNoob Le 5 août 2016 à 20:42

Alors, bon, je suis pas un pro des fails XSS et des injections Sql, mais :
La limite du pseudo va posé problème et risque de cassé ton CSS si le mec décide d'avoir un pseudo de 250 caractères.
Le mot de passe n'a lui non plus aucune limite. Donc n'importe qui peu s'inscrire et mettre 1 ou A ou même un simple espace.
Après, le htmlentities() est mieux que  htmlspecialchars() je te laisse regardé la doc, j'ai plus la différence en tête (mais ça reste quand même sécuritaire)
Enfin, sha1 n'est pas le plus sécurisé des cryptage, je prefère de loin password_hash()
TheFlameflo

TheFlameflo Le 5 août 2016 à 21:50 (Édité le 5 août 2016 à 21:58)

Ah, je vois !

Mais, je pense, qu'il ne souhaitait pas ajouter du code inutile pour le fonctionnement du système et nous laisser ajouter nos propres contraintes selon notre site.
Cependant, ça aurait été pas mal qu'il y ait quand même une sécurité au niveau des mots de passes.

Sinon, je ne savais pas pour le htmlentities(). Je l'avais déjà vu à quelques endroits, mais je n'ai jamais pensé aller me renseigner.

EDIT : Il y a aussi une faille CSRF sur la page d'édition de profil (et les autres, mais c'est moins grave.). Il suffit de créer une page Javascript qui envoie, par clic sur un bouton ou avec $(document).ready(), un formulaire avec un mot de passe différent afin de récupérer le compte. On met le lien à quelque part, quelqu'un clique et son compte est récupéré. Cours sur la sécurisation des failles CSRF Tutoriel sur un sujet du forum
Merci de m'avoir informé ! 😀
TheOldNoob

TheOldNoob Le 5 août 2016 à 21:58

Dans le principe, plus il y a de contrainte, plus c'est sécurisé 😀

après le htmlspecialchars() fonctionne très bien.

Après, c'est un code qui fonctionne, qui est un très bonne entrainement (même si j'utilis pas du tout la même façon de codé mes contraintes).
Donc pour apprendre, c'est super 😀
Vandess

Vandess Le 6 août 2016 à 00:39

MERCI pour l'info.

Vraiment MERCI.
Vandess

Vandess Le 9 août 2016 à 12:26

Excuser les gars. 
Mais  j'aimerais fait un bloc de couleur horizontal. 
Comme celui de facebook et mettre egalement deux input type sur cette meme bande de couleur horizontal exactement comme celui de facebook. 
Et aussi. Comment avoir la bande de couleur horizontal noir du site primfx
Merci
TheOldNoob

TheOldNoob Le 10 août 2016 à 11:24

En gros, tu demande comment faire des barres de navigation?
Vandess

Vandess Le 10 août 2016 à 20:47

way un peu de ce genre. 
variment aidez j'en ai besoin
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte