[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

donuts08 Messages postés 519 Date d'inscription   Statut Membre Dernière intervention   39
 
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   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   41
 
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   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   894
 
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   Statut Membre Dernière intervention   41
 
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   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   185
 
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   Statut Membre Dernière intervention   126
 
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   Statut Membre Dernière intervention   894
 
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   Statut Membre Dernière intervention   126 > Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   894 > okuni Messages postés 1221 Date d'inscription   Statut Membre Dernière intervention  
 
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