Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aucune insertion dans la bdd

    13 mars 2024 à 13:45:55

    Bonjour,

    Mon formulaire ne s'insère pas dans la bdd et je n'arrive à comprendre d'où vient le problème. Merci d'avance pour ceux qui pourront m'aider

    <?php
    require_once ('bdd_connect.php');
    $response = $bdd->query('SELECT * FROM ficheidentite');
    $ficheidentite = $response->fetchAll();
    $response->closeCursor();
    
    $errors = [];
    
    if (!empty($_POST)) {
        // Validation des champs
        $nom = validateField('nom', '/^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,100}$/');
        $statut = validateField('statut', '/^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,50}$/');
        $siret = validateField('siret', '/^[0-9]{14}$/');
        $naf = validateField('naf', '/^[A-Z0-9]{5}$/');
        $creation = validateField('creation', '/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/\d{4}$/');
        $adresse = validateField('adresse', '/^[a-zA-Z0-9\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,200}$/');
        $cp = validateField('cp', '/^\d{5}$/');
        $ville = validateField('ville', '/^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,150}$/');
        $phone = validateField('phone', '/^0[1-9]([-. ]?[0-9]{2}){4}$/');
        $mail = validateField('mail', '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/');
        $gerant = validateField('gerant', '/^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,100}$/');
        $fax = validateField('fax', '/^0[1-9]([-. ]?[0-9]{2}){4}$/');
        $duree = validateField('duree', '/^\d+$/');
    
        // Si aucune erreur de validation, on insère dans la base de données
        if (empty($errors)) {
            $ficheidentite = $bdd->prepare("INSERT INTO ficheidentite (nom, statut, siret, naf, creation, adresse, cp, ville, phone, mail, gerant, fax, duree) VALUES (:nom, :statut, :siret, :naf, :creation, :adresse, :cp, :ville, :phone, :mail, :gerant, :fax, :duree)");
            $ficheidentite->execute(array(
                                            ':nom' => $nom,
                                            ':statut' => $statut,
                                            ':siret' => $siret,
                                            ':naf' => $naf,
                                            ':creation' => $creation,
                                            ':adresse' => $adresse,
                                            ':cp' => $cp,
                                            ':ville' => $ville,
                                            ':phone' => $phone,
                                            ':mail' => $mail,
                                            ':gerant' => $gerant,
                                            ':fax' => $fax,
                                            ':duree' => $duree));
            }
        }
    // Fonction de validation d'un champ
    function validateField($fieldName, $regex) {
        global $errors;
        if (isset($_POST[$fieldName])) {
            $value = $_POST[$fieldName];
            if (!preg_match($regex, $value)) {
                $errors[] = "Champ $fieldName invalide";
                return '';
            }
            return $value;
        } else {
            $errors[] = "Champ $fieldName non renseigné";
            return '';
        }
    }
    
    // Récupération des données après l'insertion
    $response = $bdd->query('SELECT * FROM ficheidentite');
    $ficheidentite = $response->fetchAll();
    
    ?>
    
    <!DOCTYPE html>
    <html lang="fr">
    
    <head>
        <meta charset="utf-8">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="../css/bootstrap.css">
        <link rel="stylesheet" href="../css/style.css">
        <link rel="stylesheet" href="../css/carousel.css">
        <title>Comptabilité</title>
        <script src="js/jquery.js"></script>
        <script src="js/bootstrap.min.js"></script>
    </head>
    <body>
    <?php
    require_once('menu.php');
    ?>
    <div id="ficheidentiteentreprise">
            <div class="container">
                <div class="row">
                    <div class="col-sm-12">
                        <h1 style="font-size:25px;text-align:center;color:black;">Fiche d'identité de votre entreprise</h1>
                        <form method="POST" action="ficheidentiteentreprise.php">
                            <label>Nom de votre entreprise :<input name="nom" id="nom" type="text"></label><br>
                            <label>Statut juridique :<input name="statut" id="statut" type="text"></label><br>
                            <label>Numéro siret :<input name="siret" id="siret" type="text"></label><br>
                            <label>Code NAF :<input name="naf" id="naf" type="text"></label><br>
                            <label>Date de création :<input name="creation" id="creation" type="date"></label><br>
                            <label>Votre adresse :<input name="adresse" id="adresse" type="text"></label><br>
                            <label>Code postal :<input name="cp" id="cp" type="text"></label><br>
                            <label>Ville :<input name="ville" id="ville" type="text"></label><br>
                            <label>Votre téléphone :<input name="phone" id="phone" type="text"></label><br>
                            <label>Votre fax :<input name="fax" id="fax" type="text"></label><br>
                            <label>Votre adresse mail :<input name="mail" id="mail" type="text"></label><br>
                            <label>Nom du gérant :<input name="gerant" id="gerant" type="text"></label><br>
                            <label>Durée de l'exercice comptable (en mois) :<input name="duree" id="duree" type="text"></label><br>
                            <label><input type="submit" value="Enregistrer"></label>
                        </form><br>
    
        <script type="application/javascript" src="js/jquery-3.3.1.min.js"></script>
        <script src="js/script.js"></script>
    </body>
    
    </html>
    



    • Partager sur Facebook
    • Partager sur Twitter
      13 mars 2024 à 18:29:42

      Bonjour, 

      Le PHP (testé vite fait avec ?nom= en GET) marche bien, peut-être qu'en essayant côté bdd qqch comme

       $ficheidentite->execute(array(
          ':nom' => $nom));
              echo "<pre>";
              print_r($ficheidentite->debugDumpParams());
              echo "</pre>";
          }

      ça donnerait une info sur la requête elle-même ?

      • Partager sur Facebook
      • Partager sur Twitter
        13 mars 2024 à 19:22:50

        Je regarde ça et je tiens au courant
        • Partager sur Facebook
        • Partager sur Twitter
          13 mars 2024 à 22:35:52

          Salut

          Est-ce que tu as bien activé l'affichage des erreurs de PHP ET de PDO si tu n'es pas en PHP plus récent que 7.4 (ou MySQLi et 8.0) ? Parce qu'une erreur à l'insertion devrait être signalée si ces conditions sont réunies… et tu devrais ainsi avoir plus d'informations sur pourquoi l'insertion ne se fait pas.

          • Partager sur Facebook
          • Partager sur Twitter
            14 mars 2024 à 9:49:17

            salut,

            Je suis en php 8

            <?php
            require_once('bdd_connect.php');
            
            if ($_SERVER["REQUEST_METHOD"] == "POST") {
                // Validation des champs
                $nom = validateField('nom', '/^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,100}$/');
                $statut = validateField('statut', '/^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,50}$/');
                $siret = validateField('siret', '/^[0-9]{14}$/');
                $naf = validateField('naf', '/^[A-Z0-9]{5}$/');
                $creation = validateField('creation', '/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/\d{4}$/');
                $adresse = validateField('adresse', '/^[a-zA-Z0-9\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,200}$/');
                $cp = validateField('cp', '/^\d{5}$/');
                $ville = validateField('ville', '/^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,150}$/');
                $phone = validateField('phone', '/^0[1-9]([-. ]?[0-9]{2}){4}$/');
                $mail = validateField('mail', '/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/');
                $gerant = validateField('gerant', '/^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ]{1,100}$/');
                $fax = validateField('fax', '/^0[1-9]([-. ]?[0-9]{2}){4}$/');
                $duree = validateField('duree', '/^\d+$/');
            
                // Si aucune erreur de validation, on insère dans la base de données
                if (empty($errors)) {
                try {
                    $ficheidentite = $bdd->prepare("INSERT INTO ficheidentite (nom, statut, siret, naf, creation, adresse, cp, ville, phone, mail, gerant, fax, duree) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
                    $ficheidentite->execute(array(
                        $nom,
                        $statut,
                        $siret,
                        $naf,
                        $creation,
                        $adresse,
                        $cp,
                        $ville,
                        $phone,
                        $mail,
                        $gerant,
                        $fax,
                        $duree));
                    $ficheidentite->closeCursor();
                    echo "Données insérées avec succès !";
                } catch (PDOException $e) {
                    echo "Erreur d'insertion : " . $e->getMessage();
                }
            }
            }
            // Fonction de validation d'un champ
            function validateField($fieldName, $regex) {
                global $errors;
                if (isset($_POST[$fieldName])) {
                    $value = $_POST[$fieldName];
                    if (!preg_match($regex, $value)) {
                        $errors[] = "Champ $fieldName invalide";
                        return '';
                    }
                    return $value;
                } else {
                    $errors[] = "Champ $fieldName non renseigné";
                    return '';
                }
            }
            ?>
            
            <!DOCTYPE html>
            <html lang="fr">
            
            <head>
                <meta charset="utf-8">
                <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <link rel="stylesheet" href="../css/bootstrap.css">
                <link rel="stylesheet" href="../css/style.css">
                <link rel="stylesheet" href="../css/carousel.css">
                <title>Comptabilité</title>
                <script src="../js/jquery.js"></script>
                <script src="../js/bootstrap.min.js"></script>
            </head>
            
            <body>
                <?php require_once('menu.php'); ?>
                <div id="ficheidentiteentreprise" class="container">
                    <div class="row">
                        <div class="col-sm-12">
                            <h1 style="font-size:25px;text-align:center;color:black;">Fiche d'identité de votre entreprise</h1>
                            <form method="POST" action="ficheidentiteentreprise.php">
                                <label>Nom de votre entreprise :<input name="nom" id="nom" type="text"></label><br>
                                <label>Statut juridique :<input name="statut" id="statut" type="text"></label><br>
                                <label>Numéro siret :<input name="siret" id="siret" type="text"></label><br>
                                <label>Code NAF :<input name="naf" id="naf" type="text"></label><br>
                                <label>Date de création :<input name="creation" id="creation" type="date"></label><br>
                                <label>Votre adresse :<input name="adresse" id="adresse" type="text"></label><br>
                                <label>Code postal :<input name="cp" id="cp" type="text"></label><br>
                                <label>Ville :<input name="ville" id="ville" type="text"></label><br>
                                <label>Votre téléphone :<input name="phone" id="phone" type="text"></label><br>
                                <label>Votre fax :<input name="fax" id="fax" type="text"></label><br>
                                <label>Votre adresse mail :<input name="mail" id="mail" type="text"></label><br>
                                <label>Nom du gérant :<input name="gerant" id="gerant" type="text"></label><br>
                                <label>Durée de l'exercice comptable (en mois) :<input name="duree" id="duree" type="text"></label><br>
                                <label><input type="submit" value="Enregistrer"></label>
                            </form>
                        </div>
                    </div>
                </div>
                <script type="application/javascript" src="js/jquery-3.3.1.min.js"></script>
                <script src="js/script.js"></script>
            </body>
            
            </html>
            

            Fichier de connexion à la BDD

            <?php
            try{
                $bdd=new PDO('mysql:host=localhost;dbname=pcg;charset=utf8', 'root','');
                $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// afficher les erreurs php
            }catch(Exception $e){
                die('Erreur :' . $e->getMessage());
            }
            ?>





            • Partager sur Facebook
            • Partager sur Twitter
              14 mars 2024 à 10:55:20

              Et est-ce que tu as bien les erreurs de PHP qui s'affichent ? Activer explicitement pour PDO comme tu l'as fait ligne 4 de bdd_connect.php, c'est bien, mais si PHP est muselé, ça ne sert à rien.

              Comment fais-tu pour vérifier qu'il n'y a aucune insertion en base, tu regardes avec phpMyAdmin ?

              Si jamais, try { … } catch (…) { … } n'est pas une manière d'activer l'affichage des messages d'erreur, c'est quelque chose qui permet de le personnaliser au besoin. En l'état, en plus, les lignes 2 et 5 à 7 du fichier de connexion tel que montré vont poser problème parce qu'en cas d'erreur à la connexion, on va afficher le message tel quel, mais surtout continuer à exécuter le reste du code comme si rien de problématique ne s'était passé.

              -
              Edité par Ymox 14 mars 2024 à 14:57:07

              • Partager sur Facebook
              • Partager sur Twitter
                14 mars 2024 à 14:26:58

                Je vais passer pour un brin têtu :-°mais je reviens avec mon bidule de 
                $ficheidentite->debugDumpParams()

                mais à mon sens ça pourrait aider à lever des doutes.

                avec juste le nom et le statut ça donne ça en résultat :

                SQL: [65] INSERT INTO ficheidentitewww (nom, statut) VALUES (:nom, :statut)
                Sent SQL: [65] INSERT INTO ficheidentitewww (nom, statut) VALUES ('jkyhf', 'ok')
                Params:  2
                Key: Name: [4] :nom
                paramno=-1
                name=[4] ":nom"
                is_param=1
                param_type=2
                Key: Name: [7] :statut
                paramno=-1
                name=[7] ":statut"
                is_param=1
                param_type=2

                en particulier cette ligne : Sent SQL: [65] INSERT INTO ficheidentitewww (nom, statut) VALUES ('jkyhf', 'ok')

                Suffirait de la lancer directement à partir de phpmyadmin ou autre pour voir si ça marche ; dans l'hypothèse où elle rentre, ça innocente la Db et le PHP, reste plus que la connexion. Et si ça marche pas, mysql devrait sortir un msg expliquant ce qui ne va pas (je penche pour la Db ou la connexion)

                • Partager sur Facebook
                • Partager sur Twitter

                Aucune insertion dans la bdd

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                • Editeur
                • Markdown