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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    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
    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 éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 402
    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
    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 très actif
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 141
    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
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 56
    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