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 :

Inserer les données du formulaire dans ma base


Sujet :

PHP & Base de données

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut Inserer les données du formulaire dans ma base
    bonjour j'ai un formulaire a travers lequel j'entre des donnes et j'aimerai les inserer dans ma base de donnee et pour cela j'ai tente le code suivant
    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
     
    if ( isset($_POST['code']) && $_POST['code']!="0" && isset ($_POST['nom']) && $_POST['prenom']&&$_POST['adresse'])
    {$code=$_POST['code'];
    $nom=$_POST['nom'];
    $prenom=$_POST['prenom'];
    $adresse=$_POST['adresse'];
    try
    {
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
     
     
        $req = $bdd->prepare('INSERT INTO etudiant (code_etudiant, nom_etudiant,prenom_etudiant,adresse) VALUES('$code','$nom','$prenom','$adresse') ');
     
     
     
       $req->closeCursor();
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
     
     
        }
     
     
     
     
     
     
    ?>
     
     
    	</body>
    </html>

    mais il me marque une erreur a la ligne de la requete comme quoi c'est une erreur de variable pouvez vous m'aider et merci d'avance

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    ça ne risque pas de marcher, tu as mis les quotes dans le mauvais sens. Pour rappel, seules les doubles quotes (nowdoc et heredoc) permettent d'utiliser le remplacement des variables par leur valeur dans les chaines de caractères. Ton prepare devrait donc être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = $bdd->prepare("INSERT INTO etudiant (code_etudiant, nom_etudiant,prenom_etudiant,adresse) VALUES('$code','$nom','$prenom','$adresse')");
    Ensuite, pourquoi utilises-tu PDOStatement::closeCursor au lieu de PDOStatement::execute ??

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Tu peux également limiter cette expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (isset($_POST['code']) 
    && $_POST['code']!="0" 
    && isset ($_POST['nom']) 
    && $_POST['prenom']
    && $_POST['adresse'])
    de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (!empty($_POST['code']) 
    && !empty($_POST['nom'])
    && !empty($_POST['prenom'])
    && !empty($_POST['adresse']))
    C'est un peu plus clair. Tu peux également utiliser les filtres si tu le sens.

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    tout d'abord merci pour tes conseils et effectivement il manque le execute que j'ai mit de cette facon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $req->execute(array(
    	'code' ,
    	'nom',
    	'prenom',
    	'adresse' ,
     
    	));

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pourquoi tu passe un tableau ?? Ta requête préparée n'a pas de placeholder donc un execute sans paramètre suffit.

    Au passage, le tableau qu'on passe par PDOStatement::execute est un tableau associatif avec en clé les noms des placeholders et en valeur les valeurs à affecter.

  6. #6
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    en general pour l'execution on peut se contenter juste de mettre
    $req=bdd->execute; ????

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    j'ai mit quelques echo pour voir si la requete passer mais rien ne s'affiche il n'ya pas d'erreurs mais la page d'execution reste vierge et pourtant j'ai tente pas mal de execute mais ca ne donne toujours rien

  8. #8
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    en general pour l'execution on peut se contenter juste de mettre
    $req=bdd->execute; ????
    Execute est une méthode son appel est donc $statement->execute();

    Lis donc la doc

    -- Edit

    Celui qui se permet de mettre des -1 un peu partout pourrait au moins participer je pense...

  9. #9
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    merci sincerement de ton aide precieuse mais je pense que ce n'est pas un probleme de requete mais plutot de code puisque meme les echo ne donne rien je vais tenter de voir ce qui cloche

  10. #10
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Fais voir le code

  11. #11
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    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
     
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    	<head>
    		<title>Page d'accueil reserve aux personnes ayant le droit d'acces</title>
    		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    	</head>
    	<body>
    <?php	
    	if (!empty($_POST['code']) 
                 && !empty($_POST['nom'])
                && !empty($_POST['prenom'])
                && !empty($_POST['adresse']))
    { 
     
    $code=$_POST['code'];
    $nom=$_POST['nom'];
    $prenom=$_POST['prenom'];
    $adresse=$_POST['adresse'];
     
     
     
    try
     
    { 
        $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
        $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
        echo 'afficher';
     
     
        $req = $bdd->query("INSERT INTO etudiant (code_etudiant,nom_etudiant,prenom_etudiant,adresse) VALUES('$code','$nom','$prenom','$adresse')" );
     
     
        echo 'insertion effectue';
       $req->closeCursor();
    }
    catch(Exception $e)
    {
        die('Erreur : '.$e->getMessage());
    }
     
     
     
     
     
     
     
     
    }
     
     
     
    ?>
     
     
    	</body>
    </html>
    a mon avis l'erreur est au niveau de la condition if si je compile comme ca rien ne s'affiche mais si j'enleve le { qui vient juste apres la condition if la il y'a des erreurs mais les 2 messages s'affichent

  12. #12
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 236
    Par défaut
    Citation Envoyé par ibuto Voir le message
    a mon avis l'erreur est au niveau de la condition if si je compile comme ca rien ne s'affiche mais si j'enleve le { qui vient juste apres la condition if la il y'a des erreurs mais les 2 messages s'affichent
    Normal, si tu enlève le crochet, le if n'existe plus et donc le try s'exécute quoi qu'il arrive, ce n'est pas une erreur syntaxique du if, dans ton code fournis au début tu as mis
    La fonction empty vérifie que la valeur n'est pas vide hors la tu cherche à ce qu'elle soit différente de "0", si c'est un chiffre tu aura & $_POST['code']!= 0 (les quotes sont pour les chaînes/caractère, si c'est le cas ici, utilise des simples quote pour un gain de perf).

    Pour ton soucis, fait des echo de tes POST afin de vérifié que ceux-ci soit remplis.

  13. #13
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    utilise des simples quote pour un gain de perf
    Je voudrais bien voir si un benchmark là dessus à déjà été fait. Je doute que cet argument soit valide.

    La fonction empty vérifie que la valeur n'est pas vide hors la tu cherche à ce qu'elle soit différente de "0"
    Ce qui revient exactement au même, la validation de la référence en plus

    Je n'ai pas relevé d'erreur particulière dans ce code. L'expression booléenne de ton if est identique à ce que tu avais au départ. Tu es bien sur de fournir les données POST nécéssaires ?

    Fais tourner ça pour le voir:
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <title>Page d'accueil reserve aux personnes ayant le droit d'acces</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
    <?php
    if (!empty($_POST['code'])
    && !empty($_POST['nom'])
    && !empty($_POST['prenom'])
    && !empty($_POST['adresse']))
    {
        $code=$_POST['code'];
        $nom=$_POST['nom'];
        $prenom=$_POST['prenom'];
        $adresse=$_POST['adresse'];
        try
        {
            $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
            $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
            echo 'afficher';
            $req = $bdd->query("INSERT INTO etudiant (code_etudiant,nom_etudiant,prenom_etudiant,adresse) VALUES('$code','$nom','$prenom','$adresse')" );
            echo 'insertion effectue';
        }
        catch(Exception $e)
        {
            die('Erreur : '.$e->getMessage());
        }
    }
    else
    {
        echo "Les valeurs de 'code', 'nom', 'prenom' et 'adresse' sont manquantes";
        var_dump($_POST);
    }
    ?>
    </body>
    </html>

  14. #14
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    c'est vraiment curieux apres l'execution du code que vous m'avez donne il passe directement au else et voila le message qu'il m'affiche
    1234567891011121314151617181920212223242526272829303132333435363738 Les valeurs de 'code', 'nom', 'prenom' et 'adresse' sont manquantes
    array
    empty

    et pourtant les donnes que je lui transmet sont fait par ce code la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <form action="traitement.php" method="post">
     
     
    <p>
    <label for="    nom"> nom </label><input type="text"    />
    <label for=" prenom">prenom</label><input type="text"    />
    <label for="   code">code</label><input type="password"    />
    <label for="adresse"> adresse</label><input type="text"    />
    <input type="submit" value="Valider" />
    sachant que traitement est bel et bien le nom de mon fichier ou j'ai mit le code de recption

  15. #15
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Il manque pas les attributs "name" dans tes inputs là ?

  16. #16
    Modérateur
    Avatar de Kreepz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 681
    Billets dans le blog
    1
    Par défaut
    Pour ma part je ne code pas comme sa mes requêtes INSERT avec variables je l'aurais écrit plutôt de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = $bdd->query("INSERT INTO etudiant (code_etudiant,nom_etudiant,prenom_etudiant,adresse) VALUES('".$code."', '".$nom."', '".$prenom."', '".$adresse."')");
    Pensez à regarder nos cours et tutoriels PHP ainsi que notre FAQ PHP avant de poser votre question!
    Un message vous a aidé, n'oubliez pas le

  17. #17
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    effectivement la ca marche merci a tous de votre aide en tout cas vous m'avez appris beaucoup de chose meme si il m'affiche
    1234567891011121314151617181920212223242526272829303132333435363738 afficherinsertion effectue

    mais l'insertion se fait quant meme ca devrait etre un petit probleme que je reglerai encore grand merci a vous

  18. #18
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Citation Envoyé par Ozeil Voir le message
    Pour ma part je ne code pas comme sa mes requêtes INSERT avec variables je l'aurais écrit plutôt de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $req = $bdd->query("INSERT INTO etudiant (code_etudiant,nom_etudiant,prenom_etudiant,adresse) VALUES('".$code."', '".$nom."', '".$prenom."', '".$adresse."')");
    C'est quoi exactement l'intérêt à part réduire la lisibilité du code en ajoutant des opérateurs de concaténation partout ??

  19. #19
    Modérateur
    Avatar de Kreepz
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2011
    Messages : 681
    Billets dans le blog
    1
    Par défaut
    On me l'a appris comme sa, et sa marche donc je fais comme sa.
    Pensez à regarder nos cours et tutoriels PHP ainsi que notre FAQ PHP avant de poser votre question!
    Un message vous a aidé, n'oubliez pas le

  20. #20
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Tu fais comme tu le sens. L'essentiel c'est d'avoir une convention et de s'y tenir.

    Pour mémoire, voici comment mettre des variables dans des chaines de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $var1 = "hello";
    $var2 = "peter";
     
    echo "Say $var1 to $var2";
    echo "Say {$var1}{$var2}";
    echo "\$var1 vaut $var1";
    echo '$var1 vaut ' . $var1;
    echo <<< STR
    Say $var1 to $var2
    STR;
    Et pour les heureux qui travaillent PHP 5.3, voici un hack pour afficher des résultats d'expression:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $_ = function ($v) { return $v; };
     
    echo "Une expression: {$_(true ? 'vrai' : 'faux')}";
    Fonctionne également avec les appels de fonction et les constantes.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/01/2015, 15h33
  2. [MySQL] Insertion des données du formulaire dans la base
    Par trippy971 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/03/2014, 19h26
  3. [MySQL] inserer des données en arabe dans une base de données mysql
    Par curieuseInformatique dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/09/2011, 11h03
  4. Insertion des données du formulaire dans la base
    Par bebas dans le forum Langage
    Réponses: 9
    Dernier message: 23/02/2007, 12h03
  5. inserer les données dans une base de donnée a partir d'un datagrid
    Par sundjata dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 31/07/2006, 00h46

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