|
|
|
|
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]
Ah. *gros blanc*
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... |
Ok merci, je vais tester ce code ce soir.
|
Pour info foreach existe depuis PHP4
|
Non aucun message d'erreur.
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 L'amour, c'est comme les spaghettis; quand c'est mou, c'est cuit. (proverbe belge) |
On avance :p
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 L'amour, c'est comme les spaghettis; quand c'est mou, c'est cuit. (proverbe belge) |
Okuni,
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 |
Merci beaucoup pour ta réponse mais sa ne marche pas.
<?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;
}
L'amour, c'est comme les spaghettis; quand c'est mou, c'est cuit. (proverbe belge) |
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. L'amour, c'est comme les spaghettis; quand c'est mou, c'est cuit. (proverbe belge)
|