Je ne comprends pas mon erreur !

Résolu/Fermé
Utilisateur anonyme - Modifié le 9 nov. 2019 à 13:03
 Utilisateur anonyme - 9 nov. 2019 à 14:04
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>

3 réponses

Whismeril Messages postés 19027 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 24 avril 2024 931
9 nov. 2019 à 13:06
« 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.
1
Utilisateur anonyme
9 nov. 2019 à 13:10
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 !
0
jee pee Messages postés 39622 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 231
9 nov. 2019 à 13:07
Bonjour,

L'insert comporte 11 champs et il n'y a que 10 values, différence img_client.
0
Utilisateur anonyme
Modifié le 9 nov. 2019 à 13:18
bonjour, merci de m'avoir répondu mais je viens de corriger cette erreur et dans phpmyadmin l'insert ne marche pas ! dans ma base de donnée il y a une valeur par défaut pour img_client comment puis-je faire dans mon php ? il faut mettre une variable ou pas ?
0
jee pee Messages postés 39622 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 231 > Utilisateur anonyme
9 nov. 2019 à 13:16
il ne faut pas indiquer le champ insert 10 colonnes, 10 ? et 10 values
0
Utilisateur anonyme > jee pee Messages postés 39622 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024
9 nov. 2019 à 13:20
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 ?
0
jee pee Messages postés 39622 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 231 > Utilisateur anonyme
9 nov. 2019 à 13:42
0
Utilisateur anonyme
9 nov. 2019 à 13:44
Je ne comprend pas ?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
9 nov. 2019 à 13:47
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

https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

https://forums.commentcamarche.net/forum/affich-37584947-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.




0
Utilisateur anonyme
9 nov. 2019 à 13:50
Merci pour ces conseils je ne suis qu'un étudiant je ne connais pas toutes les sécurité !
0
jee pee Messages postés 39622 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 23 avril 2024 9 231
9 nov. 2019 à 13:51
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.
0
Utilisateur anonyme
9 nov. 2019 à 13:52
et es ce mieux de faire avec les ? ou un bindparam :variable ?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > Utilisateur anonyme
9 nov. 2019 à 13:56
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);
}

0
Utilisateur anonyme
9 nov. 2019 à 14:04
Ok ça marche ! merci pour ces conseils précieux !
0