Je ne comprends pas mon erreur ! [Résolu]

Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
Je ne comprends pas mon erreur car il n'y en n'a pas ! Mon code doit insérer un client dans une base de donnée. Si vous voyez une erreur(s) dites le moi !! je suis un peu perdu là :/

Mon code PHP

<?php
include "connexion.php";
$connexion = connexionBd();

if (isset($_POST['formulaire'])) {
    $nom = htmlspecialchars($_POST['nom']);
    $prenom = htmlspecialchars($_POST['prenom']);
    $adresse = htmlspecialchars($_POST['adresse']);
    $codepostal = htmlspecialchars($_POST['codepostal']);
    $ville = htmlspecialchars($_POST['ville']);
    $pays = htmlspecialchars($_POST['pays']);
    $tel = htmlspecialchars($_POST['tel']);
    $email = htmlspecialchars($_POST['email']);
    $email2 = htmlspecialchars($_POST['email2']);
    $password = sha1($_POST['password']); //Hachage du mot de passe avec sha1()
    $password2 = sha1($_POST['password2']);
    $civilite = htmlspecialchars($_POST['civilite']);
    if (!empty($_POST['nom']) AND !empty($_POST['prenom']) AND !empty($_POST['adresse']) AND !empty($_POST['codepostal']) AND !empty($_POST['ville']) AND !empty($_POST['pays']) AND !empty($_POST['tel']) AND ! empty($_POST['email']) AND ! empty($_POST['email2']) AND ! empty($_POST['password']) AND ! empty($_POST['password2']) AND !empty($_POST['civilite'])) {
        if ($email == $email2) {
            if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
                $reqemail = $connexion->prepare("SELECT * FROM client WHERE email = ?");
                $reqemail->execute(array($email));
                $emailexist = $reqemail->rowCount();
                if ($emailexist == 0) {
                    if ($password == $password2) {
                        $insert = $connexion->prepare("INSERT INTO client(email, mot_de_passe, civilite, nom, prenom, adresse, code_postal, ville, pays, telephone, img_client) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
                        $insert->execute(array($email, $password, $civilite, $nom, $prenom, $adresse, $codepostal, $ville, $pays, $tel));
                        $mesage = "Votre compte a bien été créé !";
                    } else {
                        $mesage = "Vos mots de passes ne correspondent pas !";
                    }
                } else {
                    $mesage = "Adresse email déjà utilisée !";
                }
            } else {
                $mesage = "Votre adresse email n'est pas valide !";
            }
        } else {
            $mesage = "Vos adresses email ne correspondent pas !";
        }
    } else {
        $mesage = "Tous les champs doivent être complétés !";
    }
}
?>



Mon code HTML

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8" />
        <link href="css/style.css" rel="stylesheet" type="text/css" />
        <title>SiteWebShop</title>
    </head>
    <body>
        <?php require "header.php"; ?>
        <section>
            <header><h2>Créer un compte</h2></header>
            <form id="creer-compte" method="POST" action="">
                <label for="email">E-mail : </label>
                <input type="text" id="email" name="email" required="required">
                <label for="email2">Confirmer votre E-mail : </label>
                <input type="text" id="email2" name="email2" required="required">
                <label for="password">Mot de passe : </label>
                <input type="password" id="password" name="password" required="required">
                <label for="password2">Confirmer votre mot de passe : </label>
                <input type="password" id="password2" name="password2" required="required">
                <select name="civilite" id="civilite" required="required">
                    <option value="monsieur">Mr</option>
                    <option value="madame">Mme</option>
                </select>
                <label for="nom">Nom : </label>
                <input type="text" id="nom" name="nom" required="required">
                <label for="prenom">Prénom : </label>
                <input type="text" id="prenom" name="prenom" required="required">
                <label for="adresse">Adresse : </label>
                <input type="text" id="adresse" name="adresse" required="required">
                <label for="codepostal">Code postal : </label>
                <input type="text" id="codepostal" name="codepostal" required="required">
                <label for="ville">Ville : </label>
                <input type="text" id="ville" name="ville" required="required">
                <label for="pays">Pays : </label>
                <input type="text" id="pays" name="pays" required="required">
                <label for="tel">Téléphone : </label>
                <input type="text" id="tel" name="tel" required="required">
                <br> <br>
                <input type="submit" name="formulaire" value="S'inscrire !">
            </form>
            <?php
                if(isset($mesage)) {
                    print_r($mesage);
                }
            ?>
        </section>
        <?php require "footer.php"; ?>
    </body>
