Utilisation fonction recherche dans une chaine de caractere

Eléphant du PHP | 186 Messages

01 déc. 2007, 13:02

Bonjour à tous,

Je rencontre des difficultés à utiliser la fonction strstr() avec des nombres composés de deux chiffres.

En effet, j'ai un formulaire composé de cases à cocher dont la valeur est un nombre pouvant aller de 1 à 19.

Je récupère les valeurs cochées dans un champs unique en les séparant par une "," avec la fonction implode().

Ensuite pour creer des enregistrements, je fait une recherche avec strstr() sur ce que j'obtient.

le problème, c'est que si une case à cocher à la valeur "14" et que je fais une recherche sur cette valeur, il trouve bien le "14" mais m'incorpore aussi ceux ayant pour valeur "1" et "4".

Comment limiter ma recherche au nombre "14" et pas au chiffres le composant.

En espérant avoir été assez précis et clair et sur mon souci, merci par avance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

01 déc. 2007, 13:11

Donne nous le code de ton formulaire et le code PHP de récupération.

J'avoue ne pas avoir compris ton explication
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1996 Messages

01 déc. 2007, 13:26

Ne fais pas l'implode() mais utilise in_array() plutôt.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 186 Messages

01 déc. 2007, 13:34

Désolé si je ne suis pas clair.

Voici le code contenant les checbox listées dynamiquement:
<?php while($famille=mysql_fetch_assoc($rs_famille)) { 
			
	$query_creation = "SELECT * FROM tbl_creation WHERE famille_creation='".$famille['id_famille']."'";
	$rs_creation = mysql_query($query_creation);		
			
	echo '<tr>
	<td align="right"><b>'.$famille['nom_famille'].'</b></td><td>';
	while($creation=mysql_fetch_assoc($rs_creation)) { echo
	$creation['nom_creation'].' <input type="checkbox" name="type[]" id="type[]" value="'.$creation['id_creation'].'"'; if(strstr($row_rs_client['famille_client'],$creation['id_creation'])) { echo 'checked="checked"';} echo ' /> | ';} echo '</td>
	</tr> ';
	} ?>
Comme je le disais, la valeur de mes checkbox, envoyée en POST par mon formulaire, peut être un nombre compris entre 1 et 19.
Je fais un implode des valeurs récupérées comme suit:
implode(',',$_POST['type'])
Ce qui permet de récupérer quelque chose comme ca: 1,5,14,18 par exemple dans un seul champs de ma bdd.

Ensuite, en fonction des cases cochées, je crée autant d'enregistrements que de valeurs entre ",". Pour cela, j'ai besoin de vérifier la présence de ces valeurs pour creer les bons enregistrements.
Dans mon exemple, creer un enregistrement pour la valeur 1, un autre pour la valeur 5 puis 14 puis 18.

C'est pour cela que voulais utiliser la fonction strstr() pour vérifier cette présence:
if(strstr(implode(',',$_POST['type']),"2")) //si on trouve "2" dans la chaine alors creer un enregistrement
Seulement j'avais pas pensé au nombre composé de deux chiffres.
C'est pour cela qu'il me faudrait une syntaxe qui dise: si tu trouve exactement le nombre 14 alors ...
ou encore si tu trouves exactement le nombre 1 alors ...

Voila!! j'espere avoir été plus clair mais je suis conscient de ne pas utiliser la bonne technique.
Peut être devrais-je affecter des lettres comme valeur à mes checkbox?

ViPHP
ViPHP | 1996 Messages

02 déc. 2007, 22:52

Et si tu fais :
if (in_array("2",$_POST['type'])) { ...
}
Comme cela tu reste en format tableau.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 186 Messages

03 déc. 2007, 10:53

Merci pour vos réponses.
Je vais essayer tout ca.
Bonne continuation à tout le monde.