Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème php-SQL raquette avec un formulaire html

Sujet résolu
20 septembre 2019 à 18:29:57

bonjour je viens de crée une page ou les utilisateur peuvent s’inscrire mais avant de valider l'inscription je voudrait vérifier si l'adresse mail est pas déjà prise. 

J'ai donc un programme html avec un formulaire à remplir :

<!DOCTYPE html>
<html lang="fr">
	<head>
	    <meta charset="utf-8">
	    <title> Jerome GBZ </title>
	    <link rel="stylesheet" type="text/css" href="inscription.css" />
	    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	</head>

   <body>
       <section id="container-inscription">
	    <div class="titre">
		<h1> Crée votre identifiant </h1>
            </div>
            <form method="post" action="inscription-valide.php" name="Membres">
                <section id="infoperso1">
                    <class class="PreNom">
                        <input type="text" name="T2" id="name" placeholder="Prénom" required maxlength="120" />
                        <input type="text" name="T1" id="nom" placeholder="Nom de Famille" required >
                    </class>

                    <class class="Autres">
			<input type="tel" id="phone" name="phone" placeholder="06 00 00 00 00"> <br>

                        <input type="email" name="EM" id="idmail" placeholder="nom@exemple.fr" required/>
                        <h3> Cette adresse sera votre identifiant </h3>

			<input type="password" name="pass1" id="password1" placeholder="Mot de passe" onkeyup="checkPass();">
			<input type="password" name="pass2" id="password2" placeholder="Confirmer le mot de passe" onkeyup="checkPass();">

			<span id="Error-Password" class="Error-Password2"></span>
                    </class>

		    <class id="Boutons">
		        <p>
			   <input type="submit" value="Connexion">
			</p>
		    </class>
                </section>
            </form>
        </section>
    </body>
  </html>


Avec ça j'ai une base de donné pour récupérer toute les informations dans la BDD : Nom / Prénom / Email / Password ... 

Pour insérer les informations j'utilise un programme php qui permet de vérifier si l'utilisateur aurait pas utiliser un mail déjà stocker dans la BDD(l'email sert de id lors de la connexion). D’où mon appel à l'aide je n'arrive pas à faire le Select pour savoir cela.

mon programme php :

<!DOCTYPE html>
<html lang="fr">
<head>
  <title> Inscription Valide </title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>

<body>
    <?php
                /* RECUPERATION DONNEE */
            $T1 = htmlspecialchars($_POST['T2']);
            $T2 = htmlspecialchars($_POST['T1']);
            $phone = htmlspecialchars($_POST['phone']);
            $EMA = htmlentities($_POST['EM']);
            $pass = htmlspecialchars($_POST['pass1']);
            $pass2 = htmlspecialchars($_POST['pass2']);

                /* FORMULE */
            $bdd = new PDO('mysql:host=***********;dbname=***********;charset=utf8', '***********', '***********');
            $research = $bdd->prepare('SELECT count(Email)
                                       FROM   Membres
                                       WHERE  Email = \''.$EMA.'\' ');
            $research-> execute();

            if($research > 0){
              echo 'Email déjà utiliser vous pouvez vous <a href="Connexion.html"> connecter ici.</a> <br>';
              echo 'Si ce n\'est pas vous veuillez vous <a href="inscription.php"> s\'inscrire ici.</a>';

            } else if($research == 0){
              echo '
                            <h1> Bienvenue </h1>
                            <p>
                                Votre inscription a bien été faite, bienvenue parmi nous !
                                Maintenant que vous êtes membre vous pourrez donner votre avis dans la rubrique dédiée.
                            </p>


                        $IDMembres = uniqid();
                        $DateNow = date('d m Y - H:i');
                        $hashed_password = password_hash($_POST['pass1'], PASSWORD_DEFAULT);

                            /* BDD INSERT INTO */
                        $requette = $bdd->prepare('INSERT INTO Membres(IDMembres, Nom, Prenom, Telephone, Email, Password, Date_inscription)
                                              VALUES(:IDMembres, :Nom, :Prenom, :Telephone, :Email, :Password, :Date_inscription)');

                        $requette->execute(array(
                            'IDMembres' => $IDMembres,
                            'Nom' => $T1,
                            'Prenom' => $T2,
                            'Telephone' => $phone,
                            'Email' => $EMA,
                            'Password' => $hashed_password,
                            'Date_inscription' => $DateNow));
            }

      ?>

      <a href="/"> Retour à l'accueil </a>

  </body>
</html>





  • Partager sur Facebook
  • Partager sur Twitter
20 septembre 2019 à 18:30:52

Il te manque l'étape de fetch.

Reprends un cours parce qu'en plus ta requête préparée (le SELECT) est mal utilisée (et profites-en pour chercher comment activer les erreurs PDO/SQL). Le plus drôle, c'est que comme htmlspecialchars/htmlentities ne touche pas les ' par défaut et que c'est le délimiteur de ta chaîne SQL, il ne te sert strictement à rien (pire même en fait puisque tu dénatures tes données) : ça te vaut quand même une injection SQL ! La preuve qu'il ne faut pas utiliser n'importe quoi et que s'il y a bien un moyen pour éliminer toute injection SQL c'est de préparer (correctement) sa requête.

Et supprime ces htmlspecialchars/htmlentities, ce n'est pas là qu'il en faut !

Au passage, on n'est pas là pour jouer au tennis : c'est requête pas raquette.

-
Edité par julp 20 septembre 2019 à 19:44:46

  • Partager sur Facebook
  • Partager sur Twitter
21 septembre 2019 à 7:45:08

Bonjour,

Doublon

Les doublons nuisent au bon fonctionnement du forum et sont donc interdits. Si vous vous êtes trompé de section, il suffit de signaler votre sujet au staff pour qu'il le déplace au bon endroit.

Je vous invite à continuer la discussion sur l'autre sujet : https://openclassrooms.com//forum/sujet/formulaire-htmlvers-php

Je ferme ce sujet. 

  • Partager sur Facebook
  • Partager sur Twitter