[PHP] utilisation du foreach

okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   -  
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   185
 
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   Statut Membre Dernière intervention   41
 
OK.
As-tu essayé avec cette synthaxe :
foreach ($donnees as &$element)
1
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
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   Statut Membre Dernière intervention   20
 
$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   Statut Membre Dernière intervention   20
 
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   Statut Membre Dernière intervention   894
 
je t'ai donné une solution, l'as tu au moins testée ?
1
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
ok merci beacoup mais je trouve que sa complique fort le code. :(
1
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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   Statut Membre Dernière intervention   126 > Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention  
 
merci quand même :)
J'ai appris des trucs en plus :D
0
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
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   Statut Membre Dernière intervention   126
 
Foreach ne fonctionne que sous PHP5 ?
0
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
Ben oui :)
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   185
 
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   Statut Membre Dernière intervention   126
 
Ben justement, je suis chez Free :p
0
Groarh Messages postés 682 Date d'inscription   Statut Membre Dernière intervention   185
 
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   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   100
 
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   41
 
bonsoir,
tu obtiens une erreur ?
On peux avoir un aperçu du fichier regex.php ?
0
okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   41
 
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   Statut Membre Dernière intervention   126
 
oui déso. j'ai aucun message d'erreur mais toutes mes données s'affiche correctement.
0