Annonce

Réduire
Aucune annonce.

[RESOLU] Récupérer la valeur dans une liste d'éléments

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [RESOLU] Récupérer la valeur dans une liste d'éléments

    Bonjour à tous,

    Je me mets au PHP (je sais, je connais une dizaine de langages, et pas celui-ci, croyez moi je ne regrette pas) et j'ai un soucis pour récupérer la valeur se trouvant dans une liste d'éléments de la forme indiquée ci-dessous...

    Code HTML:
    <select name="eleves" id="eleves">
        <option value="eleve_1">e1</option>
        <option value="eleve_2">e2</option>
        <option value="eleve_3">e3</option>
    ...
    </select>
    Mon bouton qui permettra d'exécuter le code PHP

    Code HTML:
    <form action="" method="post">
        <input type="submit" value="Envoyer" />
        <input type="hidden" name="myButton" value="1" />
    </form>
    Je voudrai le récupérer l'élément sélectionné par un code PHP et j'ai testé cela, mais sans résultat

    Code PHP:
    <?php

    if($_POST['myButton'] == 1)
    {
       echo 
    $_POST['eleves'];
    }

    ?>
    EDIT: Mais aussi cela, tout aussi non fonctionnel...

    Code PHP:
    <?php

    if(isset($_POST['myButton']))
    {
       echo 
    $_POST['eleves'];
    }

    ?>
    Petite contrainte : Ne pas me mettre de code php dans ma liste créée, car ça serait horriblement illisible. Le code php doit être en dehors !

    Merci par avance,

    EDIT: Ça y est j'ai trouvé, en fait le bouton se trouvait pas dans le tag form, pfff....
    Dernière modification par fred, 29 avril 2017, 10h42.

  • #2
    J'ai vu que tu a résolue ton soucis, cependant je voudrais te donner un autre point de vue intéressant sur les formulaires. Car beaucoup les utilisent comme indiqué par Openclassroom ou d'autres sites mais souvent sans savoir que l'on peut élever le niveau en pratiquant comme en Python les listes ou Tableau, c'est à dire en affectant une valeur dans une liste en HTML que l'on appelle avec PHP.

    Code HTML:
    <form method = "post" action ="nom_fichier.php"> <!-- appel de mon fichier PHP -->
           <input type="submit" value="Envoyer" />
           <input type="hidden" name="myButton" value="1" />
    </form>
    Action va traiter le fichier à traiter. On peut mettre une URL ou un report dossier. Tu peux dans ton input l'utiliser pour récupérer une checkbox ou comme ça a l'air d'être le cas dans ton premier code une liste.

    Ensuite, la récupération de ton formulaire dont tu a choisis le type submit, donc un bouton d'envoi, sera comme ceci :

    Type submit et method post :

    Tu va donner un nom à celle ou celui qui va prendre part à ta liste ainsi :

    On créé un système de liste que l'on va lire et appeler par PHP :

    Code HTML:
    <select name="eleves[]" multiple = "multiple" id="eleves"> <!-- Tu remarque le [] qui signifie qu'il sera contenu dans une liste -->
        <option value="eleve_1">e1</option>
        <option value="eleve_2">e2</option>
        <option value="eleve_3">e3</option>
    ...
    </select>
    J'ai ajouter l'attribut multiple, qui permet de sélectionner et envoyer plusieurs valeurs.

    A mettre après span englober dans le div ou tout type de conteneur HTML.

    Code HTML:
    Nom <input type="text" name ="identity[]" /> <!-- Idem on reprend chaque valeur dans une liste -->
    Prénom <input type="text" name ="identity[]" />
    Âge <input type = "number" step ="1" name ="identity[]" />
    Code PHP:
    <?php
    if (isset($_POST["identity"]) && isset ($_POST["eleves"])) // on appelle avec la variable POST
    {

    $nom $_POST["identity"][0]; // On attribue à nos variables la valeur entré en rapport à sa position dans la liste 0 , 1 , 2
    $prenom $_POST["identity"][1];
    $age $_POST["identity"][2];
    $eleves $_POST["eleves"]; // Ici pas besoin puisque l'on a plusieurs valeurs aléatoires traité ensuite
    echo "Bienvenue cher : <b> $prenom"stripslashes($nom), "</b> </br> vous avez donc <b>$age ans</b> ";
    echo 
    "vous êtes éléves en :";
    echo 
    "<ul>";
    foreach (
    $eleves as $valeur// Voilà on traite notre liste ici en donnant pour chaque valeurs reçues une variable qui s'affichera avec echo
    {
    echo 
    " <li> $valeur </li>";
    }

    echo 
    "</ul>";

    }
    ?>
    Tu peux aller plus loin et implémenter dans PHP un script qui va ouvrir un pop-up ou un prompt désignant la valeur a changer, bref on peut aller vraiment loin.

    J'espère t'avoir montrer une autre façon de bosser avec les formulaires en PHP à défaut de t'avoir aider puisque tu a trouver la solution toi même.
    Dernière modification par DreAmuS, 29 avril 2017, 19h06.

    Commentaire


    • #3
      Merci Dreamus pour les astuces,

      Tant que je t'ai sous la main, peut-on en réseau local utiliser la fonction mail en php lors des tests pour vérifier son fonctionnement ? Car lors de mes tests, ça n'a malheureusement pas pu être le cas.

      As-tu aussi un hébergeur gratuit (pour l'instant) à me conseiller pour que je puisse faire mes tests ?

      Merci par avance,

      Commentaire


      • #4
        Alors pour la fonction native mail() chez PHP, il faut que ton serveur soit activer. Tu a sinon l'alternative de la fonction email() qui ne permet d'envoyer des mails qu'à partir de ton adresse mail.


        En local tu peux en ouvrant php.ini tu recherche :

        Code:
        [mail function]
        ; For Win32 only.
        ; http://php.net/smtp
        SMTP = 127.0.0.1
        ; http://php.net/smtp-port
        smtp_port = 25
        
        ; For Win32 only.
        ; http://php.net/sendmail-from
        ;sendmail_from = [email protected]
        Tu met les valeurs correspondantes dans SMTP et dans sendmail_from.

        Ensuite, tu peux tester la fonction : http://php.net/manual/fr/function.mail.php
        Code PHP:
        <?php  mail"[email protected]"Sujet" "Contenu du message" );  ?>
        Maintenant si tu a des souci avec ton FAI ou d'envoie, tu peux installer sendmail sur ton local. Pour ce qui est d'hébergeur gratuit : Les mieux sont : https://shost.ca/ et https://www.livehost.fr/ Voilà j'espère t'avoir aider, je vais me coucher, j'ai vu ton poste juste avant d'aller au lit

        Commentaire


        • #5
          La ligne "For Win32 only" ne veut pas dire que c'est une config sous Windows ? J'ai juste modifier la variable smtp_path avec le chemin de sendmail. Dois je faire ce que tu m'as dis sous Unix ?

          Merci pour tes lumières,

          EDIT: Résolu pour la config, j'ai installé ssmtp (réponse de Dima)et juste touché au path sendmail comme dis précédemment et tout est ok, encore merci
          Dernière modification par fred, 01 mai 2017, 08h42.

          Commentaire


          • #6
            Alors je vais être franc sous Linux, je n'ai jamais fait de local, j'ai toujours développé sous Windows WAMP puis sous un hébergement gratuit. Mais j'ai trouvé quelques liens présentant la solution :

            http://www.journaldunet.com/developp...localhost.html

            Alors, la fonction mail () envoie le message caractérisé par les différents paramètres à un serveur de messagerie définie par les caractéristiques dans PHP.ini.

            Il faut savoir que tu dois surtout indiquer le PATH vers ton Sendmail car il devrait je pense sous Linux être installer par défaut si ce n'est pas le cas alors il faut en installer un et indiquer dans le ini le chemin. Pourquoi ? Simplement, tu ne peux pas envoyer de mail avec la fonction mail () puisque tu n'as pas indiqué par quel serveur SMTP il doit passer. Si tu souhaite passer par celui du FAI :

            Code:
            ; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
            
            sendmail_path = "sendmail -t -i -f<nom>@<domaine>"
            http://www.commentcamarche.net/faq/8...principaux-fai

            Tu comprends, tu peux envoyer les mail() par ton FAI en local seulement, cependant il existe toujours d'énormes soucis d'envoi ou de réception du aux multiples pare-feu anti-spam de parts et d'autres qui compliquent la tâche et relance des Warnings ou des boucles sans fin.
            Si tu veux au contraire utiliser un service de mailing tel que Gmail ou Outlook,... il te faudra utiliser un Sendmail et indiquer dans ton script les en-têtes ainsi que les codes d'accès indispensable afin que la connexion se fasse.

            Dans ce cas tu a Sendmail ou PHP mailer,...

            Exemple :
            Code:
            $mail->Username = '[email protected]';
            $mail->Password = '[email protected]#';
            Sachant qu'il faut activer pour Gmail par exemple:
            https://myaccount.google.com/lesssecureapps

            Comme tu comprends les nombreuses options de sécurité ne permettent pas souvent d'envoyer le mail du Local Host.


            Tu dois remplir oui les informations même si c'est sous Linux. Le souci étant que suivant la distribution tu n'aura pas les mêmes packages. Sous Ubuntu par exemple, il possède en Sendmail Postfix : http://www.postfix.org/

            Donc, je t'ai trouvé ces deux liens qui génèrent une solution approuvé :

            https://forum.ubuntu-fr.org/viewtopic.php?id=378537
            https://dunglas.fr/2008/07/php-mail-debian-ubuntu/

            Si tu va sur la Doc officiel de PHP, il l'indique au début
            Le comportement de ces fonctions est affecté par la configuration dans le fichier php.ini.
            Donc tu a comme exemple : sendmail_path = "/usr/sbin/sendmail -t -i -f [email protected]"
            Et il précise : The path should work for most linux installations.
            https://php.developpez.com/faq/?page=mail#envoi-mail


            Conclusion

            Donc, tu l'auras compris pour résumer, il faut bien configurer php.ini même les parties correspondants à Win, il faut remplir la partie Linux en la dé-commentant et surtout envoyer le PATH vers un service Mail valide comme Sendmail. Si il n'y en a pas d'installer, il faut en choisir un et l'installer (Postfix/Ubuntu, Sendmail ou exim/Debian). Si tu passe par le service mailing tu devras aussi configurer ce dernier pour indiquer les Auth exemple avec Sendmail dans sendmail.ini

            Code:
            [sendmail]
            
            smtp_server=<adresse de votre serveur SMTP>
            smtp_port=<port du serveur SMTP (25 par défaut)>
            
            auth_username=<login de connexion>
            auth_password=<mot de passe de connexion>
            Pour finir, voici quelques PDF pour t'appuyer dans ta démarche :

            J'espère t'avoir aidé ou du moins guidé sur ce problème, je sais de mémoire que j'avais galéré sous Windows pour juste envoyer un mail en passant par mon FAI. Alors sous Linux, je me doute que c'est une autre paire de manche. Si tu y arrive j'espère que tu me tiendras au courant. D'autres parts pour le script PHP par la suite si tu a besoin d'aides afin d'en créer un plus élaboré je serais ravi de t'aider pas-à-pas. Car là je pense que le PHP ne verra pas la différence entre Unix et Windows.

            Sache que je suis sous 5X, je ne suis pas passé sous 7 pour des raisons évidentes
            Dernière modification par DreAmuS, 01 mai 2017, 09h22.

            Commentaire


            • #7
              Hello Dreamus,

              Merci pour les renseignements !

              Alors oui j'ai réussi... Je ne suis pas passé par PHPMailer comme beaucoup le conseille ou le propose, mais par la fonction mail déjà présente dans le standard php.

              Pour cela j'ai utilisé ssmtp et suis rentré dans la configuration ssmtp qui est le fichier ssmtp.conf.

              J'ai ajouté certaines lignes, le fichier ressemble donc à ceci

              Code:
              #
              # Config file for sSMTP sendmail
              #
              # The person who gets all mail for userids < 1000
              # Make this empty to disable rewriting.
              root=postmaster
              
              # The place where the mail goes. The actual machine name is required no
              # MX records are consulted. Commonly mailhosts are named mail.domain.com
              mailhub=smtp.gmail.com:587 # Pour gmail
              UseSTARTTLS=YES
              AuthUser=... # Mon nom d'utilisateur
              AuthPass=... # Mon mot de passe
              
              # Where will the mail seem to come from?
              #rewriteDomain=
              
              # The full hostname
              hostname=... # créé automatiquement
              
              # Are users allowed to set their own From: address?
              # YES - Allow the user to specify their own From: address
              # NO - Use the system generated From: address
              #FromLineOverride=YES
              Après j'ai été dans la configuration gmail pour retirer la sécurité des applications, sinon gmail bloque ! Tu l'as dis dans ton précédent message.

              Donc ça fonctionne très bien, plus qu'à continuer la découverte vers ce langage

              Commentaire


              • #8
                Dans mon pavé d'avant effectivement je préconisais d'éditer la config du sendmail, mais comme j'ai préciser n'ayant pas les informations sur ton UNIX, il m'est difficile de savoir comment te guider d'où l'ebook de 10 pages juste avant.

                De rien, comme je t'ai dit si après tu veux des renseignements pas de soucis, même si je ne suis pas le plus féru en PHP et sachant que je bosse dans un tout autre domaine aujourd'hui, je serais ravi de t'aider pour les nombreuses fois où tu l'a fait

                Je pense donc que tu es sous Débian sachant que tu a configuré sendmail ssmtp.conf. Ou alors tu l'a installer sous Ubuntu ? Je ne sais pas s'il est dans le paquets d'origines ?

                Pour aller voir visiblement si les mail() sont partis c'est dans:
                /var/log/mail.log

                N'hésite pas à partager tes scripts ou les soucis afin que l'on essais de les résoudre ensemble, cela profitera l'ensemble de la communauté je pense. Je te cache pas que je préfère parler codage de nos jours qu'autre chose
                Dernière modification par DreAmuS, 01 mai 2017, 11h43.

                Commentaire


                • #9
                  Je pense donc que tu es sous Débian sachant que tu a configuré sendmail ssmtp.conf. Ou alors tu l'a installer sous Ubuntu ? Je ne sais pas s'il est dans le paquets d'origines ?
                  Effectivement, Ubuntu !

                  Pour aller voir visiblement si les mail() sont partis c'est dans:
                  /var/log/mail.log
                  Oui j'avais lu cela, merci pour l'info...

                  N'hésite pas à partager tes scripts ou les soucis afin que l'on essais de les résoudre ensemble, cela profitera l'ensemble de la communauté je pense. Je te cache pas que je préfère parler codage de nos jours qu'autre chose
                  À mon avis, PHP restera un langage pour une utilisation courante dans mon métier, donc rien à voir avec les notions présentées dans ce forum, mais je n'hésiterai pas à te demander conseil à nouveau afin de m'éclairer sur certains points.

                  Encore merci !

                  Commentaire

                  Chargement...
                  X