[PHP] utilisation du foreach

Fermé
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 4 oct. 2008 à 16:01
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 - 10 oct. 2008 à 19:47
Bonjour,

Je me suis dis que ce serai pratique d'utiliser foreach pour passer au regex toutes mes variables avant de les afficher.

Dans cette exemple, il s'agit d'un chat.
je récupère les données de ma table puis le foreach.
la page regex.php contient toutes les regex (elles fonctionnent)
$query = "SELECT pseudo,comment FROM raynal_chat ORDER BY id DESC LIMIT $premier_message, $nombre_entree_par_page";
$result = mysql_query($query)or die (mysql_error());

$css = 'clair';

// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($result) )
{
	foreach ($donnees as $element)
	{
		include ('../includes/regex.php');
	}

[affichage des données]


Mais voila, sa ne fonctionne pas :p

Quelqu'un pourrait m'aider?
A voir également:

29 réponses

Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
7 oct. 2008 à 11:23
Okuni,
ça m'a l'air un peu confus tout ça dans ta tête :P
Je vais reprendre à partir du bout de code que tu donnes dans le post n°12.

Alors, $donnees est un tableau contenant une ligne de la base de données. Comme tout tableau qui se respecte, il a un nombre d'éléments accessible via sa propriété length, c'est ce que tu demandais plus haut :
donnees.length est le nombre d'éléments du tableau. (je vais l'appeler n)

Pour passer le regexp à tous les éléments, il est donc nécessaire d'itérer sur tous les éléments : on part de 0 (le 1er élément) et on va jusqu'à n - 1 (le n-ième élément).
for ($i = 0; i <= donnees.length - 1; $i++)

Ça va, tu suis ?
Là ça corrige déjà un problème : tu n'allais que jusqu'à 1.

Ensuite :
$element = $donnees[$i];

Là je corrige quoi ? > j'ai viré les guillemets ^^
Si tu mets des guillemets, PHP cherche dans le tableau une valeur portant la clé '$i' en toutes lettres, et pas le numéro porté par $i. Résultat : il ne trouve pas, il renvoie null et donc $element = null quand il arrive dans le regexp. Ensuite il fait un preg_replace sur ce null, et comme ça ne le dérange pas plus que ça, il ne déclenche pas de message d'erreur : il renvoie null lui aussi.
Tu suis toujours ? ^^

Enfin, d'après ce que j'ai compris, ton script va afficher les données à partir du tableau $donnees, qui a été modifié par le passage du regexp. Donc à la fin d'un tour de boucle, la valeur $element retourne dans $donnees[$i]. Eh oui, tu as mis aussi des guillemets ! Du coup il stocke la valeur dans une case du tableau portant la clé '$i' en toutes lettres, dont tu ne te sers pas après (puisque tu ne sais pas qu'elle existe :D)
Retire les guillemets et ça sera stocké au bon endroit ;)

Le script final :
for ($i = 0; $i <= $donnees.length - 1; $i++ )
	{
		$element = $donnees[$i];
		include ('../includes/regex.php');
		$donnees[$i] = $element;
	}

Dis-moi si ça marche :P
3
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
9 oct. 2008 à 11:10
OK.
As-tu essayé avec cette synthaxe :
foreach ($donnees as &$element)
1
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
9 oct. 2008 à 12:33
Ouais, alors en fait c'est pas du tout $donnees.length() je m'écrase comme une crotte en confondant avec Javascript. Mais bon, personne est là pour me récupérer hein, vous valez pas mieux que moi :P

Alors la longueur du tableau en php c'est :
count($donnees)

Sinon l'idée de Stef60 est pas mauvaise, passer par référence, faut voir si ça marche.
1
hani_ Messages postés 333 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 18 novembre 2009 20
9 oct. 2008 à 12:39
$donnees.length retourne un nombre entier ayant pour valeur la taille du tableau...(et donc le nombre de données...)
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hani_ Messages postés 333 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 18 novembre 2009 20
9 oct. 2008 à 12:58
La question était a quoi sert $donnees.length je n'ai jamais dit qu'il s'agissait de php cela se rapprocherais plutôt du js encore que le $ n'a rien a voir et qu'il manque des parenthèses...
1
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 oct. 2008 à 13:07
je t'ai donné une solution, l'as tu au moins testée ?
1
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
9 oct. 2008 à 19:02
ok merci beacoup mais je trouve que sa complique fort le code. :(
1
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
9 oct. 2008 à 19:48
Comment ça ça complique, il faut savoir ce que l'on veut.

C'est surtout la partie affichage qui l'a alourdie.

@lain
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126 > Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017
10 oct. 2008 à 19:47
merci quand même :)
J'ai appris des trucs en plus :D
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
4 oct. 2008 à 16:13
Vérifie que ton serveur gère le php 5 par défaut.
Sinon, il faut mettre l'extension .php5 à ton script.
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
4 oct. 2008 à 16:23
Foreach ne fonctionne que sous PHP5 ?
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
4 oct. 2008 à 17:09
Ben oui :)
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
5 oct. 2008 à 16:53
ok

