Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucle pour raccourcir

Sujet résolu
    3 août 2006 à 12:10:49

    Bonjour,

    Voilà, je travaille sur une application de répertoire et je recontre un problème. Je désirerais avoir l'avis d'experts car je suis débutante.
    Alors voilà sans plus tarder mon problème et le code.

    Un 1er code qui m'affiche le contenu de ma base de données par lettres. En utilisant cette méthode, j'ai bien les données qui s'affichent par page selon l'initiale :

    fichier : repertoire.php
    <a href='repertoire.php?action=afficher&choix=lettre'> Par lettre&nbsp;</a> <br /

    <?php
    // connection au serveur MySQL
    $connexion = mysql_connect("localhost" , "root" , "") or die ("Connection à MySQL impossible".mysql_error());
           
    // connection à la base de données
    $base = mysql_select_db("espace_perso" , $connexion) or die ("Accès à la base impossible" .mysql_error());     

    if (isset($_GET['action']) AND isset($_GET['choix']))
    {
            $action = $_GET['action'];
            $choix = $_GET['choix'];
    }

    // Afficher en SELECTIONNANT UNE INITIALE
    if ($action == 'afficher')
    {
            if ($choix == 'lettre')
            {
                    // création d'un tableau à 1 dimension pour mettre l'alphabet
                    $lettres = array (1 => "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
                    for ($a = 1 ; $a <= 26 ; $a++)
                    {
                            // affichage dans une nouvelle page
                            echo "<a href='repertoire.php?action=afficher&choix=$lettres[$a]'> $lettres[$a]</a> &nbsp;";
                    }
            }
            elseif ($choix == "A")
            {
                    echo "<font size='7' font color='red'>   $choix  </font> <br> <br>";
                    $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$choix%'";
                    $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                    while ($tout = mysql_fetch_array($result_tout))
                    {
                            $nom = strtoupper($tout['nom']);                // met directement les minucules en Majuscules
                            $prenom = strtoupper($tout['prenom'])// idem
                            $adresse = $tout['adresse'];
                            $ville = $tout['ville'];
                            $code_postal = $tout['code_postal'];
                            $tel_bureau = $tout['tel_bureau'];
                            $tel_fixe = $tout['tel_fixe'];
                            $categorie = $tout['categorie'];
                            $tel_port_1 = $tout['tel_port_1'];
                            $tel_port_2 = $tout['tel_port_2'];
                            $mail_1 = $tout['mail_1'];
                            $mail_2 = $tout['mail_2'];
                            $mail_3 = $tout['mail_3'];
                                           
                    echo "<font size=5> <b> $nom &nbsp; $prenom </b> </font> <br>
                                    Adresse : <b>$adresse</b> &nbsp; &nbsp; &nbsp;  Ville : <b>$ville</b> &nbsp; &nbsp; &nbsp; Code postal : <b>$code_postal</b> <br>
                                    Catégorie : <b>$categorie</b> <br>
                                    Téléphone fixe :  <b>$tel_fixe</b>  &nbsp; &nbsp; &nbsp;  De bureau : <b>$tel_bureau</b> <br>
                                    Téléphone portable : <b>$tel_port_1</b> &nbsp; &nbsp; &nbsp;&nbsp; <b>$tel_port_2</b> <br>
                                    Email : <b>$mail_1</b> &nbsp; &nbsp; &nbsp; &nbsp;      <b>$mail_2</b> &nbsp; &nbsp; &nbsp; &nbsp; <b>$mail_3</b> <br> <br>"
    ;
                    }
            }
            elseif ($choix == "B")
            {
                    echo "<font size='7' font color='red'>   $choix  </font> <br> <br>";
                    $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$choix%'";
                    $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                    while ($tout = mysql_fetch_array($result_tout))
                    {
                            $nom = strtoupper($tout['nom']);                // met directement les minucules en Majuscules
                            $prenom = strtoupper($tout['prenom'])// idem
                            $adresse = $tout['adresse'];
                            $ville = $tout['ville'];
                            $code_postal = $tout['code_postal'];
                            $tel_bureau = $tout['tel_bureau'];
                            $tel_fixe = $tout['tel_fixe'];
                            $categorie = $tout['categorie'];
                            $tel_port_1 = $tout['tel_port_1'];
                            $tel_port_2 = $tout['tel_port_2'];
                            $mail_1 = $tout['mail_1'];
                            $mail_2 = $tout['mail_2'];
                            $mail_3 = $tout['mail_3'];
                                           
                    echo "<font size=5> <b> $nom &nbsp; $prenom </b> </font> <br>
                                    Adresse : <b>$adresse</b> &nbsp; &nbsp; &nbsp;  Ville : <b>$ville</b> &nbsp; &nbsp; &nbsp; Code postal : <b>$code_postal</b> <br>
                                    Catégorie : <b>$categorie</b> <br>
                                    Téléphone fixe :  <b>$tel_fixe</b>  &nbsp; &nbsp; &nbsp;  De bureau : <b>$tel_bureau</b> <br>
                                    Téléphone portable : <b>$tel_port_1</b> &nbsp; &nbsp; &nbsp;&nbsp; <b>$tel_port_2</b> <br>
                                    Email : <b>$mail_1</b> &nbsp; &nbsp; &nbsp; &nbsp;      <b>$mail_2</b> &nbsp; &nbsp; &nbsp; &nbsp; <b>$mail_3</b> <br> <br>"
    ;
                    }
            }
    }// FIN afficher en SELECTIONNANT UNE LETTRE
    ?>


    Ici j'obtiens exactement ce que je veux mais comme vous pouvez le voir le code n'est actuellement fait que pour A et B. Et comme l'alphabet compte 26 lettres, je me suis dit qu'on pouvait utiliser une boucle pour automatiser tout ça !!!
    Mais voilà, j'ai utilisé et fais des tests avec des boucles while, for et même foreach (voir ci-dessous code avec foreach) mais je n'obtiens alors plus ce que je souhaite.

    code avec utilisation de la boucle foreach : repertoire.php
    // Afficher en SELECTIONNANT UNE INITIALE
            elseif ($choix == 'lettre')
            {
                    // création d'un tableau à 1 dimension pour mettre l'alphabet
                    $lettres = array (1 => "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
                    for ($a = 1 ; $a <= 26 ; $a++)
                    {
                            // affichage dans une nouvelle page
                            echo "<a href='repertoire.php?action=afficher&choix=$lettres[$a]'> $lettres[$a]</a> &nbsp;";
                           
                    }
            }
            else
            {
                    $lettres = array (1 => "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
                    foreach ($lettres as $value)
                    {                     
                            echo "<font size='7' font color='red'>   $value  </font> <br> <br>";
                            $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$value%'";
                            $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                            while ($tout = mysql_fetch_array($result_tout))
                            {
                                    $nom = strtoupper($tout['nom']);                // met directement les minucules en Majuscules
                                    $prenom = strtoupper($tout['prenom'])// idem
                                    $adresse = $tout['adresse'];
                                    $ville = $tout['ville'];
                                    $code_postal = $tout['code_postal'];
                                    $tel_bureau = $tout['tel_bureau'];
                                    $tel_fixe = $tout['tel_fixe'];
                                    $categorie = $tout['categorie'];
                                    $tel_port_1 = $tout['tel_port_1'];
                                    $tel_port_2 = $tout['tel_port_2'];
                                    $mail_1 = $tout['mail_1'];
                                    $mail_2 = $tout['mail_2'];
                                    $mail_3 = $tout['mail_3'];
                                           
                            echo "<font size=5> <b> $nom &nbsp; $prenom </b> </font> <br>
                                            Adresse : <b>$adresse</b> &nbsp; &nbsp; &nbsp;  Ville : <b>$ville</b> &nbsp; &nbsp; &nbsp; Code postal : <b>$code_postal</b> <br>
                                            Catégorie : <b>$categorie</b> <br>
                                            Téléphone fixe :  <b>$tel_fixe</b>  &nbsp; &nbsp; &nbsp;  De bureau : <b>$tel_bureau</b> <br>
                                            Téléphone portable : <b>$tel_port_1</b> &nbsp; &nbsp; &nbsp;&nbsp; <b>$tel_port_2</b> <br>
                                            Email : <b>$mail_1</b> &nbsp; &nbsp; &nbsp; &nbsp;      <b>$mail_2</b> &nbsp; &nbsp; &nbsp; &nbsp; <b>$mail_3</b> <br> <br>"
    ;
                            }
                   
                   
                    }       
                   
            }// FIN afficher en SELECTIONNANT UNE LETTRE


    Peut-être que je n'utilise pas les bonnes variables ou les bonnes boucles, ou alors encore peut-être un problème de placement ...
    Bref, je demande donc, si quelqu'un peut m'aider. Si oui ou non on peut faire en sorte d'utiliser une ou plusieurs boucles pour raccourcir mon code ou si je dois continuer mon 1er script mais pour toutes les lettres de l'aphabet.
    J'espère avoir été assez clair (c'est plus simple en expliquant de vive voix que par écrit ;) ).

    Merci à tous ceux qui pourront m'aider.
    Au revoir
    caline
    • Partager sur Facebook
    • Partager sur Twitter
      3 août 2006 à 12:15:25

      oui mais c'est con...
      dans ton premier script, si j'ai bien lu (j'ai vite parcouru), t'as exactement le mme script pour $choix == A et $choix == B...
      Ce qui est normal.

      Et dans le code, tu utilise meme pas A ou B, mais juste $choix.
      Ce qui est normal aussi.

      J'pense que si t'nelevais tes elsif, ca serai pareil....

      Aprés, comment entrer dans la boucle si tu viens du lien?
      grace a un $_GET bien choisit :)
      • Partager sur Facebook
      • Partager sur Twitter
        3 août 2006 à 20:36:27

        Voilà, j'ai encore passé une partie de l'après-midi à chercher comment faire pour raccourcir mon code mais malgré les conseils de riesseg, je n'y arrive pas. Pourtant je suis sûre de ne pas être loin de la solution mais je tourne en rond.

        Quelqu'un pourrait-il se pencher sur mon code pour m'aider ?

        Au revoir
        caline
        • Partager sur Facebook
        • Partager sur Twitter
          3 août 2006 à 22:38:10

          bon, petit developpement:

          quand choix='lettre', du choisi une lettre.
          quand tu reviens sur le script, $choix='A' ou 'B', ou 'C'... ou 'Z'.
          Apres, dans ta requete, quoi qu'il en soit, tu as:
          $req_tout = "SELECT * FROM repertoire WHERE nom LIKE ". $choix ."%";
          donc, si tu remplace fais un echo de $req_tout, tu as:
          SELECT * FROM repertoire WHERE nom LIKE A% ou
          SELECT * FROM repertoire WHERE nom LIKE B% ou
          SELECT * FROM repertoire WHERE nom LIKE C% ou
          ...
          SELECT * FROM repertoire WHERE nom LIKE Z%

          Donc, comme tu peux le voir, t'as pus besoin de faire tes 26 elseif ;)
          t'aura juste a afficher normalement :)

          c'est con quand même...
          Asque tout le code, tu l'as... T'as juste oublié de penser à un truc.

          moral:
          Faut toujours faire un echo de sa requete quand on developpe, pour savoir la geule qu'elle a, et comment continuer apres.

          aller hop, a toi de jouer maintenant ;)
          • Partager sur Facebook
          • Partager sur Twitter
            4 août 2006 à 10:30:43

            Bonjour riesseg,

            J'ai bien lu ta réponse et j'étais arrivée à supprimer tous mes "elseif" et en n'utilisant que la variable $choix (cela figure sur mon 2ème code posté dans mon 1er message ;) )

            En fait mon problème se situe à un autre endroit et je sais que c'est peut-être bête et que je dois oublier quelquechose mais ce que je cherche à faire est d'afficher les noms et les coordonnées sur la page dont la lettre correspond à la page. J'explique.

            j'ai créé un fichier "repertoire.php" dans lequel il y a plusieurs actions.
            La 1er concerne l'affichage. J'ai donc 2 liens :
            - un lien pour afficher tout ce qui est dans ma bdd dans l'ordre des enregistrements et non pas alphabétique (c'est mon choix). Donc la "page" où tout est affiché s'appelle "repertoire.php?action=afficher&choix=tout".
            - ensuite un deuxième lien qui envoie sur une "page" où figure la liste alphabétique sous forme de liens. Cette page s'appelle "repertoire.php?action=afficher&choix=lettre".
            Ensuite c'est là que mon problème commence, quand je clique sur le lien "A" j'arrive bien sur ma page A mais rien ne s'y affiche et c'est la même chose pour toutes les lettres.

            J'ai essayé de changer l'url des liens lettre en mettant "repertoire.php?action=afficher&choix=lettre&initiale=$lettres[$a]", mais ça ne marche toujours pas !
            Je n'arrive pas à "boucler mes pages". La seule solution que j'ai trouvé jusqu'à présent pour obtenir le résultat voulu, eh bien c'est mon script 1 où je teste chaque lettre (avec tous mes elseif). Là, j'ai bel et bien les noms et les coordonnées de l'initiale choisi qui s'affiche dans la page de l'initiale.

            J'ai été un peu longue et j'espère m'être bien expliqué.

            Merci à toi riesseg
            caline
            • Partager sur Facebook
            • Partager sur Twitter
              4 août 2006 à 10:52:15

              Salut,
              Tu peux déclarer ton array des en-dehors des if puisqu'il sert plusieurs fois.
              Et après tu vérifies si choix est une des lettres de l'array ainsi :
              if(in_array(strtoupper($_GET['choix']), $lettres))
              {
                  $retour = mysql_query("SELECT champ1, champ2 FROM table WHERE LEFT(nom, 1) = '".$_GET['choix']."'");// LEFT(nom, n) prend n lettres en partant de la gauche et est plus rapide que LIKE
              }

              Et pour ton for(1; <= 26; ++) pourquoi ne pas faire un foreach ?
              @+
              • Partager sur Facebook
              • Partager sur Twitter
                4 août 2006 à 11:14:11

                Aussi, SELECT * FROM .... c'est pas super, si tu te sers pas de tous les champs, indique toi même les champs a prendre en compte :) bon courage pour la suite
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  4 août 2006 à 11:18:15

                  ET pour creer tes array qui contiennent l'alphabet, utilise range() ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 août 2006 à 11:21:57

                    C'est marrant, dès qu'il s'agit d'une fille qui fait preuve de volonté et qui a besoin d'aide, tout les gens du forum ils sont gentils et tout :-° Ahlala le pouvoir des femmes...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 août 2006 à 11:22:38

                      <?php
                      //Prenons comme exemple, que l'utilisateur a cliquer sur le lien A:
                      $choix = 'A';
                      //Hop, je le mets en dur, comme ca y'a pas de pb quand tu va tester ton script.

                      //J'mets tout en commentaire, car on va partir du principe que ton elesif marche bien.
                      //donc je le chinte, pour que tu te focalise uniquement sue la partie qui nous interesse.
                      /*
                              //choix == 'A', donc je rentre pas ici...
                              elseif ($choix == 'lettre')
                              {
                                      // création d'un tableau à 1 dimension pour mettre l'alphabet
                                      $lettres = array (1 => "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
                                      for ($a = 1 ; $a <= 26 ; $a++)
                                      {
                                              // affichage dans une nouvelle page
                                              echo "<a href='repertoire.php?action=afficher&choix=". $lettres[$a]. "'> ". $lettres[$a]. "</a> &nbsp;";
                                      }
                              }
                              //... mais ici
                              else
                              {*/

                                  //choix=='A', toujours.
                                 
                                  //ici, je fait donc afficher un gros A, en rouge :p   
                                  echo "<font size='7' font color='red'>   $choix  </font> <br> <br>";
                                  //Pleins de gens te diron de pas utiliser *, mais de nommer tous tes champs.
                                  //Bin j'suis daccord avec eux, asque si ils le font, ils doivent avoir raison.
                                  //Mais vu que j'ai la flemme de corriger, je te laisse faire.
                                  $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '". $choix ."%'";
                                  echo $req_tout; // devrai afficher SELECT * FROM repertoire WHERE nom LIKE 'A%'
                                  $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                                  //donc la, je viens donc de recuperer tous les gens qui commencent par A
                                  while ($tout = mysql_fetch_array($result_tout))
                                  {
                                        //hop, dans cette boucle, on recupere les variables, pas de probleme...
                                        $nom = strtoupper($tout['nom']);                // met directement les minucules en Majuscules
                                        $prenom = strtoupper($tout['prenom'])// idem
                                        $adresse = $tout['adresse'];
                                        $ville = $tout['ville'];
                                        $code_postal = $tout['code_postal'];
                                        $tel_bureau = $tout['tel_bureau'];
                                        $tel_fixe = $tout['tel_fixe'];
                                        $categorie = $tout['categorie'];
                                        $tel_port_1 = $tout['tel_port_1'];
                                        $tel_port_2 = $tout['tel_port_2'];
                                        $mail_1 = $tout['mail_1'];
                                        $mail_2 = $tout['mail_2'];
                                        $mail_3 = $tout['mail_3'];
                                               
                                        //et ici, on l'affiche.             
                                        echo "<font size=5> <b> $nom &nbsp; $prenom </b> </font> <br>
                                                              Adresse : <b>$adresse</b> &nbsp; &nbsp; &nbsp;  Ville : <b>$ville</b> &nbsp; &nbsp; &nbsp; Code postal : <b>$code_postal</b> <br>
                                                              Catégorie : <b>$categorie</b> <br>
                                                              Téléphone fixe :  <b>$tel_fixe</b>  &nbsp; &nbsp; &nbsp;  De bureau : <b>$tel_bureau</b> <br>
                                                              Téléphone portable : <b>$tel_port_1</b> &nbsp; &nbsp; &nbsp;&nbsp; <b>$tel_port_2</b> <br>
                                                              Email : <b>$mail_1</b> &nbsp; &nbsp; &nbsp; &nbsp;      <b>$mail_2</b> &nbsp; &nbsp; &nbsp; &nbsp; <b>$mail_3</b> <br>__________________________________________________<br>"
                      ;
                                  //la fin du while, donc on va chercher le A suivant.
                                  //etc, etc.
                                  }//fin while
                             // }//fin elsif   
                             
                      // normalement, si tu es sur de ta base de donnée et de ton code, ca devrai marcher.
                      // Moi j'ai rien corriger de ton code, j'ai juste enlever ton for, et commenter pleins partout.
                      // test tel quel, et dit moi.   
                      ?>


                      Voila ce que je t'expliquais.
                      Bien sur, j'te conseille vivement de suivre les divers conseils si dessus, que je n'ai lu asque quand je suis passé, il étaient pas encore la :p

                      Si ca ca marche, bin c'est cool :)
                      Et vu que j'ai que lu en diago ton post (asque j'ai lu le message que tu m'as laissé en premier), bin j'tai juste developper ce que j'expliquais plus haut.

                      Le but, c'est d'avoir deja partout des bouts de code qui marche, pis ensuite on relie le tout avec un ti lien et c'est fini ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        4 août 2006 à 11:53:50

                        Citation : Kyo

                        C'est marrant, dès qu'il s'agit d'une fille qui fait preuve de volonté et qui a besoin d'aide, tout les gens du forum ils sont gentils et tout :-° Ahlala le pouvoir des femmes...



                        Honnetement, j'avais même pas fais attention mais maintenant que tu le dis :p
                        Allez on bosse!
                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 août 2006 à 12:06:38

                          Re-bonjour à tous,

                          Tout d'abord un grand merci à vous tous pour votre aide.

                          Pour ce qui est de la fonction rage(), je ne la connais pas mais je vais me documenter :) .

                          Ensuite, pour ma requete SELECT *....... c'est tout simplement parce que j'ai besoin de toutes ces informations concernant chaque nom pour pouvoir afficher les coordeonnées dans mon écho après ma requete.

                          Et ensuite si j'ai posté c'est parce que j'ai fais plein de tests de mon côté avant mais sans parvenir au résultat souhaité. J'ai déjà testé avec des for , des while et des foreach.

                          ensuite, je vois que mon système de $choix == 'lettre' et $choix == "A" (par exemple prête à confusion.

                          Alors voilà j'ai modifié mon url pour que ce soit plus clair :
                          // Afficher en SELECTIONNANT UNE INITIALE
                                  elseif ($choix == 'lettre')
                                  {
                                          // création d'un tableau à 1 dimension pour mettre l'alphabet
                                          $lettres = array (1 => "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
                                          for ($a = 1 ; $a <= 26 ; $a++)
                                          {
                                                  // affichage dans une nouvelle page
                                                  echo "<a href='repertoire.php?action=afficher&choix=lettre&initiale=$lettres[$a]'> $lettres[$a]</a> &nbsp;";
                                          }
                                  }
                                 
                                  else
                                  {
                                          for ($initiale == "A" ; $initiale == "Z" ; $initiale++)
                                          {
                                          echo "<font size='7' font color='red'>   $initiale  </font> <br> <br>";
                                          $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$initiale%'";
                                          $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                                          while ($tout = mysql_fetch_array($result_tout))
                                          {
                                                  $nom = strtoupper($tout['nom']);                // met directement les minucules en Majuscules
                                                  $prenom = strtoupper($tout['prenom'])// idem
                                                  $adresse = $tout['adresse'];
                                                  $ville = $tout['ville'];
                                                  $code_postal = $tout['code_postal'];
                                                  $tel_bureau = $tout['tel_bureau'];
                                                  $tel_fixe = $tout['tel_fixe'];
                                                  $categorie = $tout['categorie'];
                                                  $tel_port_1 = $tout['tel_port_1'];
                                                  $tel_port_2 = $tout['tel_port_2'];
                                                  $mail_1 = $tout['mail_1'];
                                                  $mail_2 = $tout['mail_2'];
                                                  $mail_3 = $tout['mail_3'];
                                                                 
                                          echo "<font size=5> <b> $nom &nbsp; $prenom </b> </font> <br>
                                                          Adresse : <b>$adresse</b> &nbsp; &nbsp; &nbsp;  Ville : <b>$ville</b> &nbsp; &nbsp; &nbsp; Code postal : <b>$code_postal</b> <br>
                                                          Catégorie : <b>$categorie</b> <br>
                                                          Téléphone fixe :  <b>$tel_fixe</b>  &nbsp; &nbsp; &nbsp;  De bureau : <b>$tel_bureau</b> <br>
                                                          Téléphone portable : <b>$tel_port_1</b> &nbsp; &nbsp; &nbsp;&nbsp; <b>$tel_port_2</b> <br>
                                                          Email : <b>$mail_1</b> &nbsp; &nbsp; &nbsp; &nbsp;      <b>$mail_2</b> &nbsp; &nbsp; &nbsp; &nbsp; <b>$mail_3</b> <br> <br>"
                          ;
                                          }
                                          }
                                  }
                          }// FIN afficher en SELECTIONNANT UNE LETTRE

                          Ce code me raccourcis considérablement mon code mais ne fonctionne pas.

                          La seule méthode qui fonctionne est le 1er script de mon 1er post où je teste chaque page individuellement.

                          Je cherchais simplement une façon d'automatiser pour ne pas répéter une fraction de code 26 fois ! car je suis casiment sûre que c'est fesable. :D

                          Néanmoins je continue de chercher.
                          Et encore merci à vous tous pour votre aide.
                          caline
                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 août 2006 à 12:10:21

                            voila ma version
                            <?php
                            foreach(range('A', 'Z') as $key => $value)
                            {
                                //Tes instructions. $value vaudra successivement A, B, C, ..., Z, donc ca devrait aller
                            }
                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 août 2006 à 12:15:09

                              J'ai essayé un truc dans ce style là (sans le range) mais les données s'affichaient toutes sur la même page alors que j'ai créé 26 pages par les liens et que je désire que toutes les personnes dont le nom commence par A s'affichent dans ma page "A" et que les nom des personnes commençant par B s'affichent sur la page "B".

                              C'est ça que je n'arrive pas à faire. On dirait qu'on ne peut pas "boucler des pages".

                              Est-ce que vous comprenez ?

                              EDIT : 13h45 : voilà, j'ai encore continué à chercher. J'ai réussi à raccourcir mon code mais pour l'instant je ne vois pas d'autre solution que de garder $choix dans l'url et de tester avec chacune des lettres et là ça fonctionne.
                              Je donne mon nouveau code, si quelqu'un a une autre idée...
                              // Afficher en SELECTIONNANT UNE INITIALE
                                      elseif ($choix == 'lettre')  // on créé une page sur laquelle va figurer tous les liens qui vont envoyer vers les pages alphabétiques
                                      {
                                              // création d'un tableau à 1 dimension pour mettre l'alphabet
                                              $lettres = array (1 => "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
                                              for ($a = 1 ; $a <= 26 ; $a++)
                                              {
                                                      // affichage dans une nouvelle page avec la liste des différents liens
                                                      echo "<a href='repertoire.php?action=afficher&choix=$lettres[$a]'> $lettres[$a]</a> &nbsp;";
                                              }
                                      }
                                     
                                      else // sinon on va tester la page sur laquelle on se trouve et on pose sa requête
                                      {
                                              if ($choix == 'A') // si je suis sur la page "A" alors....
                                              {
                                                      echo "<font size='7' font color='red'>   $choix  </font> <br> <br>";
                                                      $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$choix%'";
                                                      $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                                              }       
                                              elseif ($choix == 'B')// si je suis sur la page "B" alors....
                                              {
                                                      echo "<font size='7' font color='red'>   $choix  </font> <br> <br>";
                                                      $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$choix%'";
                                                      $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                                              }       
                                              elseif ($choix == 'C')// si je suis sur la page "C" alors....
                                              {
                                                      echo "<font size='7' font color='red'>   $choix  </font> <br> <br>";
                                                      $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$choix%'";
                                                      $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                                              }
                                              elseif ($choix == 'D')
                                              {
                                                      echo "<font size='7' font color='red'>   $choix  </font> <br> <br>";
                                                      $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$choix%'";
                                                      $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                                              }
                                              elseif ($choix == 'E')
                                              {
                                                      echo "<font size='7' font color='red'>   $choix  </font> <br> <br>";
                                                      $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$choix%'";
                                                      $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                                              }
                                             
                                             
                                              // on boucle pour prendre les infos de la bdd qui vont servir à l'affichage         
                                              while ($tout = mysql_fetch_array($result_tout))
                                              {
                                                      echo "<font size=5> <b> {$tout['nom']} &nbsp; {$tout['prenom']} </b> </font> <br>
                                                              Adresse : <b>{$tout['adresse']}</b> &nbsp; &nbsp; &nbsp;  Ville : <b>{$tout['ville']}</b> &nbsp; &nbsp; &nbsp; Code postal : <b>{$tout['code_postal']}</b> <br>
                                                              Catégorie : <b>{$tout['categorie']}</b> <br>
                                                              Téléphone fixe :  <b>{$tout['tel_fixe']}</b>  &nbsp; &nbsp; &nbsp;  De bureau : <b>{$tout['tel_bureau']}</b> <br>
                                                              Téléphone portable : <b>{$tout['tel_port_1']}</b> &nbsp; &nbsp; &nbsp;&nbsp; <b>{$tout['tel_port_2']}</b> <br>
                                                              Email : <b>{$tout['mail_1']}</b> &nbsp; &nbsp; &nbsp; &nbsp;    <b>{$tout['mail_2']}</b> &nbsp; &nbsp; &nbsp; &nbsp; <b>{$tout['mail_3']}</b> <br> <br>"
                              ;
                                              } // fin boucle while
                                      } // fin boucle else
                              }// FIN afficher en SELECTIONNANT UNE LETTRE


                              En tout cas un grand merci à tous ceux qui ont essayé de m'aider.
                              caline

                              EDIT 2 : 17h10.
                              Ca y est, après beaucoup de persévérance j'ai enfin trouvé la solution à mon problème et c'était vraiment une solution des plus simple. Alors je ne résiste pas à mettre mon code qui fonctionne correctement. En fait, mon code comportait une boucle qui n'avait pas lieu d'être. Après réflexions, j'ai testé quelque chose de vraiment tout bête et c'est ce qui a fonctionné. Comme quoi les débutants, nous les zéros, on se complique là où il ne faut pas. Allez, assez perdu de temps, voilà le code :

                              // Afficher en SELECTIONNANT UNE INITIALE
                                      elseif ($choix == 'lettre')  // on créé une page sur laquelle va figurer tous les liens qui vont envoyer vers les pages alphabétiques
                                      {
                                              // création d'un tableau à 1 dimension pour mettre l'alphabet
                                              $lettres = array (1 => "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z");
                                              for ($a = 1 ; $a <= 26 ; $a++)
                                              {
                                                      // affichage dans une nouvelle page avec la liste des différents liens
                                                      echo "<a href='repertoire.php?action=afficher&choix=$lettres[$a]'> $lettres[$a]</a> &nbsp;";
                                              }
                                      }
                                     
                                      else // on ne boucle pas car la variable $choix va être sélectionnée et transmise au code par l'action de cliquer dessus
                                      {
                                                      echo "<font size='7' font color='red'>   $choix  </font> <br> <br>";
                                                      $req_tout = "SELECT * FROM repertoire WHERE nom LIKE '$choix%'";
                                                      $result_tout = mysql_query($req_tout) or die ("Rechercher tout : impossible");
                                                     
                                              // on boucle pour prendre les infos de la bdd qui vont servir à l'affichage          
                                              while ($tout = mysql_fetch_array($result_tout))
                                              {
                                                      $nom = strtoupper($tout['nom']);
                                                      $prenom = ucfirst($tout['prenom']);
                                                      echo "<font size=5> <b> $nom &nbsp; $prenom </b> </font> <br>
                                                              Adresse : <b>{$tout['adresse']}</b> &nbsp; &nbsp; &nbsp;  Ville : <b>{$tout['ville']}</b> &nbsp; &nbsp; &nbsp; Code postal : <b>{$tout['code_postal']}</b> <br>
                                                              Catégorie : <b>{$tout['categorie']}</b> <br>
                                                              Téléphone fixe :  <b>{$tout['tel_fixe']}</b>  &nbsp; &nbsp; &nbsp;  De bureau : <b>{$tout['tel_bureau']}</b> <br>
                                                              Téléphone portable : <b>{$tout['tel_port_1']}</b> &nbsp; &nbsp; &nbsp;&nbsp; <b>{$tout['tel_port_2']}</b> <br>
                                                              Email : <b>{$tout['mail_1']}</b> &nbsp; &nbsp; &nbsp; &nbsp;    <b>{$tout['mail_2']}</b> &nbsp; &nbsp; &nbsp; &nbsp; <b>{$tout['mail_3']}</b> <br> <br>"
                              ;
                                              } // fin boucle while
                                      } // fin boucle else
                              }// FIN afficher en SELECTIONNANT UNE LETTRE


                              Vraiment un très grand merci à vous tous :
                              - à Kyo pour sa fonction range(),je suis allée me documenter à ce sujet ;)

                              - et à riesseg (je n'avais pas lu ton dernier code en entier mais je viens de le faire à l'instant et je me rends compte que tu avais la solution puisque je me suis retrouvée exactement au même point que toi) mais bon j'avoue que j'ai eu du mal à comprendre comment allait agir mon else et c'est ce qui m'a embrouillé.
                              Alors un grand merci pour ta patience :)

                              Un très très grand merci à vous ;)
                              caline

                              PS : pour moi l'important n'est pas de recopier bêtement un morceau de code mais de comprendre pourquoi on fait ceci au lieu de cela :-°:p
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Boucle pour raccourcir

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown