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

Langage PHP Discussion :

Vérifications validité d'un formulaire et insertion dans une bdd


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut Vérifications validité d'un formulaire et insertion dans une bdd
    Bonjour,

    Avant l'insertion de données dans une base Mysql, je vérifie qu'un champ input :

    1) ne contient pas une saisie qui correspond à un enregistrement déjà présent dans la base (via une requête SELECT et la fonction mysql_num_rows)

    2) n'est pas vide pour éviter l'insertion des données vides dans la base (via la fonction empty)

    3) contient une saisie dont le formatage est conforme à celui attendu : en l'occurrence saisie du nom et prénom d'un contributeur sous la forme nom, prénom (délimitateur virgule + espace : utilisation d'explode et de la fonction count)

    Si les 3 conditions sont remplies, j'insère dans ma base la donnée saisie dans le champ imput. Le code que j'utilise :

    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
     
     
    <form action="" method="POST" onsubmit="valid5();" >
     
    <p>
     
    <br />
    <input type="text" name="text5" id="text5" />
    <br />
     
    <?php
     
    if(isSet($_POST["ajouter"])) {
     
     $text5=trim(mysql_real_escape_string($_POST['text5']));				
     $text5 = explode(", ", $text5); 
     
     if(is_array($text5) && isset($text5[1])) {// sinon affiche l'erreur Undefined offset: 1
     $sql = mysql_query("SELECT nom_contributeur,prenom_contributeur  FROM contributeurs WHERE nom_contributeur ='$text5[0]'and prenom_contributeur='$text5[1]' ");
     
    if(mysql_num_rows($sql) >=1)
    {
    echo 'le contributeur existe déjà <br/>';
     
     
    }
    }
     
    elseif  (empty ($_POST['text5'])) {			
    	echo "Le champ nouveau contributeur est obligatoire <br/>";  
     	} 
     
     
    elseif 	(count($text5)<2) {// le format attendu de la saisie suppose 2 éléments : nom et prénom. Donc si moins de 2 éléments : saisie incorrecte
     
    	echo"format saisie incorrecte";
    	}
     
     
     
    else {
    // requete pour chercher le prochain identifiant contributeur => utile pour traitement javascript
    $requete="SELECT MAX(id_contributeur) AS nb5 FROM contributeurs WHERE id_contributeur IN (SELECT id_contributeur FROM contributeurs) ;";
    			$result=mysql_query($requete,$db);
    			$ligne=mysql_fetch_array($result);
    			$value5 = $ligne['nb5'];
    			$value5 = $value5 + 1;
     
    	echo '<input type="hidden" name="value5" id="value5" value="'.$value5.'"  />';		
     
    echo $value5;//debug : ne s'affiche pas
     
        $add5 = sprintf('INSERT INTO contributeurs (nom_contributeur,prenom_contributeur) VALUES ("'.ucfirst($text5[0]).'", "'.ucfirst($text5[1]).'")'); 
     // requête ne se s'effectue pas
        $result = mysql_query($add5, $db) or die(mysql_error());
     
    ?>
    <script type="text/javascript">
     self.close(); 
    </script>
    <?php
    }
     
    } 
     
    ?>
    <input type="submit" name="ajouter" value="Ajouter" />			
    </p>
    </form>
    Ce code fonctionne partiellement : j'ai bien l'affichage de l'un des 3 messages d'erreur si la condition correspondante n'est pas remplie.
    Mais si la saisie est correcte (ne correspond pas à un enregistrement existant, non vide et correctement formatée), ma requête ne s'effectue pas ni d'ailleurs l'envoi du champ input type="hidden" "value5".
    Voyez-vous comment modifier mon code pour y arriver ? Merci.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut que tu debug.
    Par exemple tu dis que le champs hidden n'est pas envoyé, mais est-ce qu'il est bien mis ? est-ce que tu rentres dans ton else ? est-ce que ta requête retourne des erreurs ? etc.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 365
    Points : 192
    Points
    192
    Par défaut
    J'ai testé en faisant un echo $value5 pour voir si la value du champ caché s'affichait après avoir soumis le formulaire : rien ne s'affiche (d'ailleurs en consultant le code source généré, je ne vois pas le champ hidden).
    J'ai testé en faisant un echo de la requête $add5 : rien ne s'affiche non plus (pas d'erreur retournée non plus).

    Je ne semble donc pas rentrer dans le else... mais je ne vois comment modifier mon code pour y parvenir. Je suis preneur d'une aide supplémentaire. Merci.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Revoit la logique de ton code : ton premier if teste si le champ est correctement rempli ; donc si c'est le cas, tu n'iras jamais dans le else ou est l'insertion.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    Points : 101
    Points
    101
    Par défaut
    Bonjour,

    Mettre un code javascript pour vérifier que chaques champs ne serai pas plus judicieux ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    L'un n'empêche pas l'autre et utiliser uniquement du javascript c'est un peu léger.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    Points : 60
    Points
    60
    Par défaut
    Bonjour,
    Je ne sais pas pour le moment si ce que je viens de voir dans ton code est en rapport avec la solution recherchée, mais la ligne n° 11 me paraît suspecte : tu y écris les variables par leur nom au lieu de leur valeur. Celle-ci devrait être concaténée dans ta requête SELECT mais pas intégrée dedans :

    [B]ta phrase :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = mysql_query("SELECT nom_contributeur,prenom_contributeur  FROM contributeurs WHERE nom_contributeur ='$text5[0]'and prenom_contributeur='$text5[1]' ");
    ma proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = mysql_query("SELECT nom_contributeur,prenom_contributeur  FROM contributeurs WHERE nom_contributeur ='".$text5[0]."'
    and prenom_contributeur='".$text5[1]."'");
    J'espère que cette réponse t'aidera.

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/06/2010, 20h48
  2. Formulaire pour insertion dans une bdd
    Par cobolons dans le forum Langage
    Réponses: 6
    Dernier message: 17/04/2009, 18h59
  3. [HTML 4.0] Formulaire pour insertion dans une bdd
    Par cobolons dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 17/04/2009, 08h53
  4. [Conception] Pb d insertion dans une BDD des données d un formulaire
    Par xtiand4 dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 02/06/2006, 18h18

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