[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?

29 réponses

donuts08 Messages postés 519 Date d'inscription dimanche 13 novembre 2005 Statut Membre Dernière intervention 15 octobre 2008 39
6 oct. 2008 à 23:24
bonjour,

faire des tests, des tests et encore des tests, ya que ce moyen qui est efficace pour trouver des bugs quand aucun message n'apparait! Mets des echos un peu partout pour voir au fur et à mesure de ton programme où sont les problèmes...
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
7 oct. 2008 à 08:36
On avance :p
sa marche mais seulement avec les echo :/
for ($i = 0; $i <= 1; $i++ )
	{
		$element = $donnees[$i];
		echo 'element 1 :'.$element.'<br/>';
		include ('../includes/regex.php');
		echo 'element 2 :'.$element.'<br/>';
		$donnees[$i] = $element;
		echo 'donnees :'.$donnees[$i].'<br/>';
	}

si j'enlève les 3 echo, le script ne fonctionne plus :s
Je comprend pas du tout

EDIT : J'ai réfléchi et en fait, il y a une confusion car dans le for j'utilise la numérotation mais dans mon code pour afficher les données, c'est avec les mot clef.
Y a-t-il un moyen de revenir au mot clef, c'est quand même plus pratique que les numéros :p
0
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
7 oct. 2008 à 18:01
Merci beaucoup pour ta réponse mais sa ne marche pas.
J'ai peut-être oublié quelque chose alors voila le code dans son intégrale.
<?php
//Pagination des pages
include ('../includes/pagination.php');
	
$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) )
{
	if ($css == 'clair')
	{
		$css = 'fonce';
	}
	else
	{
		$css = 'clair';
	}
	
	for ($i = 0; $i <= $donnees.length - 1; $i++ )
	{
		echo 'donnees 1 : '.$donnees[$i].'<br/>';
		$element = $donnees[$i];
		echo 'element 1 : '.$element.'<br/>';
		include ('../includes/regex.php');
		echo 'element 2 : '.$element.'<br/>';
		$donnees[$i] = $element;
		echo 'donnees 2 : '.$donnees[$i].'<br/>';
	}
	
	?>
	<table width="100%" style="text-align:left;">
		<tr>
			<td class="<?php echo $css;?>"><b><?php echo $donnees['pseudo']; ?></b> : <?php echo $donnees['comment']; ?></td>
		</tr>
	</table>
	<?php
}
?>

J'ai mis des écho pour voir les données mais il n'y a rien qui s'affiche.

En testant, j'ai vu que $donnees.length ne fonctionne pas car j'ai remplacé par 1 (j'ai 2 donnée différente, le pseudo et le message) et les regex marchaient. avec ce code :
for ($i = 0; $i <= 1; $i++ )
	{
		$element = $donnees[$i];
		include ('../includes/regex.php');
		$donnees[$i] = $element;
	}
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 oct. 2008 à 19:45
Salut,

meme question que ton poste 8:
$donnees.length est égal a quoi?
C'est un chiffre?
0

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

Posez votre question
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
8 oct. 2008 à 20:38
Je ne sais pas, quand je fais un echo, il ne me met rien
for ($i = 0; $i <= $donnees.length - 1; $i++ )
	{
		echo '$donnees.length : '.($donnees.length).'<br/>';
		echo 'donnees 1 : '.$donnees[$i].'<br/>';
		$element = $donnees[$i];
		echo 'element 1 : '.$element.'<br/>';
		include ('../includes/regex.php');
		echo 'element 2 : '.$element.'<br/>';
		$donnees[$i] = $element;
		echo 'donnees 2 : '.$donnees[$i].'<br/>';
	}


et les autre echo ne me donne rien non plus.
0
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 à 11:30
Salut,

tu fais une boucle

et à chaque passage de la boucle tu fais un include du même fichier
Utilité ????

tu connais les fonctions en php alors essayes comme ça en metant ta preReplace dans une fonction que tu vas appeler à chaque passage de la boucle:

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


//ton code de départ  oui la fonction foreach existait et fonctionnait en php4 !!
$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)	{
               // un petit appel de la fonction
		$element=remplacement($element);
             //affichage des données
           echo "Element: ".$element."<br />";
	
   }
}


