Problème avec preg_match() PHP

Fermé
J-L03 - 27 avril 2010 à 10:28
 J-L03 - 27 avril 2010 à 15:26
Bonjour,

Je vais essayer de vous expliquer clairement.
J'ai plusieurs tableaux qui correspondent chacun à une catégorie d'URL. Ne sachant pas combien de catégories il y a dans le fichier sur lequel je travaille, je récupère chaque catégorie dans un tableau à l'aide d'une boucle.
Mes tableaux se nomment donc successivement $tab_categorie1, $tab_categorie2, ... A la première ligne de chaque tableau, se trouve le nom de la catégorie récupérée dans le fichier.
Ensuite, plus loin dans mon code, j'ai un formulaire qui me permet d'exporter une URL vers ce fichier en choisissant la catégorie dans laquelle je veux l'exporter. Donc, lorsque je valide ce formulaire, je fais un test avec le nom de la catégorie (qui provient du formulaire) pour savoir si elle correspond à la ligne 0 de l'un des tableaux.

Exemple:
j'exporte une URL vers la catégorie jeux.
je vérifie donc si la ligne ayant l'indice 0 de chaque tableau correspond à ce mot jeux. Mais j'ai une erreur.

Voilà le code concernant l'exportation et l'erreur que j'obtiens :

<h4>Exporter une URL vers le fichier host :</h4>
		<br />
		<form action="test_export_fichierhost.php" method="get">
			<select name="url">
<?php
				for ($index=0; $index<$sizeof_tabdstname; $index++)
				{
?>
					<option value="<?php echo $tab_dstname[$index]; ?>" selected="selected"><?php echo $tab_dstname[$index]; ?></option>
<?php
				}
?>
			</select>
			<br />
			<br />
<?php
			for ($num=0; $num<$sizeof_tabcategories; $num++)
			{
//voila le bouton qui permet de choisir la categorie lors de l'export
?>
				<input type="radio" name="categorie" value="<?php echo $tab_categories[$num]; ?>" id="<?php echo $tab_categories[$num]; ?>" /><label for="<?php echo $tab_categories[$num]; ?>"><?php echo ucfirst($tab_categories[$num]); ?></label>
<?php
			}
?>
			<br />
			<br />
			<input type="submit" value="Exporter" />
		</form>
		
<?php
		//Partie exportation
		if (isset($_GET['url']) AND isset($_GET['categorie']))
		{
			if ($_GET['url'] != NULL AND $_GET['categorie'] != NULL)
			{
				$categorie = "";
				$categorie = $_GET['categorie'];
				$url_exportee = "";
				$url_exportee = $_GET['url'];
				echo "Vous venez d'exporter ".$url_exportee." dans la catégorie ".$categorie.".";
//ici je teste la categorie avec la ligne 0 de chaque tableau
				for ($j=0; $j<$i; $j++)
				{
					if (preg_match($categorie, ${"tab_categorie".$j}[0]))
					{
						echo $categorie." correspond au tableau ".${"tab_categorie".$j}[0];
					}
				}
			}			
		}
?>


Lorsque je teste cette comparaison à l'aide de preg_match, j'obtiens l'erreur suivante:
Warning: Delimiter must not be alphanumeric or backslash on line 155 (ce qui correspond à la ligne avec le preg_match).

Je ne comprends pas car ma variable n'est pas un chiffre et ne contient pas de caractère spéciaux.


Si vous avez besoin de davantage de code n'hésitez pas à me demander.

A voir également:

1 réponse

jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
Modifié par jeangilles le 27/04/2010 à 10:59
Comme te l'indique l'erreur, il te manque le "délimiteur" de ton pattern de recherche (un caractère à mettre au tout début à la fin du pattern)

Quelquechose comme ceci devrait mieux coller (si ta chaîne peut contenir des /, tu peux mettre autre chose comme délimiteur):

if (preg_match($categorie, "/".${"tab_categorie".$j}[0]."/"))
1
Merci pour ton aide.

Cependant, je ne comprends pas trop car je me suis déjà servi plusieurs fois de la fonction preg_match() et je n'ai jamais eu besoin de rajouter quoi que ce soit aux chaines de caractères... Je t'avoue que je suis un peu perdu là.
0
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
27 avril 2010 à 13:18
Pour tout ce qui est preg (preg_match, preg_math_all ..), les délimiteurs sont (me semble t'il, ca fait longtps que j'ai plus touché au PHP) obligatoires.
Si tu en avais pas mis, c'était que tu devais utiliser les fonctions ereg (ereg, eregi ...) non ?
0
non, je me suis servi de la fonction preg_match mais à chaque fois avec une constante que je mettais sous cette forme: "#CONSTANTE#". C'est sûrement pour ça que je n'ai pas eu de problème. Je pense tout simplement que le problème que je rencontre est que je ne sais pas comment faire pour me servir de la fonction preg_match() avec une variable comme regex plutôt qu'une constante... Ca doit être une erreur de syntaxe
0
jeangilles Messages postés 816 Date d'inscription samedi 21 juin 2008 Statut Membre Dernière intervention 17 juillet 2012 185
27 avril 2010 à 13:33
à chaque fois avec une constante que je mettais sous cette forme: "#CONSTANTE#"

Ben voilà, tes délimiteurs étaient les #, tu peux faire la même chose ici ^^
0
Ouais mais alors il ne considérera pas cela comme une variable, si?
Si je mets "#$variable#" il va prendre ça comme la chaine de caractère $variable, je suppose...
0