Page 1 sur 1

Utilisation fonction recherche dans une chaine de caractere

Posté : 01 déc. 2007, 13:02
par dread
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.

Posté : 01 déc. 2007, 13:11
par zeus
Donne nous le code de ton formulaire et le code PHP de récupération.

J'avoue ne pas avoir compris ton explication

Posté : 01 déc. 2007, 13:26
par Aureusms
Ne fais pas l'implode() mais utilise in_array() plutôt.

Posté : 01 déc. 2007, 13:34
par dread
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?

Posté : 02 déc. 2007, 22:52
par Aureusms
Et si tu fais :
if (in_array("2",$_POST['type'])) { ...
}
Comme cela tu reste en format tableau.

Posté : 03 déc. 2007, 10:53
par dread
Merci pour vos réponses.
Je vais essayer tout ca.
Bonne continuation à tout le monde.