liste deroulante dynamique en html/php/pdo/sql
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

liste deroulante dynamique en html/php/pdo/sql



  1. #1
    invited33f944f

    liste deroulante dynamique en html/php/pdo/sql


    ------

    Bonjour
    voila déjà plusieurs semaines ( 1 mois ) pour être plus précis que je cherche à faire une liste déroulante qui se rempli automatiquement à partir des noms qui se trouve dans la colonne sql "c_produit"


    début de l'histoire:
    n'y connaissant strictement rien en programmation j'essai de récupérer des infos à gauche et à droite
    j'ai donc regarder sur YouTube si il y avait pas un tuto pour faire un formulaire qui permet d'ajouter/modifier/supprimer des infos dans une base de donnée
    je suis alors tomber sur cette video

    https://youtu.be/9Q0UHtcGmEY

    bon sa a pas ete facile mais j'y suis arriver

    sauf que dans la video il affiche les données dans une table html ( <table> </table> )
    hors que moi de mon coté je voudrais que sa s'affiche dans un formulaire

    j'ai donc commencer à faire le formulaire en html et j'ai adapter en fonction que les infos en php sois envoyez dans les champs inputs
    jusque la il y avait pas de souci mais seulement si ont met 1 seul produit car si plusieurs produit sa pose probleme

    j'ai alors penser qu'il serait bien de faire une liste deroulante qui récupère chaque nom de produit dans la colonne sql "c_produit" pour que si je veux modifier un produit je commence par selectionné le produit concerner dans la liste et je clique sur le bouton modifier

    donc je continu mes recherches et ont m'indique 1000 et 1 trucs sauf que n'y connaissant rien sa ma vie embrouillé les neuronnes
    j'ai donc fait du mieux que je peut en essayant de comprendre mais la liste deroulante s'affiche vide et tous le reste du formulaire n'est plus visible

    voila donc je vient demander un peut d'aide ici
    si quelqu'un aurait la gentillesse de m'offrir un peut d'aide sans avoir la vulgarité de m'envoyez boulet vers le manuelle php ou des tutos/cours php car apprendre oui... mais j'aurais fini le truc dans 2ans si jamais je me suis pas démotivé avant vu la complexité du truc

    en tout cas je vous remercie par avance pour les volontaires

    Code de la page
    ( si besoin d'autre infos je peut fournir )

    Code PHP:
    <?php
    require_once('php/dbcon.php');

    if(isset(
    $_POST['btn_submit'])){
        
    $produit $_POST['txt_c_produit'];
        
    $quantite $_POST['txt_c_quantite'];
        
    $surface $_POST['txt_c_surface'];
        
    $lien $_POST['txt_c_lien'];
        
    $unite $_POST['txt_c_unite'];
        
    $outil $_POST['txt_c_outil'];
        
    $type $_POST['txt_c_type'];
        
    $semis $_POST['txt_c_semis'];
        
    $sursemis $_POST['txt_c_sursemis'];
        
    $microregarnissage $_POST['txt_c_microregarnissage'];
        
    $unmois $_POST['txt_c_unmois'];
        
    $troismois $_POST['txt_c_troismois'];
        
    $description $_POST['txt_c_description'];

        if(!empty(
    $produit)){
            try{

                
    $stmt $con->prepare("INSERT INTO tbcalc(c_produit, c_quantite, c_surface, c_lien, c_unite, c_outil, c_type, c_semis, c_sursemis, c_microregarnissage, c_unmois, c_troismois, c_description) VALUES (:produit, :quantite, :surface, :lien, :unite, :outil, :type, :semis, :sursemis, :microregarnissage, :unmois, :troismois, :description)");

                
    $stmt->execute(array(':produit'=>$produit':quantite'=>$quantite':surface'=>$surface':lien'=>$lien':unite'=>$unite':outil'=>$outil':type'=>$type':semis'=>$semis':sursemis'=>$sursemis':microregarnissage'=>$microregarnissage':unmois'=>$unmois':troismois'=>$troismois':description'=>$description));

                
    header('Location:index.php');

            }catch(
    PDOException $ex){
                echo 
    $ex->getMessage();
            }
        }else{
            echo 
    "INPUT PRODUIT";
        }
    }

    ?>    

    <html>

    <head>
    <title>Administration Calculatrice Gazoneo</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="css/admin.css" rel="stylesheet" type="text/css">
    </head>
        
    <body>

        <h1>Panneau d'administration</h1>
        
            <form action="" method="post">
            
                <select name="txt_c_produit">
                <?php                
                $reponse 
    $bdd->query('SELECT c_produit FROM tbcalc');

                while (
    $donnees $reponse->fetch())
                {
                    echo 
    $donnees['c_produit'];
                }

                
    $reponse->closeCursor();

                
    ?>
                </select>
        
                <hr>        

                    <div class="admin_produits">
                        <p>Nom du produit :</p>
                        <input type="text" id="produits" />
                    </div>    
                
                <hr>
                
                    <div class="admin_quantite">
                        <p>Quantité de produit par default ( ex: <em>Algifol Green</em> doit être dosé à <em>"5ml"</em> /L ) :</p>
                        <input type="number" name="txt_c_quantite" />
                    </div>

                <hr>    
                
                    <div class="admin_surface">
                        <p>Surface d'application 1m2 ou 10m2 ? ( ex: <em>Algifol Green</em> est à pulveriser sur <em>"10m2"</em> ) :</p>
                        <input type="number" name="txt_c_surface" />
                    </div>    

                <hr>        
                    
                    <div class="admin_lien">
                        <p>Lien qui envoi vers la fiche du produit :</p>
                        <input type="url" name="txt_c_lien" />
                    </div>

                <hr>
                    
                    <div class="admin_unite">
                        <p>Indiquer si <em>l'unité</em> du produit et en ( <em>ml</em> ou en <em>gr</em> ? ) :</p>
                        <input type="text" name="txt_c_unite" />
                    </div>

                <hr>
                    
                    <div class="admin_outil">
                        <p>Indiquer si le produit doit être appliquer avec un ( <em>pulverisateur</em> ou un <em>epandeur</em> ) :</p>
                        <input type="text" name="txt_c_outil" />
                    </div>

                <hr>
                    
                    <div class="admin_type">
                        <p>Indiquer si le produit est de type ( <em>semence ou engrais</em> ) si fértilisant indiquer ( <em>non utilisé</em> ) :</p>
                        <input type="text" name="txt_c_type" />
                    </div>

                <hr>
                    
                    <div class="admin_semis">
                        <p>Indiquer la quantité pour un <em>semis</em> :</p>
                        <input type="number" name="txt_c_semis" />
                    </div>

                <hr>
                    
                    <div class="admin_sursemis">
                        <p>Indiquer la quantité pour un <em>sur-semis</em> :</p>
                        <input type="number" name="txt_c_sursemis" />
                    </div>

                <hr>
                    
                    <div class="admin_microregarnissage">
                        <p>Indiquer la quantité pour un <em>micro-regarnissage</em> :</p>
                        <input type="number" name="txt_c_microregarnissage" />
                     </div>

                <hr>
                     
                    <div class="admin_unmois">
                        <p>Indiquer la quantité de produit si application <em>tous les mois</em> :</p>
                        <input type="number" name="txt_c_unmois" />
                    </div>    

                <hr>        
                    
                    <div class="admin_troismois">
                        <p>Indiquer la quantité de produit si application <em>tous les 3 mois</em> :</p>
                        <input type="number" name="txt_c_troismois" />
                    </div>

                <hr>
                    
                    <div class="admin_description">
                        <p>Descriptif du produit :</p>
                        <textarea name="txt_c_description" ></textarea>
                    </div>
                             
                <div class="custom_main_grid_right">
                    <input type="submit" value="Ajouter" name="btn_submit">
                </div>
                
            </div>

    <script type="text/javascript">
        $(document).ready(function() {
            $().UItoTop({ easingType: 'easeOutQuart' });
        });
    </script>    
        
    </body>

    </html>

    -----

  2. #2
    bisou10

    Re : liste deroulante dynamique en html/php/pdo/sql

    Ton appli est toute trouée. Tu mets ça sur internet tu te fais hacker à la premiere injection SQL.

    ***************

    Pour remplir ton formulaire met plutot:
    Code:
    echo "<option>".$donnees['c_produit']".</option>";

  3. #3
    invited33f944f

    Re : liste deroulante dynamique en html/php/pdo/sql

    salut
    merci pour la modif c'est gentil
    par contre tu me conseil quoi pour eviter les injections sql stp
    pour la liste deroulante t'aurais pas une idée ?
    en tout cas merci pour ton aide c'est cool

  4. #4
    bisou10

    Re : liste deroulante dynamique en html/php/pdo/sql

    Ben mon code, c'est la liste déroulante.

    Pour les injections SQL... il faut escaper les requetes.

    Mais ne met surtout pas ca en libre accès sur internet ^^

  5. A voir en vidéo sur Futura
  6. #5
    invited33f944f

    Re : liste deroulante dynamique en html/php/pdo/sql

    pour le code dans la liste déroulante je doit le placer ou exactement car comme dit dans mon premier message j'y connais rien pour preuve sa fait plus d'un mois que je galère

    pour les injections sql je vais essayer de relancer des recherches depuis Google mais c'est un truc de fou se code tellement fou que sa m'apporte des migraines

  7. #6
    invited33f944f

    Re : liste deroulante dynamique en html/php/pdo/sql

    juste un petit up
    si d'autres personnes peuvent aussi donné un peut aide ne soyez pas timide
    plus ont est de fou plus ont s'amuse

  8. #7
    quentin08

    Re : liste deroulante dynamique en html/php/pdo/sql

    Salut,

    Citation Envoyé par didiou85
    mais la liste deroulante s'affiche vide et tous le reste du formulaire n'est plus visible
    Es-tu sûr que ta requête donne du résultat ?
    Dans ton while, peux-tu mettre :
    Code PHP:
    echo "<hr/>";
    var_dump($donnees); 
    Et voir ce que ça fait ?

    Testé chez moi, ce code reste très basique mais permet de lire une colonne d'une table et mettre chaque élément dans un <select></select>
    Tu peux t'en inspirer :
    Code PHP:
    <?php
        
        $pdo 
    = new PDO("mysql:dbname=db;host=127.0.0.1","user","pass", array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
        
    $st1 $pdo->prepare("select colonne from table");
        
    $st1->execute();
        
    $res null;
        
    $input_name "votre_choix";
        
        if ((isset(
    $_GET[$input_name]) === true) AND (strlen($_GET[$input_name]) > 0))
        {
            echo 
    "Vous avez choisi " $_GET[$input_name];
        }
            
    ?>
        

        <html>
        <head>
        </head>
        <body>
        <form method = "get">
        Votre choix :
        <select name = "<?php echo $input_name?>">
        <?php
            
    echo "<option></option>\n";
            while(
    $res $st1->fetch(PDO::FETCH_NUM))
            {
                echo 
    "<option>" $res[0] . "</option>\n";
            }
        
    ?>
        </select>
        <input type = "submit" value = "OK !">
        </form>
        </body>
        </html>

    ATTENTION :
    Un point important sur la sécurité
    Concernant les données qu'on fait passer dans un formulaire, le fait de donner le choix à l'utilisateur par l'intermédiaire d'une liste déroulante laisse penser qu'il aura uniquement accès à ces données, alors que pas du tout ! Ce n'est pas parce qu'on a une liste déroulante que l'utilisateur sera limité à ces choix. Tout ce qui passe par un formulaire doit systématiquement être vérifié par du code php pour vérifier que la saisie est correcte et que l'utilisateur a bien le droit d'y accéder

    C'est comme si pour interdire l'accès à une partie sensible d'un site, on masquait le lien hypertexte à l'utilisateur qui n'a pas le droit d'accès.
    S'il connait le nom de la page, il pourra y accéder. Là, c'est pas compliqué, il faut juste taper quelque chose dans la barre d'adresse.
    De la même manière, on peut forcer le navigateur à voire autre chose dans le formulaire que ce qui a été envoyé par le serveur, par exemple, c'est faisable avec les outils de développement web de Firefox

    L'exemple que je donne utilise la méthode GET pour le formulaire, quand tu le valide, tu vois qu'il y a quelque chose qui se rajoute à l'URL. Bien sûr, il faut vérifier que l'utilisateur ne change pas cette valeur dans l'URL à la main

    A+

  9. #8
    invited33f944f

    Re : liste deroulante dynamique en html/php/pdo/sql

    Re
    avant tout merci pour ton aide c'est vraiment sympa
    par contre je comprend pas quand tu dit que ma page utilise la method get hors qu'il me semblé pourtant quelle utiliser la method post
    a moins que je me trompe

  10. #9
    quentin08

    Re : liste deroulante dynamique en html/php/pdo/sql

    Salut,

    Non, c'est mon exemple qui utilise la méthode GET. Je donne juste un code qui fonctionne et que tu peux réutiliser. On utilise POST ou GET selon le cas qui se présente.
    Tu dit plus haut que tu veux modifier un produit en le sélectionnant dans une liste déroulante. Dans ce cas, c'est n'est que mon avis, il faut mieux utiliser la méthode GET
    Le script "sait" quel produit modifier : Quand tu va valider, tu récupère la variable qui s'est mise dans l'URL et tu arrange ton script pour que les changements concernent ce que tu as passé dans l'URL

    A+

  11. #10
    invited33f944f

    Re : liste deroulante dynamique en html/php/pdo/sql

    En fait c'est assez complexe à expliquer se que je veut faire ( du moins pour moi... )

    j'ai une calculatrice ( sous forme de formulaire ) qui calcul des dosage d'engrais solide, liquide et des semences de gazon ( coder en html / javascript )
    ont peut retrouver cette calculatrice ici: http://bookgazon.free.fr/calcul/

    donc comme vous pouvez le voire si je sélectionne Agrosil LR le formulaire s'adapte... si je sélectionne Calitech le formulaire s'adapte différemment et si je sélectionne semences gazon strong sa s'adapte encore
    cela permet d'avoir le bon choix des champs selon le type de produit

    jusqu'à la c'est ok pas de souci

    mais ou sa se corse c'est que si je veut ajouter modifier ou supprimer un produit il faut que je modifie le fichier calcul.js
    pour cela j'ai besoin d'ouvrir le ftp, de transférer le fichier sur mon bureau, de le modifier et de le réinjecter sur le ftp
    autant dire que c'est assez pénible et c'est pas génial niveau simplicité.

    Exemple: pour modifier un produit je suis obliger de modifier chaque infos du produit concernée dans la liste du code ci-dessous ( fichier: calcul.js )

    Code HTML:
      // Agrosil LR
    {'produit':'[B][COLOR="#FF0000"]Agrosil LR[/COLOR][/B]','quantite':[COLOR="#FF0000"][B]120[/B][/COLOR],'surface':[COLOR="#FF0000"][B]1[/B][/COLOR],'description':"[COLOR="#FF0000"][B]Engrais améliorateur de sol agrosil améliore efficacement le sol, stimule le système racinaire pour le gazon et toutes les plantes du jardin.[/B][/COLOR]",'lien':'[COLOR="#FF0000"][B]https://www.gazoneo.fr/produit/agrosil-ameliorateur-sol/[/B][/COLOR]','unite':'[B][COLOR="#FF0000"]gr[/COLOR][/B]','outil':'[B][COLOR="#FF0000"]epandeur[/COLOR][/B]','type':'[B][COLOR="#FF0000"]non utilisé[/COLOR][/B]','semis':[B][COLOR="#FF0000"]0[/COLOR][/B],'sursemis':[B][COLOR="#FF0000"]0[/COLOR][/B],'microregarnissage':[COLOR="#FF0000"][B]0[/B][/COLOR],'unmois':[COLOR="#FF0000"][B]0[/B][/COLOR],'troismois':[B][COLOR="#FF0000"]0[/COLOR][/B]},
    si je veut ajouter un produit je suis obliger de faire un copier puis de coller cette ligne en dessous celle ci...
    et de remplacer les infos par celle du nouveau produit

    Code HTML:
      // Agrosil LR
      {'produit':'Agrosil LR','quantite':120,'surface':1  ,'description':"Engrais améliorateur de sol agrosil améliore efficacement le sol, stimule le système racinaire pour le gazon et toutes les plantes du jardin.",'lien':'https://www.gazoneo.fr/produit/agrosil-ameliorateur-sol/','unite':'gr','outil':'epande  ur','type':'non utilisé','semis':0,'sursemis':  0,'microregarnissage':0,'unmoi  s':0,'troismois':0},
    
      // Algifol Green
      {'produit':'Algifol Green','quantite':5,'surface':  10,'description':"Puissant stimulant gazon Algifol Green est un concentré d’algues biologiques qui s’utilise en quantités minimales pour un résultat stupéfiant !",'lien':'https://www.gazoneo.fr/produit/algifol-green-stimulant-gazon/','unite':'ml','outil':'pulver  isateur','type':'non utilisé','semis':0,'sursemis':  0,'microregarnissage':0,'unmoi  s':0,'troismois':0},
    et si je veut supprimer un produit alors je supprime la ligne de code du produit concernée ( exemple: supprimer Algifol green alors ont passe de ça a ça )

    avant
    Code HTML:
      // Agrosil LR
      {'produit':'Agrosil LR','quantite':120,'surface':1  ,'description':"Engrais améliorateur de sol agrosil améliore efficacement le sol, stimule le système racinaire pour le gazon et toutes les plantes du jardin.",'lien':'https://www.gazoneo.fr/produit/agrosil-ameliorateur-sol/','unite':'gr','outil':'epande  ur','type':'non utilisé','semis':0,'sursemis':  0,'microregarnissage':0,'unmoi  s':0,'troismois':0},
    
      // Algifol Green
      {'produit':'Algifol Green','quantite':5,'surface':  10,'description':"Puissant stimulant gazon Algifol Green est un concentré d’algues biologiques qui s’utilise en quantités minimales pour un résultat stupéfiant !",'lien':'https://www.gazoneo.fr/produit/algifol-green-stimulant-gazon/','unite':'ml','outil':'pulver  isateur','type':'non utilisé','semis':0,'sursemis':  0,'microregarnissage':0,'unmoi  s':0,'troismois':0},
    Apres
    Code HTML:
      // Agrosil LR
      {'produit':'Agrosil LR','quantite':120,'surface':1  ,'description':"Engrais améliorateur de sol agrosil améliore efficacement le sol, stimule le système racinaire pour le gazon et toutes les plantes du jardin.",'lien':'https://www.gazoneo.fr/produit/agrosil-ameliorateur-sol/','unite':'gr','outil':'epande  ur','type':'non utilisé','semis':0,'sursemis':  0,'microregarnissage':0,'unmoi  s':0,'troismois':0},
    comme vous pouvez le voire c'est vraiment pénible à faire mais bon la personne qui a codé le tout à déjà bien été gentil de me faire ça
    donc j'ai pas trop eu envie d'abuser de sa gentillesse en lui demandent d'ajouter ma nouvelle idée de plus je pense que sa se fait pas

    donc en gros
    je penser faire une sorte de petit panel admin accessible mais que par moi

    1/ une page "add" pour ajouter un produit dans la bdd ( sans liste déroulante ) juste des champs input text
    comme sa j'ajoute les infos du nouveau produit puis je click sur le bouton enregistrer et sa enregistre les infos dans la bdd

    2/ une nouvelle page "edit" pour éditer un produit dans la bdd ( avec la liste déroulante )
    comme sa je sélectionne le produit dans la liste déroulante -> ses infos s'affiche dans les champs input text -> je modifier les infos du produit -> puis je click sur le bouton Editer et sa enregistre les modifications dans la bdd

    3/ une nouvelle page "suppr" pour supprimer un produit dans la bdd ( avec la liste déroulante )
    comme sa je sélectionne le produit dans la liste déroulante -> ses infos s'affiche dans les champs input text -> puis je click sur le bouton Supprimer et sa supprime le produit dans la bdd

    donc n'y connaissent rien en php
    j'ai regarder sur YouTube et plus de 100 tutos sur internet mais aucun ne donne vraiment les questions a mes réponses
    et je suis tomber sur cette vidéo qui est l'une des seuls a avoir fonctionné sans m'affiché des erreurs php a l'écran


    donc j'ai temps bien que mal réussi a intégrer les choses dans mon formulaire html
    sauf que maintenant je peine à faire en sorte que la liste déroulante aille récupérer les noms des produits qui se trouve dans la colonne c_produit de la table sql

    une fois arriver a faire ça
    je pourrais alors enregistrer/modifier/supprimer les produits dans la bdd
    et ensuite j'aurais juste a récupérer les infos dans la bdd pour venir les mètres dans la liste déroulante de la calculatrice

    en gros sa m'evitera de devoir editer le fichier calcul.js a chaque fois

    1 je créer / modifie / supprime le produit dans la bdd
    2/ la calculatrice recuperer les infos dans la bdd

    formulaire admin -> bdd > Calculatrice

    le fameux fichier calcul.js ainsi que le fichier index.html et le fichier css

    https://codepen.io/asp2p/pen/wrgZLv

  12. #11
    quentin08

    Re : liste deroulante dynamique en html/php/pdo/sql

    Salut,

    Si tu n'as jamais fait de php, ça va être compliqué, mais je te rassure, c'est tout à fait faisable.
    J'ai appris le php tout seul et je sais ce que c'est de galérer sur du code pendant des heures

    Citation Envoyé par didiou85
    1/ une page "add" pour ajouter un produit dans la bdd ( sans liste déroulante ) juste des champs input text
    comme sa j'ajoute les infos du nouveau produit puis je click sur le bouton enregistrer et sa enregistre les infos dans la bdd
    On va commencer par le point 1/

    Donc, un formulaire POST avec des champs texte
    Voilà l'exemple d'insert :
    Regarde les commentaires du code et dis moi si tu comprends

    Code PHP:
    <?php
        $formulaire_soumis 
    false// On part du principe que le formulaire n'est pas soumis
        
    $test_donnees_formulaire false// On part du principe que le formulaire n'est pas correctement rempli
        
    $statut_requete false// On part du principe que la requête insert a échoué
        

        
    if // Test si le formulaire est soumis
        
    (
            (isset(
    $_POST["champ1"]) === true) AND
            (isset(
    $_POST["champ2"]) === true) AND
            (isset(
    $_POST["champ3"]) === true)
        )
        {
            
    $formulaire_soumis true// Garde en mémoire l'information comme quoi le formulaire est soumis
            
            
            // Test ici si les valeurs envoyées par le formulaire sont correctes
            // Exemple, si les champs dans la base sont du varchar(30), vérifier que chaque chaine envoyée par le formulaire fait 30 caractères max
        
            
    if(true// Ici, tu dois écrire la condition qui teste les données envoyées par le formukaire
            
    {
                
    $test_donnees_formulaire true// Garde en mémoire l'information comme quoi le formulaire est bien rempli
                // Test des valeurs passées par formulaire OK
                
                // Insérer du code ici pour envoyer la requête insert à la base, tu peut t'inspirer de mon exemple précédent avec PDO
                
                
    if(true// Ici, tu dois écrire la condition qui teste le retour de la requête pour voir si elle réussi
                
    {
                    
    $statut_requete true// Garde en mémoire l'information comme quoi la requête est passée correctement
                
    }
                
            }
        }
    ?>


    <html>
    <head>
    </head>
    <body>
        <form method = "post">
            Champ 1<input type = "text" name = "champ1" /><br/>
            Champ 2<input type = "text" name = "champ2" /><br/>
            Champ 3<input type = "text" name = "champ3" /><br/>
            <input type = "submit" value = "Enregistrer" />
        </form>
        
        
        <?php
            
    if ($formulaire_soumis === true)
            {
                if (
    $test_donnees_formulaire === true)
                {
                    if (
    $statut_requete === true)
                    {
                        echo 
    "Enregistrement réussi<br/>";
                    }
                    else
                    {
                        echo 
    "Une erreur inconnue s'est produite<br/>";
                    }
                }
                else
                {
                    echo 
    "Votre formulaire contient des erreurs<br/>";
                }
                
            }
        
    ?>
        
        
    </body>
    </html>

    A+

  13. #12
    invited33f944f

    Re : liste deroulante dynamique en html/php/pdo/sql

    depuis se matin j'essai de comprend tout se que tu a indiquer dans le code ainsi que les commentaires mais je suis beaucoup plus perdu et je comprend vraiment pas
    voila comment je lis le code...
    vraiment désolé mais c'est un truc de fou pour coder de nos jours ( moi qui ete avec mon bon vieux html de 1998 je doit le dire c'est vraiment un truc de malade

    Code PHP:
    <?php 
        $formulaire_soumis 
    false// tu donne la valeur "faux" a la variable $formulaire_soumis 
        
    $test_donnees_formulaire false// tu donne la valeur "faux" a la variable $test_donnees_formulaire 
        
    $statut_requete false// tu donne la valeur "faux" a la variable $statut_requete
         

        
    if // si
        

            (isset(
    $_POST["champ1"]) === true) AND  // le champ1 est totalement vrai...
            
    (isset($_POST["champ2"]) === true) AND  // ET champ2 est totalement vrai...
            
    (isset($_POST["champ3"]) === true// ET champ3 est totalement vrai...
        

        { 
            
    $formulaire_soumis true// la variable $formulaire_soumis vaut maintenant vrai
              
         
            
    if(true// si vrai
            

                
    $test_donnees_formulaire true// la variable $test_donnees_formulaire est maintenant vrai
                 
                
    if(true// si vrai
                

                    
    $statut_requete true// la variable $statut_requete est maintenant vrai 
                

                 
            } 
        } 
    ?> 
     

    <html> 
    <head> 
    </head> 
    <body> 
        <form method = "post"> 
            Champ 1<input type = "text" name = "champ1" /><br/> 
            Champ 2<input type = "text" name = "champ2" /><br/> 
            Champ 3<input type = "text" name = "champ3" /><br/> 
            <input type = "submit" value = "Enregistrer" /> 
        </form> 
         
         
        <?php 
            
    if ($formulaire_soumis === true)  // si $formulaire_soumis  est totalement vrai
            

                if (
    $test_donnees_formulaire === true// si $test_donnees_formulaire est totalement vrai
                

                    if (
    $statut_requete === true// si $statut_requete est totalement vrai
                    

                        echo 
    "Enregistrement réussi<br/>"// ont affiche le texte enregistrement réussi
                    

                    else  
    // sinon
                    

                        echo 
    "Une erreur inconnue s'est produite<br/>"// ont affiche le texte Une erreur inconnue s'est produite
                    

                } 
                else 
    // sinon
                

                    echo 
    "Votre formulaire contient des erreurs<br/>"// ont affiche le texte Votre formulaire contient des erreurs
                

                 
            } 
        
    ?>

    </body>
    </html>

    A+

  14. #13
    quentin08

    Re : liste deroulante dynamique en html/php/pdo/sql

    Salut,

    Les trois premières variables sont utilisées pour produire l'affichage du résultat de l'enregistrement sous le formulaire (message d'information à l'utilisateur si oui ou non, l'enregistrement s'est bien passé)

    La variable $formulaire_soumis
    Pour qu'elle passe à vrai, je pense que tu l'as compris, il faut que la condition suivante soit vraie :

    Code PHP:

        (isset(
    $_POST["champ1"]) === true) AND
        (isset(
    $_POST["champ2"]) === true) AND
        (isset(
    $_POST["champ3"]) === true)

    Mais je ne suis pas sûr que tu voie comment ça ce passe, c'est à dire, qu'es-ce qui fait que isset($_POST["champ1"]) soit à vrai ou faux ainsi que les autres variables du tableau $_POST (oui, $_POST est un tableau associatif)

    Donc comment ça se passe ?
    Lorsque tu valides ton formulaire, le navigateur envoie les champs au serveur, et vu que c'est la méthode post, php te met le contenu de tes champs dans la variable $_POST
    Regarde comment j'ai fait le formulaire, j'ai appelé les champs "champ1", "champ2", "champ3" (paramètre "name" de chaque input)
    Donc quand tu envoie ça, php te rempli $_POST avec chaque valeur du formulaire
    Tes identifiants de "cases" du tableau $_POST sont les paramètres "name" du formulaire, et la valeur correspondant à chaque clé(identifiant) est ce que tu as mis dans le champ texte du formulaire.

    Exemple :
    Tu remplis ton formulaire de la façon suivante :
    Champ 1 : ceci est le texte du champ 1
    Champ 2 : ceci est le texte du champ 2
    Tu laisses le champ 3 vide

    A l'envoi du formuilaire, voilà à quoi ressemblera ton tableau $_POST :
    $_POST["champ1"] -> "ceci est le texte du champ 1"
    $_POST["champ2"] -> "ceci est le texte du champ 2"
    $_POST["champ3"] -> "" // Vide car le champ3 a été laissé vide à l'envoi

    isset() sert à tester si une variable existe
    Donc si le formulaire n'est pas soumis, les isset($_POST["champ1"]), ($_POST["champ2"]), ($_POST["champ3"]) retourneront false

    Parenthèse
    Un cas particulier :
    Code PHP:
    $a NULL
    isset($a); donnera false bien que $a existe, donc j'ai l'impression que ca teste si une valeur est !== de NULL
    Fin de la parenthèse


    La variable $test_donnees_formulaire
    Je considère ici que les trois champs du formulaire vont être enregistrés dans des champs SQL varchar(30), c'est à dire un champ SQL qui n'est pas prévu pour contenir plus de 30 caractères par ligne, sinon ton SGBD(R) te retournera un warning
    Donc, on peut préparer du code php pour vérifier que chaque chaine que tu envoies ne dépasse pas cette limite.
    Ça peut se faire en Javascript, mais ça peut être bypassé facilement par l'utilisateur

    Quelque chose du genre :
    Code PHP:
    if
    (
    (
    strlen($_POST["champ1"]) <= 30) AND
    (
    strlen($_POST["champ2"]) <= 30) AND
    (
    strlen($_POST["champ3"]) <= 30)
    )
    {
        
    $test_donnees_formulaire true;

    ou écrit sous une autre forme :
    Code PHP:
    $test_donnees_formulaire = ((strlen($_POST["champ1"]) <= 30) AND (strlen($_POST["champ2"]) <= 30) AND (strlen($_POST["champ3"]) <= 30)) 
    qui doit se lire comme : $test_donnees_formulaire = "résultat de l'opération booléènne champ1 inférieur à 30 caractères ET champ2 inférieur à 30 caractères ET champ3 inférieur à 30 caractères". Ce calcul donne soit true soit false, que l'on affecte à $test_donnees_formulaire
    Bon ça, c'était pour info, mais pour commencer, retiens juste la forme précédente qui est plus simple à lire

    Parenthèse
    Attention à strlen(), ça se produit en UTF8, avec certains caractères comme le "é" ou "è" ou "à"
    Code PHP:
    strlen("é"); 
    va retourner 2 et non 1, car strlen() compte le nombre d'octets d'une chaine et non ne nombre de caractères.
    La plupart du temps un caractère = un octet donc pas de problème mais attention à ça.
    Dans ton cas, puisque j'ai dit pour exemple qu'on partait sur des champs de 30 caractères max :
    Code PHP:
    strlen("-- Une chaine de 30 caractères"); 
    Va retourner 31 et non 30 si ton script est en UTF8 bien qu'il y ait 30 caractères dans le strlen(), mais le "è" de "caractères" compte pour deux comme dit plus haut, il vaut mieux utiliser mb_strlen() pour éviter cette situation
    Mais pour l'instant, ne t'embête pas avec ça
    Fin de la parenthèse

    Dans mon exemple, j'ai mis if(true){}, cette condition retourne forcément vrai, mais c'est pour te montrer la forme que ça doit avoir
    Donc, dans le premier if(true){}, tu remplaces true par la condition avec les 3 strlen()

    Maintenant qu'on est sûr que les données sont correctes, on les insère avec le code que j'ai donné au dessus avec PDO

    La variable $statut_requete
    Elle donne l'info si la requête est bien passée
    On doit la retrouver à la place du deuxième if(true){}

    Comme dit plus haut, on retrouve ces variables sous le formulaire pour créer un message à l'utilisateur

    if ($test_donnees_formulaire === true) est imbriquée dans if ($formulaire_soumis === true) car il est inutile de tester les données du formulaire s'il n'a pas été validé

    Pareil pour if ($statut_requete === true) : imbriqué dans if ($test_donnees_formulaire === true) car inutile de vérifier que la requête se soit exécutée si le formulaire n'est pas correct, puisqu'on exécute que si les champs du formulaire sont bons

    A propos de l'opérateur "==="
    Je l'utilise toujours quand je code car "==" ne teste que l'équivalence des éléments à comparer, ainsi php va entrer dans ces conditions :

    Code PHP:

    if (== "")
    {
        echo 
    "Attention à cette égalité !<br/>";
    }

    if (
    == "0")
    {
        echo 
    "Attention à cette égalité !<br/>";
    }

    if (
    == false)
    {
        echo 
    "Attention à cette égalité !<br/>";
    }

    if (
    == true)
    {
        echo 
    "Attention à cette égalité !<br/>";
    }

    if (
    == NULL)
    {
        echo 
    "Attention à cette égalité !<br/>";
    }

    if (
    false == NULL)
    {
        echo 
    "Attention à cette égalité !<br/>";
    }

    if (
    true == "azerty")
    {
        echo 
    "Attention à cette égalité !<br/>";

    Je trouve que c'est dangereux, donc, j'utilise toujours "==="
    Dans les exemples au dessus, rien ne se serait affiché avec "==="

    Tu remarquera que j'initialise mes variables au début du script. Ce n'est pas une obligation, mais je trouve que c'est mieux même si ça fait quelques lignes en plus

    Je te conseille d'externaliser la connexion à la base et de l'appeler avec un require()
    J'ai créé l'objet PDO avec PDO::MYSQL_ATTR_FOUND_ROWS, le l'utilise tout le temps, mais tu n'est pas obligé

    Je t'ai ajouté le code permettant de détecter une erreur, mais si tu fais passer 40 caractères dans ton varchar(30), pas de détection d'erreur, juste un warning. J'utilise une autre méthode pour détecter ce genre de chose, mais c'est un peu plus lourd. Si ça se produit, tu n'auras que les 30 premiers caractères, il te supprime les 10 restants

    Ce nouveau script donne aussi un message avec le code et le message d'erreur SQL, tu peux voir ce que ça fait en modifiant la requête de manière à la faire planter
    Mais il n'est pas bon de donner trop d'information sur l'erreur car ça donne une idée de la structure de la table à quelqu'un qui voudrait s'attaquer à ton site

    Bien, ça m'a pris du temps !
    Dis moi si c'est plus clair maintenant

    Visiblement, tu commences de tout en bas en programmation, je répond à tes question, mais c'est plus un cours de php que je te fais, là.
    Plein de sites existent pour donner les bases, je te conseille vivement d'aller y faire un tour et d'apprendre petit à petit

    A+

    Code PHP:
    <?php

        $pdo 
    = new PDO("mysql:dbname=db_test;host=127.0.0.1","test_user","azerty", array(PDO::MYSQL_ATTR_FOUND_ROWS => true)); // Nouvel objet PDO
        
    $parametres_requete null// Paramètres qui vont être passés à la requête (voir plus bas)
        
    $formulaire_soumis false// On part du principe que le formulaire n'est pas soumis
        
    $test_donnees_formulaire false// On part du principe que le formulaire n'est pas correctement rempli
        
    $statut_requete false// On part du principe que la requête insert a échoué
        
    $chaine_erreur_sql ""// Chaine qui va contenir le message d'erreur si présent
        

        
    if // Test si le formulaire est soumis
        
    (
            (isset(
    $_POST["champ1"]) === true) AND
            (isset(
    $_POST["champ2"]) === true) AND
            (isset(
    $_POST["champ3"]) === true)
        )
        {
            
    $formulaire_soumis true// Garde en mémoire l'information comme quoi le formulaire est soumis
            
            
            // Test ici si les valeurs envoyées par le formulaire sont correctes
            // Exemple, si les champs dans la base sont du varchar(30), vérifier que chaque chaine envoyée par le formulaire fait 30 caractères max
        
            
    if    (    // Condition de validité des données
                    
    (strlen($_POST["champ1"]) <= 30) AND // Doit faire max 30 caractères
                    
    (strlen($_POST["champ2"]) <= 30) AND // Doit faire max 30 caractères
                    
    (strlen($_POST["champ3"]) <= 30// Doit faire max 30 caractères
                
    )
            {
                
    $test_donnees_formulaire true// Garde en mémoire l'information comme quoi le formulaire est bien rempli
                
    $st1 $pdo->prepare("insert into tb_test(col1,col2,col3) values(?,?,?)"); // Requête qui va être envoyée, adapte à ton cas
                
    $parametres_requete = array($_POST["champ1"], $_POST["champ2"], $_POST["champ3"]); // Chaque élément de ce tableau va être remplacé dans la requête là où il y a values(?,?,?).
                // $_POST["champ1"] va remplacer le 1er "?"
                // $_POST["champ2"] va remplacer le 2e "?"
                // $_POST["champ3"] va remplacer le 3e "?".
                // Evidemment, il doit y avoir autant de "?" que de paramètres à remplacer

                
    $st1->execute($parametres_requete); // Exécution avec le tableau de paramètres
                
    $statut_requete $st1->errorInfo(); // Récupération de l'état de la requête.
                // PDO::errorInfo() retourne un tableau à 3 éléments, doc de php http://php.net/manual/fr/pdo.errorinfo.php
                // [0] -> Code d'erreur SQLSTATE (un identifiant alphanumérique de cinq caractères défini dans le standard ANSI SQL).
                // [1] -> Code d'erreur spécifique au driver.
                // [2] -> Message d'erreur spécifique au driver.
                
                
    if(intval($statut_requete[1]) === 0// Si la requête est bien passé, le tableau donné par PDO::errorInfo() à l'indice [1] doit valoir 0, sinon, c'est une erreur
                
    {
                    
    $statut_requete true// Garde en mémoire l'information comme quoi la requête est passée correctement
                
    }
                else
                {
                    
    $chaine_erreur_sql "La requête a échoué avec un code " $statut_requete[1] . ". Le message de l'erreur est : " $statut_requete[2]; // Création d'un message d'erreur avec les indices [1] et [2] de PDO::errorInfo()
                
    }
                
            }
        }
    ?>


    <html>
    <head>
    </head>
    <body>
        <form method = "post">
            Champ 1<input type = "text" name = "champ1" /><br/>
            Champ 2<input type = "text" name = "champ2" /><br/>
            Champ 3<input type = "text" name = "champ3" /><br/>
            <input type = "submit" value = "Enregistrer" />
        </form>
        
        
        <?php
            
    if ($formulaire_soumis === true)
            {
                if (
    $test_donnees_formulaire === true)
                {
                    if (
    $statut_requete === true)
                    {
                        echo 
    "Enregistrement réussi<br/>";
                    }
                    else
                    {
                        echo 
    "Une erreur inconnue s'est produite<br/>";
                        echo 
    $chaine_erreur_sql "<br/>";
                    }
                }
                else
                {
                    echo 
    "Votre formulaire contient des erreurs<br/>";
                }
                
            }
        
    ?>
        
        
    </body>
    </html>

Discussions similaires

  1. URGENT: j'ai un probleme avec ma liste déroulante...PHP
    Par invitecd07c12f dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 19/09/2017, 21h24
  2. La liste déroulante des favrois ne s'affiche plus sur I.E 11
    Par invite23950fd4 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 29/03/2016, 11h23
  3. Liste déroulante Excel 2010
    Par invite315f6aa3 dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 30/07/2013, 16h21
  4. action sur liste deroulante
    Par invitec7fd8fb0 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 08/11/2011, 20h55
  5. Créer une liste déroulante sur java
    Par invite72eb6b69 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 11/01/2011, 14h52