Version complète: sur le forum Webmaster Hub : Utilisation de Foreach
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
HexCore
Hello smile.gif

J'aurais besoin de votre aide sur un de mes scripts.
Je dois lister des elements d'une BDD par ordre alphabetique pour faire un sommaire.

Je fais donc ma requete mySQL, avec une boucle pour mettre les infos dans un tableau. Je fais pour cela 2 array_push (pas sur que ce soit la meilleure solution la). Ensuite, je fais une autre boucle pour la liste des lettres de l'alphabet et dedans, je fais une autre boucle qui verifie que si le nom de la societe commence par la lettre en question, il me l'affiche. Il me faut egalement afficher l'ID de l'enregistrement MySQL pour y mettre un formulaire plus tard.
Le probleme, c'est qu'avec ma methode, il me sort pas les bons IDs.
Voyez vous des choses à corriger dans mon code ? (pas tout j'espere tongue.gif).

Merci d'avance, hexCore.


CODE
    $sql  =    "SELECT * FROM intraref ORDER BY id";
    $req  =    @mysql_query($sql) or die(erreur_bdd("Erreur SQL : \"".$sql."\""));
    $societe = array();
    $id  =    array();

    while($data3    =    mysql_fetch_array($req))
    {
 array_push($societe, $data3['societe']);
 array_push($id, $data3['id']);

    }


for ($ascii = ord('A'); $ascii <= ord('Z'); $ascii++)
{
   echo "<h2> - <a name=\"".chr($ascii)."\">".chr($ascii)."</a> - </h2>";


foreach ($societe as $id=>$var) {
if (substr($var, 0, 1) == chr($ascii)) {
    echo $var." - <a href=\"".$_SERVER['php_self']."?action=modif&id=".$id."\">Modifier</a><br>";
     }
 }

    echo "<br>";
    }

}
sarc
Salut biggrin.gif

Pas logique ton truc... Pourquoi dans ta requète SQL tu demandes pas de trier par ordre alphabétique ? Tu passes de 50 lignes à 2 lignes, je trouve ça un peu plus propre... tongue.gif

CODE
$sql  = "SELECT * FROM intraref ORDER BY societe";
$req  = _AT_mysql_query($sql) or die(erreur_bdd("Erreur SQL : \"".$sql."\""));
$societe = array();
$id  = array();

while($data3 = mysql_fetch_array($req))
{
extract($data3);
echo "$id : $societe<br>";
}


Voilà, je pense que ça devrait marcher biggrin.gif
bastoun
Après si tu veux afficher que les sociétés qui commencent par une lettre donnée

CODE
$sql  = "SELECT * FROM intraref WHERE societe LIKE '$lettre%' ORDER BY societe";


$lettre étant la lettre en question (ne pas oublier le % après la variable sinon tu auras que les sociétés qui contiennent la lettre $lettre puis rien derrière, autant dire aucune)
HexCore
CITATION(sarc @ mercredi 27 avril 2005, 12h19)
Salut biggrin.gif

Pas logique ton truc... Pourquoi dans ta requète SQL tu demandes pas de trier par ordre alphabétique ? Tu passes de 50 lignes à 2 lignes, je trouve ça un peu plus propre... tongue.gif

CODE
$sql  = "SELECT * FROM intraref ORDER BY societe";
$req  = _AT_mysql_query($sql) or die(erreur_bdd("Erreur SQL : \"".$sql."\""));
$societe = array();
$id  = array();

while($data3 = mysql_fetch_array($req))
{
extract($data3);
echo "$id : $societe<br>";
}


Voilà, je pense que ça devrait marcher biggrin.gif
*

Merci, mais en fait, le truc que je voudrais, c'est avoir les valeurs ID et societe dans un tableau dans le dernier foreach.
Je dois fermer le while de la requete avant, et je dois donc stocker id et societe dans un tableau, et c'est apparement la ou je bloque.
Les array_push étaient censé mettre les valeurs dans les array id et societe, mais ca ne marche pas pour id (ou je n'arrive pas à le ressortir...
HexCore
En fait, il me fait une liste des lettres alphabetiques, et dans chaque lettre les noms de societe commencant par cette lettre.

Pour cela, je fais d'abord ma requete, et je souhaiterai stocker les données dans un tableau.

Ensuite, je fait un foreach qui me fait la liste des lettres de l'aphabet, puis un foreach qui liste tout les valeurs du tableau contenant les noms de societe. Si le nom commence par le nom, il l'affiche et je souhaiterais qu'il affiche aussi l'ID correspondant dans la bdd, pour que je puisse y placer un formulaire après.

J'espere avoir été clair.

Merci beaucoup de votre aide :up:
sarc
Jme suis trompé dans un raccourci clavier (pourquoi COUPER est à coté de fermer l'onglet... :/)

C'est un peu plus barbare, mais ça devrait marcher biggrin.gif

CODE
while($data3 = mysql_fetch_array($req))
{
extract($data3);
$first = substr($societe, 0, 1); // on regarde la première lettre

if (utilisee[$first] == 1) // si la lettre a deja été utilisée
{
echo "$id. $societe<br>";
}
else // si elle n'a pas été utilisée
{
echo "Sociétés commençant par $first <br><br>"; // on met la nouvelle lettre
echo "$id. $societe<br>";
$utilisee[$first] = 1; // on averti qu'on l'a utilisée
}
}


Voilà, tu n'as pas besoin de sortir de ton while lol biggrin.gif
HexCore
CITATION(sarc @ mercredi 27 avril 2005, 13h25)
Jme suis trompé dans un raccourci clavier (pourquoi COUPER est à coté de fermer l'onglet... :/)

C'est un peu plus barbare, mais ça devrait marcher biggrin.gif

CODE
while($data3 = mysql_fetch_array($req))
{
extract($data3);
$first = substr($societe, 0, 1); // on regarde la première lettre

if (utilisee[$first] == 1) // si la lettre a deja été utilisée
{
echo "$id. $societe<br>";
}
else // si elle n'a pas été utilisée
{
echo "Sociétés commençant par $first <br><br>"; // on met la nouvelle lettre
echo "$id. $societe<br>";
$utilisee[$first] = 1; // on averti qu'on l'a utilisée
}
}


Voilà, tu n'as pas besoin de sortir de ton while lol biggrin.gif
*

Merci, c'est effectivement une bonne idée que je conserverais si je ne trouve pas mieux.
La, ca n'affiche que les lettres dont des societes commencant par celle ci existe.
Je prefererais que ca affiche toutes les lettres.
Mais je crois que je vais m'en contenter.

Merci enormement en tout cas smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.