</html>
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
13972
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 novembre 2019
417
1
Merci
« Bonjour », « merci » ou « s'il vous plait » sont essentiels à toute demande car ces mots marquent la politesse élémentaire et montrent le respect que tout demandeur devrait avoir envers les bénévoles qui animent ce forum.

Merci donc de reformuler correctement ta question.

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 71530 internautes nous ont dit merci ce mois-ci

Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
Bonjour, s'il vous plaît pouvez-vous m'aider car je ne comprends pas mon erreur dans mon code PHP. Mon code doit insérer un client dans une base de donnée. Si vous voyez une erreur(s) dites le moi, merci d'avance pour toute aide !
Commenter la réponse de Whismeril
Messages postés
27250
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 novembre 2019
5665
0
Merci
Bonjour,

L'insert comporte 11 champs et il n'y a que 10 values, différence img_client.
jee pee
Messages postés
27250
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 novembre 2019
5665 > Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
il ne faut pas indiquer le champ insert 10 colonnes, 10 ? et 10 values
Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
> jee pee
Messages postés
27250
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 novembre 2019
-
bah dans ma base de donnée il y a 12 valeur mais l'id est e auto-increment donc ce n'est pas grave mais la dernière colonne est img_client et elle a une valeur par défaut donc es ce que je dois mettre une valeur dans l'insert pour la dernière colonne ?
jee pee
Messages postés
27250
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 novembre 2019
5665 > Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
Je ne comprend pas ?
jee pee
Messages postés
27250
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 novembre 2019
5665 > Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
il ne faut pas indiquer le champ, insert 10 colonnes, 10 ? et 10 values
Commenter la réponse de jee pee
Messages postés
26769
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 novembre 2019
1880
0
Merci
Bonjour,

Il y a plusieurs soucis dans ton code.
- Déjà.. la fonction htmlspecialchar ne s'utiliser QUE pour l'affichage et en aucun cas avant d'insérer les données en BDD.

- La fonction rowCount en PDO ne doit pas s'utiliser sur une requête SELECT ( à la place on fera un FETCHALL puis un COUNT sur le résultat )

- Il faut activer l'affichage des erreurs PHP, activer les erreurs PDO et placer chaque requête dans un bloc try/catch

http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code


- Le SHA1 ne doit plus être utilisé pour gérer les password.
A la place on utilise la fonction php : password_hash
https://www.php.net/manual/fr/function.password-hash.php

Et pour finir... dans une requête préparée .. tu dois avoir autant de points d'interrogations que de variables envoyées dans ton execute.




Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
Merci pour ces conseils je ne suis qu'un étudiant je ne connais pas toutes les sécurité !
jee pee
Messages postés
27250
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
14 novembre 2019
5665 -
merci, je voulais écrire qu'il devrait y avoir une gestion des erreurs et code retour notamment derrière l'insert, mais je ne savais pas comment cela se fait.
Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
et es ce mieux de faire avec les ? ou un bindparam :variable ?
jordane45
Messages postés
26769
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 novembre 2019
1880 > Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
Le bindparam permet de t'assurer que la variable envoyée correspond au "type" attendu.
Un nombre.. une chaine de texte...

Mais perso.. je ne l'utilise quasiment jamais.
J'utilise, (selon que je m'attaque à une bdd Mysql ou une autre ).. soit les requêtes préparées avec les variables "nommées" .. soit les points d'exclamation;

Exemple de variables nommées :
//préparation de la requête et des variables
 $sql = "INSERT INTO matable (champ1,champ2)   VALUES (:valeur1,:autrevaleur)";

 $datas = array(':valeur1'=>$valeur1, ':autrevaleur'=>$toto);

//Execution de la requete
try{
  $requete = $bdd -> prepare($sql) ;
  $requete->execute($datas) ;
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}

Modaak
Messages postés
52
Date d'inscription
mercredi 30 mai 2018
Statut
Membre
Dernière intervention
12 novembre 2019
-
Ok ça marche ! merci pour ces conseils précieux !
Commenter la réponse de jordane45