mais même quand je met l'extension .php5 celà ne fonctionne pas. Cela signifie que mon hébergeur ne gère pas PHP5?
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
6 oct. 2008 à 10:11
C'est quoi ton hébergeur ? J'ai envie de dire, c'est du carton-pâte...
Pour être fixé utilise phpinfo() dans un fichier d'extension .php5, et tu sauras.

P.S. Même, eh oui même Free est passé au php 5 !!! Change d'hébergeur, conseil d'ami ;)
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2008 à 19:28
Ben justement, je suis chez Free :p
0
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 185
6 oct. 2008 à 19:35
Ah. *gros blanc*

Eh bien, change de boucle... ^^
Moi aussi je suis chez Free mais comme je n'ai découvert le foreach que récemment, je faisais à l'ancienne :
for ($i = 0; i <= $donnees.length - 1; i++) {
  $element = $donnees[$i];
  include('../includes/regex.php');
}


Et tant que j'y suis, c'est pas un problème d'include ? J'ai toujours des emmerdes pas possibles avec cette histoire de chemin d'include que Free ne permet pas de modifier...
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2008 à 20:38
ok merci, je vais tester ce code ce soir.

$donnees.length est égal a quoi?

et non c'est pas un problème d'includes même si parfois j'en ai lol
mais le seul problème que j'ai eu avec les includes sur Free c'est avec un lien absolu (je sais plus je pense; un lien complet quoi :p)
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
6 oct. 2008 à 21:32
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2008 à 21:40
Merci pour l'info.
Mais s'a n'explique pas pourquoi mon code ne marche pas.
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
6 oct. 2008 à 21:55
bonsoir,
tu obtiens une erreur ?
On peux avoir un aperçu du fichier regex.php ?
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2008 à 22:11
Non aucun message d'erreur.

voila le code (l'autre version :p)
for ($i = 0; $i <= 1; $i++ )
	{
		$element = $donnees['$i'];
		include ('../includes/regex.php');
		$donnees['$i'] = $element;
	}

mais ce code ne fonctionne pas.

voici le regex mais j'ai essayé avec ce qui suit et tout marche donc ce n'est pas ma page de regex. (enfin, je pense :p)
$element = $donnees['comment'];
		include ('../includes/regex.php');
		$donnees['comment'] = $element;


ma page regex :
$element = preg_replace('#\[b\](.+)\[/b\]#isU', '<strong>$1</strong>', $element);//gras
		$element = preg_replace('#\[i\](.+)\[/i\]#isU', '<em>$1</em>', $element);//italique
		$element = preg_replace('#\[u\](.+)\[/u\]#isU', '<u>$1</u>', $element);//souligné
		$element = preg_replace('#\[q\](.+)\[/q\]#isU', '<q>$1</q>', $element);//citation
		$element = preg_replace('#\[center\](.+)\[/center\]#isU', '<div style="text-align:center">$1</div>', $element);//centré
		$element = preg_replace('#\[color=(red|green|blue|yellow|purple|olive)\](.+)\[/color\]#isU', '<span style="color:$1">$2</span>', $element);//couleur
		$element = preg_replace('#\[url=http://(.+)\](.+)\[/url\]+#isU', '<a href="http://$1">$2</a>', $element);//lien
		$element = preg_replace('#\[url\]http://(.+)\[/url\]+#isU', '<a href="http://$1">$1</a>', $element);//lien
		$element = preg_replace('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#isU', '<a href="mailto:$0">$0</a>', $element);//mail
		$element = preg_replace('#\[img\](.+)\[/img\]#isU', '<img src="$1" alt="$1" />', $element);//image
		
		//regex des smileys
		$element = preg_replace('#:D#isU', ' <img src="../images/smileys/biggrin.gif" alt=":D" /> ', $element);
		$element = preg_replace('#XD#isU', ' <img src="../images/smileys/XD.png" alt="XD" /> ', $element);
		$element = preg_replace('#:\)#isU', ' <img src="../images/smileys/smile.gif" alt=":)" /> ', $element);
		$element = preg_replace('#:\(#isU', ' <img src="../images/smileys/sad.gif" alt=":(" /> ', $element);
		$element = preg_replace('#:cool:#isU', ' <img src="../images/smileys/cool.gif" alt=":cool:" /> ', $element);
		$element = preg_replace('#:o#isU', ' <img src="../images/smileys/ohmy.gif" alt=":o" /> ', $element);
		$element = preg_replace('#Zz#isU', ' <img src="../images/smileys/sleep.gif" alt="Zz" /> ', $element);
		$element = preg_replace('#:p#isU', ' <img src="../images/smileys/tongue.gif" alt=":p" /> ', $element);
		$element = preg_replace('#;\)#isU', ' <img src="../images/smileys/wink.gif" alt=";)" /> ', $element);
		$element = preg_replace('#\^\^#isU', ' <img src="../images/smileys/happy.gif" alt="^^" /> ', $element);

ps : commentsamarche.com transforme les [ et ] donc le code est un peu moins visibles :s
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
6 oct. 2008 à 22:17
Tu dis : ca ne fonctionne pas.
Tu obtiens quoi ? une erreur ? rien qui s'affiche ?
Ca pourrait donner une piste ;-)
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
6 oct. 2008 à 22:18
oui déso. j'ai aucun message d'erreur mais toutes mes données s'affiche correctement.
0