Page 1 sur 1

Appel fonction PHP ...

Posté : 28 juil. 2007, 20:21
par Zéphirynx
Bonsoir à tous,

j'ai essayé d'écrire un petite fonction qui doit retourner un chaîne de caractères créé dynamiquement.

Voici le code et l'appel de ma fonction :

l'appel :

Code : Tout sélectionner

$strDynamicRoom .= SetState($_POST["cmbProduct$intCptProduct"]);
la fonction :

Code : Tout sélectionner

function SetState($strState) { echo $strState."<br>"; for ($i=0; $i < 7; $i++) echo $arrEtat[$i]."<br>"; $strSetDynamicState = ""; if ( isset($strState) || !empty($strState) ) { for ($i=0; $i < 7; $i++) { if ( $strState == $i ) $strSetDynamicState .= " <option value='".$i."1' selected>".$arrEtat[$i]."</option>"; else $strSetDynamicState .= " <option value='".$i."1'>".$arrEtat[$i]."</option>"; } } else { for ($i=0; $i < 7; $i++) { if ( $i == 0 ) $strSetDynamicState .= " <option value='".$i."1' selected>".$arrEtat[$i]."</option>"; else $strSetDynamicState .= " <option value='".$i."1'>".$arrEtat[$i]."</option>"; } } echo $strSetDynamicState."<br>"; return $strSetDynamicState; }
Voyez-vous des incohérences dans ce code ?

Merci d'avance

Thierry

Posté : 28 juil. 2007, 20:25
par orgerix
Que dois faire la fonction et que fait elle réellement ?

déjà, une grosse erreur, $arrEtat n'est ni un parametre de la fonction ni une variable implémenté dans celle ci. Elle n'existe donc pas.

Ensuite, je ne suis pas fan des envoie au naigateur dans une fonction, a moins que ce soit une fonction d'affichage, ce qui n'est pas le cas.

Posté : 28 juil. 2007, 20:33
par Zéphirynx
Bonsoir Orgerix,

Encore merci pour ta réponse rapide à ma question.

Le but de la fonction est de remplir une liste déroulante. Je génère du code HTML pour tous les produits. En fait, j'ai facilement une cinquantaine de champs pour lesquels le code état doit être rempli et sélectionné.

Voici les différents états que j'avais oublié de mettre dans le code mias qui étaient dans mon code.

Code : Tout sélectionner

$intCptEtat = 0; $arrEtat[$intCptEtat++] = "Faites votre choix ..."; $arrEtat[$intCptEtat++] = "Tr&egrave;s Mauvais"; $arrEtat[$intCptEtat++] = "Mauvais"; $arrEtat[$intCptEtat++] = "Moyen"; $arrEtat[$intCptEtat++] = "Bon"; $arrEtat[$intCptEtat++] = "Tr&egrave;s bon"; $arrEtat[$intCptEtat++] = "Neuf";
$arrEtat est déclarée comme variable globale.

L'affichage, c'est simplement à titre d'indication.

Merci d'avance

Thierry

Posté : 28 juil. 2007, 21:32
par Kaoteknik
Pour ma part je ne vois pas à quel moment la variable $arrEtat est déclarée comme globale dans ta fonction.

Par ailleurs je me demande s'il n'aurait pas été plus simple d'initialiser le tableau en écrivant :
$arrEtat = array ("Tr&egrave;s mauvais", "Mauvais", "Moyen", "Bon", "Tr&egrave;s bon", "Neuf");
J'ai volontairement supprimé la mention "Faites votre choix..." du tableau car cela n'entre pas dans les états, mais plutôt comme un "titre" annonçant l'objet de la liste déroulante. De ce fait j'aurais plutôt inclus cette mention dans les balises <optgroup label="Faites votre choix..."></optgroup>.

Voilà, étant donné que je ne suis pas un expert en PHP il est probable que la pertinence de mes propos soit discutable. J'espère donc ne pas dire de bêtises et, avec mes modestes moyens, avoir pu t'aider.

Posté : 28 juil. 2007, 21:54
par Zéphirynx
Bonsoir Kaoteknik,

encore merci pour ta réponse à mon message.

Pour l'initialisation du tableau, c'est vrai que ta solution est nettement plus simple.

Par contre, sais-tu comment je peux faire pour faire passer un tableau comme paramètre à ma fonction et naturellement, l'utiliser dans ma fonction.

Merci d'avance

Thierry

Posté : 29 juil. 2007, 00:50
par Kaoteknik
Etant donné que je suis en pleine phase d'apprentissage des fonctions, ton problème m'intéresse particulièrement.

Dans la mesure où je pense en avoir grossièrement compris les mécanismes, je vais tenter de t'apporter mon aide, en espérant ne pas commettre d'erreur. Si c'est le cas, je ne doute pas que les personnes hautement qualifiées qui fréquentent ce forum sauront me corriger et par la même occasion t'orienter dans la bonne direction.

Encore une fois, si j'ai bien saisi l'objet de ton code, il est censé afficher un article qu'un client aura sélectionné, ainsi qu'un menu déroulant qui lui permettra de le noter sur une échelle de 1 à 6 (de "très mauvais" à "neuf").

On va donc commencer par déclarer un tableau tel que je l'ai écrit dans mon précédent message.

Ensuite, lorsque tu as besoin d'afficher l'article et la liste déroulante qui l'accompagne, on va "lancer" l'appel à la fonction en lui passant comme arguments l'article et le tableau des états :
$selected_article = $_POST['cmbProduct$intCptProduct'];

include ('fichier_contenant_la_fonction.php');

SetState($selected_article, $arrEtat);
La fonction devrait ensuite contenir un code ressemblant à ceci :
function SetState($article, $etats) {
	echo 	$article
			.'<br />'
			.'Etat de l\'article : '
			.'<select name="etat">'
			.'	<optgroup label="Faites votre choix...">';
			
	
	for ($i = 0 ; $i < 7 ; $i++) {
		$control_etat = (isset($etats) && $etats == $etats[$i]) ? 'selected="selected"' : '' ;

		echo '		<option value="'.$i.'" '.$control_etat.'>'.$etats[$i].'</option>';
	}
	
	echo 	'	</optgroup>'
			.'</select>';
			
	return $article, $etats;
}
Voilà, je n'ai pas testé ce code et peut-être contient-il des erreurs ou, pire, il ne correspond pas du tout à ce que tu cherches à faire (ce qui voudrait dire au final que je n'ai pas compris grand chose ! :? ). Dans ce cas il faudra faire appel à quelqu'un de plus qualifié que moi... Et je serai ravi d'apprendre quelque chose au passage ! :)

Edit : en me relisant j'ai déjà pu constater que j'avais commis une erreur. La boucle "for" doit en effet s'arrêter lorsque le compteur "$i" devient égal à 6 (et non à 7 comme je l'ai écrit). Sachant que le tableau "$arrEtat" ne contient que 6 éléments, que le premier porte l'indice 0 ("très mauvais") et le dernier l'indice 5 ("neuf"), il n'est pas nécessaire de poursuivre la boucle au-delà.

Posté : 03 août 2007, 20:59
par Zéphirynx
Bonsoir Kaoteknik,

je tiens à te remercier pour ta réponse à ma question.

Ta fonction marche parfaitement.

Encore merci pour ton aide précieuse.

Thierry

Posté : 03 août 2007, 22:59
par Truc
Modération :
Zéphirynx, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.