Probleme de boucle

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme de boucle

par VaN » 29 nov. 2005, 20:19

yep

par Cyrano » 29 nov. 2005, 19:22

:) [Résolu] :?:

par VaN » 29 nov. 2005, 19:16

Oh My God ! ça marche nickel.. et moi qui m'etait prit la tête à découper mon texte (et en plus j'etais trop fier d'avoir trouver cette technique :oops: )

par Cyrano » 29 nov. 2005, 19:14

Attention, les PCRE doivent être délimitées:
            $pseudo = "#". $result['pseudo'] ."#";
            $lien = "<a href=\"".$_SERVER['PHP_SELF']."?cat=memb&id=".$result['id']."\">".$result['pseudo']."</a>";
            $texte = preg_replace($pseudo, $lien, $texte);
Essaye comme ça

par VaN » 29 nov. 2005, 19:11

Je viens de rajouter $texte = str_is_member($fin); juste avant la ligne echo $texte; mais ça ne change rien :/

j'ai ensuite essayé avec preg_replace, mais j'ai un message d'erreur :
<?php
$bdd=mysql_connect("localhost","root","");
mysql_select_db("base_gg",$bdd);

	$tab = '';
	$i = 1;
	$texte = 'OliGan zrtgfery ttgh dg ge. wolf ef ghy htrhyrju yrj. FaTC fsgsfg . OliGan sfdgfg';
	// on seek les pseudo ds la base
	$sql = "SELECT id, pseudo FROM membres WHERE disp_site='Y'";
	$query = mysql_query($sql);
	while ($result = mysql_fetch_array($query))
	{
		// creation du tableau avec toutes les reponses de la bdd
		$tab[] = array(		"pseudo"	=>	$result['pseudo'],
							"id"		=>	$result['id'],
							"i"			=>	$i);
		$i++;
	}
	// pour chaque ligne du tableau
	foreach ($tab as $result)
	{
		// Si on trouve le pseudo dans le texte
		if (strstr($texte, $result['pseudo']) == TRUE)
		{
			$cut = explode($result['pseudo'], $texte);
			$debut = $cut[0];
			// si il y'a un tag
			if (substr($debut, -1) == '|')
			{
				$tag = substr($debut, -5);
				$result['pseudo'] = $tag.$result['pseudo'];
			}
			$pseudo = $result['pseudo'];
			$lien = "<a href=\"".$_SERVER['PHP_SELF']."?cat=memb&id=".$result['id']."\">".$result['pseudo']."</a>";
			$texte = preg_replace($pseudo, $lien, $texte);
		}
	}
	echo $texte;
?>
Warning: Delimiter must not be alphanumeric or backslash in c:\program files\easyphp1-7\www\web_gg\_test\fonctions.php on line 35

par Cyrano » 29 nov. 2005, 18:41

Il serait plus avisé d'utiliser preg_replace pour changer tous les exemplaires dans un texte... De la manière dont tu as fait ça, à la première occurrence trouvée, le texte est coupé en 3, le début, le pseudo et la fin, sans vérification si la fin contient éventuellement encore des occurences.

Autre option: en faire une fonction récursive qui s'appelle elle-même avec la fin en paramètre.

par VaN » 29 nov. 2005, 18:29

Image

Probleme de boucle

par VaN » 29 nov. 2005, 15:49

Bonjour,

J'ai une fonction qui me permet de tranformer des pseudo de joueurs que j'ai sortit d'une bdd en lien vers sa fiche personnelle.

Voici la fonction :
$tab = '';
	$i = 1;
	$texte = 'OliGan zrtgfery ttgh dg ge. wolf ef ghy htrhyrju yrj. FaTC fsgsfg . OliGan sfdgfg';
	// on seek les pseudo ds la base
	$sql = "SELECT id, pseudo FROM membres WHERE disp_site='Y'";
	$query = mysql_query($sql);
	while ($result = mysql_fetch_array($query))
	{
		// creation du tableau avec toutes les reponses de la bdd
		$tab[] = array(	"pseudo"	=>	$result['pseudo'],
						"id"		=>	$result['id'],
						"i"			=>	$i);
		$i++;
	}
	// pour chaque ligne du tableau
	foreach ($tab as $result)
	{
		// Si on trouve le pseudo dans le texte
		if (strstr($texte, $result['pseudo']) == TRUE)
		{
			$cut = explode($result['pseudo'], $texte);
			$debut = $cut[0];
			// si il y'a un tag
			if (substr($debut, -1) == '|')
			{
				$tag = substr($debut, -5);
				$result['pseudo'] = $tag.$result['pseudo'];
				$debut = explode($tag, $debut);
				$debut = $debut[0];
				$fin = $cut[1];
			}
			// sinon
			else
			{
				$fin = $cut[1];
			}
			//creation du lien
			$result['pseudo'] = "<a href=\"".$_SERVER['PHP_SELF']."?cat=memb&id=".$result['id']."\">".$result['pseudo']."</a>";
			// on recompose le texte
			$texte = $debut.$result['pseudo'].$fin;
		}
	}
	echo $texte;
Le probleme que je recontre : Si jamais le pseudo est présent plus d'une fois dans le texte, le deuxieme lien ne se fait pas sur ce dernier, et pire, mon texte est coupé juste avant l'apparition de ce pseudo.
Normal, puisque j'utilise un foreach() sur mon tableau.

Comment puis-je faire pour que la fonction fonctionne meme si le pseudo se repete ?