Aller au contenu

Utilisation de Foreach


Sujets conseillés

Posté

Hello :)

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 :P).

Merci d'avance, hexCore.

	$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>";
}

}

Posté (modifié)

Salut :D

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... :P

$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 :D

Modifié par sarc
Posté (modifié)

Après si tu veux afficher que les sociétés qui commencent par une lettre donnée

$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)

Modifié par bastoun
Posté
Salut :D

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... :P

$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 :D

<{POST_SNAPBACK}>

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...

Posté

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:

Posté (modifié)

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 :D

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 :D

Modifié par sarc
Posté
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 :D

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 :D

<{POST_SNAPBACK}>

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 :)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...