@lain
0
Stef60 Messages postés 251 Date d'inscription jeudi 31 mai 2007 Statut Membre Dernière intervention 22 avril 2009 41
8 oct. 2008 à 21:45
Et un truc comme ca ne marcherait pas ?
A condition bien sur de transformer regex en fonction.


while ($donnees = mysql_fetch_array($result) )
{
if ($css == 'clair')
{
$css = 'fonce';
}
else
{
$css = 'clair';
}
$pseudo = function_regex($donnees['pseudo']);
$comment = function_regex($donnees['comment']);

?>
<table width="100%" style="text-align:left;">
<tr>
<td class="<?php echo $css;?>"><b><?php echo $donnees['pseudo']; ?></b> : <?php echo $donnees['comment']; ?></td>
</tr>
</table>
<?php
}
-1
okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014 126
8 oct. 2008 à 22:00
Si bien sur mais c'est pas du tout mon but.

Ce que je recherche c'est de faire un code adaptaptable n'importe ou car dans d'autre cas, j'ai alors beaucoup plus de lignes a écrire.
-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:47
Mais pas en php, puisque tout le monde se casse le nez dessus dans ce topic :D
D'ailleurs je ne vois pas comment ça se pourrait dans la mesure où l'opérateur point, en php, ne sert qu'à concaténer.
-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 à 17:14
Désolé Alain_42, Je n'avais pas vu ton message, quand j'ai cliqué sur le lien pour voir les nouveau message, j'ai été directement au dernier, j'ai pas pensé qu'il y avait une autre page.

Je n'ai pas tout compris.
l'include de mes regexp, je dois le faire avant le while ou dedans?
si dehors, les regexp ne fonctionne pas, si dedans, j'ai un message d'erreur :
Fatal error: Cannot redeclare remplacement()
(erreur sur la page des regexp)


encore désolé ;)
-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 à 17:24
Tout d'abord tu modifies ton fichier qui contient le REGEX pour que ce soit une fonction telle que je te l'ai donnée

et tu fais juste un include de ce fichier avant la boucle

dans la boucle il y a juste un appel de la fonction

@lain
-1
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
9 oct. 2008 à 18:13
Ok, c'est bien ce que j'avais essayé.
Mes données s'affichent mais elle ne sont pas transformée par les regex.
include ('../includes/regex.php');

// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($result) )
{	
	foreach ($donnees as $element)
	{
		$element = remplacement($element);
	}
	
	?>
	<table width="100%" style="text-align:left;">
		<tr>
			<td class="<?php echo $css;?>"><b><?php echo $donnees['pseudo']; ?></b> : <?php echo $donnees['1']; ?></td>
		</tr>
	</table>
	<?php
}
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894 > okuni Messages postés 1221 Date d'inscription jeudi 4 septembre 2008 Statut Membre Dernière intervention 2 janvier 2014
9 oct. 2008 à 18:25
C'est normal, tu transforme

$element = remplacement($element);

par tes regex et tu affiches qd même les données lues dans la base
echo $donnees['pseudo'];

fais comme ça:

<?php
include ('../includes/regex.php');

?>
<table width="100%" style="text-align:left;">
<?php
// Puis on fait une boucle pour afficher tous les résultats :
while ($donnees = mysql_fetch_array($result) ){	
	echo "<tr><td class=".$css.">";
	
	foreach ($donnees as $cle=>$element){  //la j'ai change un peu pour avoir le nom de la cle de l'array pour tester pseudo et le mettre en gras
		$element = remplacement($element);
		if($cle=='pseudo'){
			echo "<b>".$element."</b>";
		}else{
			echo $element;
		}

	}
}
?>
</td></tr></table>
-1