IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

insertion de données d'un formulaire de contact dans une base de données [PDO]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut insertion de données d'un formulaire de contact dans une base de données
    Bonsoir. Je fais en ce moment un portfolio avec Bootstrap et en PHP. Dans ce portfolio, il y a une page de contact avec un formulaire de contact que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <?php
    include '_debut.inc.php';
     
    //algorithme permettant d'inserer dans la base de données les messages envoyés
    //Si les champs du formulaire de contact sont remplies, tu affectes dans la variable resultat les données saisies. La méthode insertion se chargera d'insérer dans la base de données les données saisies
    if (isset($_POST["email"]) && isset($_POST["tel"]) && isset($_POST["message"])) {
        $resultat = insertion($_POST["email"], $_POST["tel"], $_POST["message"]);
        /* if ($resultat == true) {
          $_SESSION["user"] = $_REQUEST["user"];
          $_SESSION["mdp"] = $_REQUEST["mdp"];
          } */
    }
    ?>
    <!DOCTYPE html>
    <html lang="fr">
        <head>
            <meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
            <meta name="description" content="">
            <meta name="author" content="">
            <link rel="icon" href="../../favicon.ico">
     
            <title>Portfolio de Honoré Rasamoelina</title>
     
            <!-- Bootstrap core CSS -->
            <link href="../../dist/css/bootstrap.min.css" rel="stylesheet">
     
            <!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
            <link href="../../assets/css/ie10-viewport-bug-workaround.css" rel="stylesheet">
     
            <!-- Custom styles for this template -->
            <link href="jumbotron.css" rel="stylesheet">
     
            <!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
            <!--[if lt IE 9]><script src="../../assets/js/ie8-responsive-file-warning.js"></script><![endif]-->
            <script src="../../assets/js/ie-emulation-modes-warning.js"></script>
     
            <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
            <!--[if lt IE 9]>
              <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
              <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
            <![endif]-->
        </head>
     
        <h1><center>Pour me contacter</h1></center>
    <div class="container">
        <h1><small>Pour me contacter, veuiller remplir ce formulaire</small></h1>
    </div>
    <div class="container">
        <?php if (isset($_POST["email"]) && (isset($_POST["tel"]) && (isset($_POST["message"])))): ?>
            <div class="alert alert-success" role="alert"><?php echo"Bravo, votre message a été envoyer à l'administrateur. Il vous répondra dans les plus brefs délai."; ?></div>
        <?php endif; ?>
        <?php if (!isset($_POST["email"]) && (!isset($_POST["tel"]) && (!isset($_POST["message"])))): ?>
            <div class="alert alert-danger" role="alert"><?php echo"Désolé mais votre message ne peut être envoyer car tous les champs ne sont pas rempli"; ?></div>
        <?php endif; ?>
    </div>
    <div class="container">
        <form method="POST">
            <div class="form-group">
                <input type="email" name="email" placeholder="Votre Email" class="form-control">
            </div>
            <div class="form-group">
                <input type="tel" name="tel" placeholder="Votre téléphone" class="form-control">
            </div>
            <div class="form-group">
                <input type="textarea" name="message" placeholder="Votre message" class="form-control">
            </div>
            <button type="submit" name="submit" class="btn btn-info">Envoyer</button>
        </form>
    </div>
    <?php
    include '_fin.inc.php';
    ?>
    Dans le fichier "_debut.inc.php"contient l'entête de la page (le menu de navigation notamment) et le fichier "_fin.inc.php" le footer avec l'année et mon nom du créateur du site uniquement

    Les données saisies dans les champs doivent être insérées dans une base de données "contact". J'utilise PDO pour interagir dans une base de données appelée portfolio et contenant une table contact. Dans le fichier "_gestionBase.inc.php" contient l'ensemble des fonctions PDO dont celle qui doit insérer les enregistrements du formulaire dans la table "contact" avec les colonnes "email","tel" et "message". C'est la fonction "insertion" qui doit normalement s'en charger. Voici le fichier "_gestionBase.inc.php" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
     
    /*
      __gestionBase.inc.php
     * Ce fichier regroupe l'ensemble des fonctions utilisées pour la connexion et la gestion de la base de données
     * 
     */
     
    /* La première fonction regroupe la fonction se connectant à la base de données
     * Elle se connecte à la base de données "portfolio" du serveur de la base de données MySQL et retourne un gestionnaire de connexion
     * Elle retourne un objet PDO en cas de succès et false en cas d'échec
     */
     
    function gestionnaireDeConnexion() {
        $pdo = new PDO('mysql:host=localhost;dbname=portfolio; charset=utf8', 'root', '');
        return $pdo;
    }
     
     
    function insertion($email, $tel, $message) {
        $pdo = gestionnaireDeConnexion();
        $email = $_POST['email'];
        $tel = $_POST['tel'];
        $message = $_POST['message'];
        $sql = "INSERT INTO contact (email, tel, message) VALUES (:email, :tel, :message)";
        $query = $pdo->prepare($sql);
        $query->bindParam(':email', $email);
        $query->bindParam(':tel', $tel);
        $query->bindParam(':message', $message);
        $query->execute();
        $resultat = $query->fetchAll();
        return $resultat;
        $query->closeCursor();
     
    }
    Or malheureusement, une seule ligne s'est insérée dans la table "contact". Et à chaque démonstration je ne sais pas pourquoi, aucune ligne ne s'insère dans la table.

    Pouvez-vous m'aider ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function insertion($email, $tel, $message) {
    ...
        $email = $_POST['email'];
        $tel = $_POST['tel'];
        $message = $_POST['message'];
    ...
    $email, $tel, $message sont passés en paramètres de la fonction.
    Il est donc inutile de les récupérer via $_POST.

    2/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        $resultat = $query->fetchAll();
        return $resultat;
        $query->closeCursor();
    Tu penses faire quoi avec ça ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jreaux62 Voir le message

    2/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        $resultat = $query->fetchAll();
        return $resultat;
        $query->closeCursor();
    Tu penses faire quoi avec ça ?
    Et bien je veux récupérer un tableau de résultat de la requête que j'affecte dans la variable $resultat. Ensuite je récupère la variable et son contenu ne le retournant. Et enfin pour exécuter d'autres requête insertion je la ferme pour pouvoir en exécuter d'autres.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il s'agit ici d'un INSERT.
    Donc, pas de "tableau de résultats" à récupérer.

    A la rigueur, tu peux récupérer :
    • true/false à l'exécution (ça marche ou pas)
    • ou l'id de la ligne créée : lastInsertId



    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function insertion($email, $tel, $message) {
        $pdo = gestionnaireDeConnexion();
     
        $sql = "INSERT INTO contact (email, tel, message) VALUES (:email, :tel, :message)";
        $query = $pdo->prepare($sql);
        $query->bindParam(':email', $email);
        $query->bindParam(':tel', $tel);
        $query->bindParam(':message', $message);
     
    //    $resultat = $query->execute(); // true / false
    // ou
        $query->execute();
        $resultat = $pdo->lastInsertId(); // dernier id créé
     
        return $resultat;
    //    $query->closeCursor(); // pas nécessaire
     
    }

    CELA DIT : aucune gestion d'erreur !
    • ni AVANT : vérification des données ($email, $tel, $message)
    • ni PENDANT (try / catch)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Cela ne marche toujours pas.

  6. #6
    Invité
    Invité(e)
    Par défaut
    C'est bon j'ai réussi à faire marcher mon formulaire d'insertion. Et je ne sais pas pourquoi mais en modifiant mon script PHP qui récupère les champs dans ma page contact.php j'ai réussi enfin à le faire marcher. De plus, ayant insérer des lignes aux données strictement similaires précédemment mais en ayant au préalable vider la table contact, je ne sais pas pourquoi ça ne me les a pas insérer alors que les enregistrements avaient été supprimé. Mais avec de nouvelles données oui.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/09/2013, 10h44
  2. [MySQL] rechercher dans une base de donnée depuis un formulaire
    Par infoworld2013 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 25/08/2013, 03h45
  3. Réponses: 13
    Dernier message: 08/01/2011, 02h52
  4. [MySQL] Insertion dans une base de données depuis un formulaire
    Par asvin dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 27/10/2008, 19h51
  5. Réponses: 4
    Dernier message: 23/04/2007, 12h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo