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 :

Formulaire et BDD


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Par défaut Formulaire et BDD
    Bonjour, je dois créer un formulaire pour remplir une table dans une BDD. Les valeurs du formulaires ne s'inscrivent pas dans la BDD. Parcontre, si je mets directements les valeurs dans la requête SQL elles sont bien envoyées.
    La connexion vers ma BDD fonctionne.
    Merci de votre aide.
    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
    76
     
    <center><b>Remplissage de la table</b></center></h1>
    <FORM method=post action="form.php">
    <h3><u>Completer le formulaire pour remplir la table :</u></h3>
    <TABLE BORDER=5>
     
    <TR>
    	<TD>Entrez le nom</TD>
    	<TD>
    	<INPUT type=text name="Name_test" >
    	</TD>
    </TR>
     
    <TR>
    	<TD>Entrez le Number</TD>
    	<TD>
    	<INPUT type=text name="Number_test" >
    	</TD>
     
    <TR>
    	<TD>Entrez la description</TD>
    	<TD>
    	<INPUT type=text name="Description_test" >
    	</TD>
    </TR>
     
    <TR>
    	<TD>Entrez le PartNumber</TD>
    	<TD>
    	<INPUT type=text name="PartNumber" >
    	</TD>
    </TR>
     
    <TR>
    	<TD>Entrez le num_EC</TD>
    	<TD>
    	<INPUT type=text name="num_EC" >
    	</TD>
    </TR>	
     
    	<TR>
    	<TD COLSPAN=2>
    	<INPUT type="submit" value="Envoyer">
    	</TD>
    </TR>
     
    </TABLE>
    </FORM>
     
     
    <?
    <?php
    $db = mysql_connect('127.0.0.1', 'root', '1234');  
    mysql_select_db('bdd',$db); 
     
    // Recuperation des valeurs :
     
    $Name_test = $_POST['Name_test'];
    $Number_test = $_POST['Number_test'];
    $Description_test = $_POST['Description_test'];
    $PartNumber = $_POST['PartNumber'];
    $num_EC = $_POST['num_EC'];
     
     
     
     
    // Insertion des valeurs :
    $insertion = "insert into test_table (Name_test, Number_test, Description_test, PartNumber, num_EC) values ('$Name_test', '$Number_test', 
    '$Description_test','$PartNumber', '$num_EC')";
    mysql_query($insertion)
     
    ?>
     
     
    </body>
    </html>

  2. #2
    Membre chevronné
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Par défaut
    Les simples quotes en PHP n'interprêtent pas les variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $insertion = "insert into test_table (Name_test, Number_test, Description_test, PartNumber, num_EC) values ('".$Name_test."', '".$Number_test."', 
    '".$Description_test."','".$PartNumber."', '".$num_EC."')";

  3. #3
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Regarde du côté de addslashes() si jamais ton contenu contient une apostrophe (') ça foire ta requête.

    Tu peux tester mes dire en faisant un echo de magic_quote pour vérifié si c'est activé ou pas.

    Un peu de lecture sur magic quote

    Si tu es au dessus de PHP 5.3, fait un mysql_real_escape_string() sur tes chaines.

    Une autre solution peut être d'utiliser la PDO.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Par défaut
    Toujours rien (jai testé ta requête) ... Pourtant quand je rentre directement les valeurs dans la requête elles sont bien enrengistrés dans la BDD!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_real_escape_string()
    je la mets où ?

  5. #5
    Membre chevronné
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Par défaut
    Citation Envoyé par SNY77 Voir le message
    Toujours rien ... Pourtant quand je rentre directement les valeurs dans la requête elles sont bien enrengistrés dans la BDD!
    Fait un "echo" de ta variable $insertion et exécute-la dans phpmyadmin ou tout autre outil, si t'as une erreur, ça sera plus compréhensible.

  6. #6
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    De même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FORM method=post action="form.php">
    Change plutot en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FORM method="post" action="form.php">

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Par défaut
    J'ai ça, sous MySQL Query Browser, je n'ai pas les enrengistrements en executant cette requête!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into test_table (Name_test, Number_test, Description_test, PartNumber, num_EC) values ('1', '2', '3','', '')
    Apparament ils prends même pas les valeurs 4 et 5 ...
    Merci.

  8. #8
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    As-tu vraiment essayé le addslashes($Description_test) ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $Name_test = $_POST['Name_test'];
    $Number_test = $_POST['Number_test'];
    $Description_test = $_POST['Description_test'];
    $PartNumber = $_POST['PartNumber'];
    $num_EC = $_POST['num_EC'];
    Remplace le par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $Name_test = addslashes($_POST['Name_test']);
    $Number_test = addslashes($_POST['Number_test'];
    $Description_test = addslashes($_POST['Description_test']);
    $PartNumber = addslashes($_POST['PartNumber']);
    $num_EC = addslashes($_POST['num_EC']);

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Par défaut
    J'ai protégé les valeurs (j'ai tout placé après la requête SQL d'insertion) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    mysql_real_escape_string($Name_test, $db);
    mysql_real_escape_string($Number_test, $db);
    mysql_real_escape_string($Description_test, $db);
    mysql_real_escape_string($PartNumber, $db);
    mysql_real_escape_string($num_EC, $db);
    Mais ça me donne toujours le même résultat;

  10. #10
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Remplace ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Insertion des valeurs :
    $insertion = "insert into test_table (Name_test, Number_test, Description_test, PartNumber, num_EC) values ('$Name_test', '$Number_test', 
    '$Description_test','$PartNumber', '$num_EC')";
    mysql_query($insertion)
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    print_r($_POST);
    // Insertion des valeurs :
    $insertion = "insert into test_table (Name_test, Number_test, Description_test, PartNumber, num_EC) values ('$Name_test', '$Number_test', 
    '$Description_test','$PartNumber', '$num_EC')";
    mysql_query($insertion)
    Donne moi la réponse

  11. #11
    Membre chevronné
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    339
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2009
    Messages : 339
    Par défaut
    Citation Envoyé par Simdu80 Voir le message
    Remplace ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // Insertion des valeurs :
    $insertion = "insert into test_table (Name_test, Number_test, Description_test, PartNumber, num_EC) values ('$Name_test', '$Number_test', 
    '$Description_test','$PartNumber', '$num_EC')";
    mysql_query($insertion)
    Par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    print_r($_POST);
    // Insertion des valeurs :
    $insertion = "insert into test_table (Name_test, Number_test, Description_test, PartNumber, num_EC) values ('$Name_test', '$Number_test', 
    '$Description_test','$PartNumber', '$num_EC')";
    mysql_query($insertion)
    Donne moi la réponse

    Ca ne peut pas marcher, les variables PHP entre simples quotes ne sont pas interprétées. (mais d'accord avec le print_r())

  12. #12
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Citation Envoyé par Isythiel Voir le message
    Ca ne peut pas marcher, les variables PHP entre simples quotes ne sont pas interprétées.
    Ben si ça marche, les quotes sont là pour MySQL. PHP les interprête grâce à celle ci :
    Logiquement ça devrait marcher

  13. #13
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 265
    Par défaut
    ça me donne ça en mettant des valeurs de 1 à 5 dans le formulaire (ordre des champs ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1 [Number_test] => 2 [Description_test] => 3 [PartNumber] => 4 [num_EC] => 5 ) insert into test_sheet(Name_test, Number_test, Description_test, PartNumber, num_EC) values ('1', '2', '3','', '')

  14. #14
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Par défaut
    Bonjour,

    On va procéder par étape:

    Pb n°1 : eviter les erreurs à la premiere connexion à la page :

    La méthode la plus simple pour moi est de donner un attribut "name" à ton bouton submit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <INPUT type="submit" value="Envoyer" name="submit_test">
    et en suite dans ton php tu testes si il existe dans ton $_POST, s'il existe ce n'est pas ta premiere visite.

    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
    <?php
    if(isset($_POST['submit_test'])){
    $db = mysql_connect('127.0.0.1', 'root', '1234');  
    mysql_select_db('bdd',$db); 
     
    // Recuperation des valeurs :
     
    $Name_test = $_POST['Name_test'];
    $Number_test = $_POST['Number_test'];
    $Description_test = $_POST['Description_test'];
    $PartNumber = $_POST['PartNumber'];
    $num_EC = $_POST['num_EC'];
     
     
     
     
    // Insertion des valeurs :
    $insertion = "insert into test_table (Name_test, Number_test, Description_test, PartNumber, num_EC) values ('$Name_test', '$Number_test', 
    '$Description_test','$PartNumber', '$num_EC')";
    mysql_query($insertion)
    }
    ?>
    Pb n°2 :
    Je voudrais aussi vérifier que les champs sont bien remplis sauf Description_test qui est optionnel.
    Il faudrait que tu expliques plus en détail ton problème mais j'imagine que tu veux pouvoir bloquer l'execution si les champs ne sont pas remplis, pour ça il faut utiliser JavaScript (il y a de très bons tutoriels Javascript qui existent sur developpez.com ).

  15. #15
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Le javascript est une methode de vérification côté client, donc il ne faut pas s'y fier, c'est juste un confort pour le client honnête.

    Voici un exemple pour la validation de tes champs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $Name_test = isset($_POST['Name_test']) ? $_POST['Name_test'] : '';
    $Number_test = isset($_POST['Number_test']) ? $_POST['Number_test'] : '';
    $Description_test = $_POST['Description_test'];
    $PartNumber = isset($_POST['PartNumber']) ? $_POST['PartNumber'] : '' ;
    $num_EC = isset($_POST['num_EC']) ? $_POST['num_EC'] : '';
     
    if($Name_test != "" && $PartNumber != "" && $num_EC != "")
    {
        // Insertion dans la base
    }
    else
    {
        echo 'Les données sont foireuses !';
    }
    De même, si tu veux vérifier que tes données chiffres soit bel et bien un chiffre, tu peux utiliser la fonction is_int

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $PartNumber = isset($_POST['PartNumber'] && is_int($_POST['PartNumber'])) ? $_POST['PartNumber'] : 0;
    [...]
    if($PartNumber != 0)
    A toi de travailler

  16. #16
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Par défaut
    Le javascript est une methode de vérification côté client, donc il ne faut pas s'y fier, c'est juste un confort pour le client honnête.
    Je suis d'accord avec ce que tu dis Simdu80 mais 2 vérifications valent mieux qu'une! La vérification côté serveur (PHP donc) est indispensable, mais pour l'utilisateur le plus important est la vérification en javascript (retour immédiat et visuel sur ce qu'il vient d'entrer dans le formulaire). Cela evite de recharger 5 fois le formulaire avant de l'avoir complété correctement.

    C'est donc à creuser quand même selon moi.

  17. #17
    Membre très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Par défaut
    Citation Envoyé par glen1789 Voir le message
    Je suis d'accord avec ce que tu dis Simdu80 mais 2 vérifications valent mieux qu'une! La vérification côté serveur (PHP donc) est indispensable, mais pour l'utilisateur le plus important est la vérification en javascript (retour immédiat et visuel sur ce qu'il vient d'entrer dans le formulaire). Cela evite de recharger 5 fois le formulaire avant de l'avoir complété correctement.

    C'est donc à creuser quand même selon moi.
    Tout à fait je suis bien d'accord, mais le PHP est pour moi à faire en premier.
    Cela reste un confort pour l'utilisateur comme dit plus haut, mais pas une vérification à mes yeux. Au final, on s'en fou que le script doit réactualiser, si ça marche; c'est pour cela que je parle de "confort d'utilisation".

    Et pour ces questions, autant l'orienter vers la solution immédiate. S'il a envi de plus il pourra le faire par la suite pour améliorer son formulaire.

Discussions similaires

  1. [SGBD] Traitement Données Formulaire Vers BDD Mysql
    Par Thierry8 dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 29/03/2006, 23h22
  2. [SimpleXML] Générer un XML grâce à un formulaire (sans BDD)
    Par greg1386 dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 29/01/2006, 01h04
  3. formulaire ASP bdd access recherche
    Par ghita269 dans le forum ASP
    Réponses: 8
    Dernier message: 19/11/2005, 23h57
  4. [MySQL] Formulaire php + bdd = perte des sauts de ligne html ?
    Par sunshine33 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 03/10/2005, 11h19
  5. problème avec formulaire et BDD
    Par pmboutteau dans le forum ASP
    Réponses: 1
    Dernier message: 24/08/2005, 10h56

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