Page 1 sur 1

déplacer le selected en fonction de la variable récupérée

Posté : 04 août 2010, 12:25
par darius1000
Bonjour,

J'ai mis en place sur mon site un formulaire de contact. Il comporte un menu déroulant afin de sélectionner le destinataire du message. Le formulaire fonctionne très bien. Toutefois, j'aimerais que le menu déroulant en question mette en évidence un de ses éléments en fonction de la variable qui aura été récupéré à partir d'un lien placé sur une page précédente et dirigeant bien évidemment vers ce formulaire de contact.

Je poste le code ci-dessous. N'hésitez pas à me demander des précisions si je ne suis pas clair. C'est un cas difficile à décrire.

Merci de votre aide :)

Le script :
<?php
$listeDesMails = array (
'marie drucker' => '[email protected]',
'marie drucker2' => '[email protected]',
'marie drucker3' => '[email protected]',
);
?>

Le formulaire :
<table><tr>
<td style="font-weight:bolder;"><label for="choixMail">Destinataire <span class="rouge">*</span> :</label></td>
<td><select id="choixMail" name="choixMail">
<option value="0" selected="selected">Choisissez un destinataire...</option>
<option value="Tout le monde">Tout le monde</option>
<?php
foreach($listeDesMails as $prenom => $adresseMail){
echo '<option value="',$prenom,'">',$prenom,'</option>',"\r\n";
}
?>
</select></td>
</tr>

<tr><td style="font-weight:bolder;"><label for="realname">Votre Nom <span class="rouge">*</span> :</label></td>
<td><input type="text" id="realname" name="realname" size="30" value="<?php echo(htmlentities(stripslashes($_POST[realname]))); ?>"/></td>
</tr>

<tr>
<td style="font-weight:bolder;"><label for="email">Votre courriel <span class="rouge">*</span> :</label></td>
<td><input type="text" id="email" name="email" size="30" value="<?php echo(htmlentities(stripslashes($_POST[email]))); ?>"/></td>
</tr>

<tr>
<td style="font-weight:bolder;"><label for="sujet">Sujet <span class="rouge">*</span> :</label></td>
<td><input type="text" id="sujet" name="sujet" size="30" value="<?php echo(htmlentities(stripslashes($_POST[sujet]))); ?>"/></td></tr>

<tr>
<td colspan="2"><label for="champTexte" style="font-weight:bolder;">Message <span class="rouge">*</span> :</label><br />
<textarea cols="60" rows="10" id="champTexte" name="champTexte"><?php echo(htmlentities(stripslashes($_POST[champTexte]))); ?></textarea></td>
</tr>
</table>
<br />
<input type="submit" value="Envoyer" /> - <input type="reset" value="Annuler" />
</form>

Re: déplacer le selected en fonction de la variable récupérée

Posté : 04 août 2010, 12:30
par xTG
Il existe des tonnes de solutions et d'écritures.
Pour ma part je fais ceci :
<input type="text" name="nom" value="valeur"<?php echo ($condition == true) ? ' selected="selected"' : ''; ?> />

Re: déplacer le selected en fonction de la variable récupérée

Posté : 04 août 2010, 13:33
par darius1000
Merci de votre réponse rapide :)

Mon niveau en PHP est très limité... Pouvez-vous me dire où je dois placer le code que vous me donnez dans mon propre code :
<table>
<tr>
<td style="font-weight:bolder;"><label for="choixMail">Destinataire <span class="rouge">*</span> :</label></td>
<td><select id="choixMail" name="choixMail">
<option value="0" selected="selected">Choisissez un destinataire...</option>
<option value="Tout le monde">Tout le monde</option>
<?php
foreach($listeDesMails as $prenom => $adresseMail){
echo '<option value="',$prenom,'">',$prenom,'</option>',"\r\n";
}
?>
</select>
</td>
</tr>
Ou alors, peut-être que ceci doit être placé dans le head ?


Une dernière question : Le lien qui enverra la valeur se présentera t-il bien de cette façon : <a href="contact.php?nom=1"></a>
C'est bien ça ?

Merci

Re: déplacer le selected en fonction de la variable récupérée

Posté : 04 août 2010, 13:49
par xTG
foreach($listeDesMails as $prenom => $adresseMail){
  echo '<option value="' . $prenom . '"';
  if( $maVar == $prenom )
    echo ' selected="selected"';
  echo '>' . $prenom . '</option>\r\n';
}
Tout simplement, c'est la même méthode.

Pour la valeur dans l'url cela dépend du type d'envoi de ton formulaire, il faut qu'il soit en GET.

PS : le head de ton site contient des informations qui ne doivent pas être affichées dans la page...
PS2 : des points et non des virgules en PHP pour passer d'une String à une variable ou expression.

Re: déplacer le selected en fonction de la variable récupérée

Posté : 04 août 2010, 14:37
par darius1000
Bon... ça ne marche pas.

Je dois me tromper dans le lien. Dans ma page formulaire, j'ai cette liste de mail :
<?php
$listeDesMails = array (
'marie drucker' => '[email protected]',
'marie drucker2' => '[email protected]',
'marie drucker3' => '[email protected]',
);
?>
Dans cette configuration, je dois faire un lien de cette façon : <a href="contacts.php#contact?prenom=marie drucker">
Non ?

Merci de ta patience

Re: déplacer le selected en fonction de la variable récupérée

Posté : 04 août 2010, 15:10
par xTG
Petite question pour voir si tu as tout bien cerné.

Et comment fais-tu pour lire la variable qui se trouve dans l'url ?
En fonction de ta réponse je pourrai orienter la mienne avec les explications à l'appui.

Re: déplacer le selected en fonction de la variable récupérée

Posté : 04 août 2010, 15:30
par darius1000
En effet, je crois que le manque se situe précisément là... Je ne sais effectivement pas comment on récupère la variable dans la page de formulaire.

Content que tu es trouvé pour moi où se trouvait le hic...

Re: déplacer le selected en fonction de la variable récupérée

Posté : 04 août 2010, 16:55
par xTG
Tout ce qui transite par méthode POST de formulaire se retrouve dans la super-globale $_POST.
Tout ce qui transite par méthode GET de formulaire se retrouve dans la super-globale $_GET.
Et la méthode GET fait transiter les informations via l'url, donc pour toute récupération de variable se trouvant dans l'url il faut se tourner vers le tableau (array) $_GET.

Re: déplacer le selected en fonction de la variable récupérée

Posté : 05 août 2010, 11:53
par darius1000
Bonjour,

Merci de tes explications.

J'ai indiqué sur tes conseils le bout de code $prenom = $_GET["prenom"]; sur la page du formulaire. Mais rien n'y fait... La page n'affiche aucune erreur mais ça ne fonctionne toujours pas.

Est-ce qu'il me manque encore un élément ? Ais-je mal placé ce code ?

Merci beaucoup !

<?php

$prenom = $_GET["prenom"];

?>

<table><tr>
<td style="font-weight:bolder;"><label for="choixMail">Destinataire <span class="rouge">*</span> :</label></td>
<td>
<select id="choixMail" name="choixMail">
<option value="0">Choisissez un destinataire...</option>
<option value="Tout le monde">Tout le monde</option>
<?php

foreach($listeDesMails as $prenom => $adresseMail){
echo '<option value="' . $prenom . '"';
if( $maVar == $prenom )
echo ' selected="selected"';
echo '>' . $prenom . '</option>\r\n';
}

Re: déplacer le selected en fonction de la variable récupérée

Posté : 05 août 2010, 14:02
par xTG
Il te manque en effet une autre chose, la compréhension (ou la lecture) du code que je t'ai proposé.
Si ton serveur affichait toutes les erreurs, notices et warnings tu aurais le message suivant :
Undefined var maVar et blablabla...

D'autre part il n'est pas malin d'appeler $prenom la variable que tu récupères car tu dois justement la comparer à la variable $prenom de ta boucle foreach().

Re: déplacer le selected en fonction de la variable récupérée

Posté : 09 août 2010, 14:18
par darius1000
Bonjour,

En effet, je ne comprends pas ce code. Je pense que mon niveau en PHP n'est pas suffisant pour me confronter à ce genre de problème car je ne parviens pas à décrypter tes explications. Je dois sans doute est plus "PHP débutant" que tout.

Je te remercie de ton aide et je suis désolé de t'avoir fait perdre ton temps.

Re: déplacer le selected en fonction de la variable récupérée

Posté : 09 août 2010, 22:51
par Castor Gaspard
Bonsoir,

Avant de t'avouer vaincu, reprend à zéro : quand tu auras compris, tu iras plus vite. Vois cet effort comme un investissement.

Prends un formulaire de base avec une seule variable et regarde comment le traitement s'effectue, dans la même page, par exemple en utilisant l'instruction
if(isset($_POST['save']))
et en affichant la sortie avec
var_dump($_POST);
A partir d'un champ "input", forme la plus simple, tu t'enhardiras avec un "select", et ainsi de suite.

Cordialement,

Gaspard

Re: déplacer le selected en fonction de la variable récupérée

Posté : 10 août 2010, 11:21
par darius1000
Bonjour,

Merci de tes conseils et de tes encouragements. Je vais poursuivre mes efforts :)

J'ai tenté de faire passer une variable et de l'afficher dans un input, ça ne fonctionne pas. J'ai mis dans le lien ceci :
<a href="contact.php&sujet=marie drucker"></a> puis :
if(isset($_POST['sujet']))
{
}

$sujet = $_POST["sujet"];
Et rien ne s'affiche dans le champ dont le "name" est "sujet"
Où est l'erreur ? Je ne comprends pas.

J'ai testé le code que tu m'as donné if(isset($_POST['save'])) et var_dump($_POST);
La mention array(0) { } s'affiche. Est-ce le résultat escompté ?

Merci de tes explications :)

Re: déplacer le selected en fonction de la variable récupérée

Posté : 10 août 2010, 11:56
par Castor Gaspard
Bonjour,

J'ai honte de te renseigner, car je suis loin d'être un spécialiste. Merci aux autres de ne pas se moquer. :mrgreen:

Quand je t'ai dit d'utiliser
if(isset($_POST['save']))
save correspond au nom du bouton d'envoi du formulaire.

Ainsi, en première partie de page, tu testes pour savoir si le formulaire a été affiché : si oui, les données s'affichent ; si non, le formulaire s'affiche.

Ici entendons-nous : c'est plus simple de voir si le formulaire a été envoyé en jouant sur ce bouton.

Après, dans la construction de ton formulaire, tu attribues, par exemple, la simple variable
$prenom
à ton input. Pendant le traitement, Php attribuera le préfixe $_POST... en supposant que tu utilises la méthode post pour envoyer ton formulaire, comme
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
.

Ainsi, pour démarrer ta page, peut ressembler à...
<?php if(isset($_POST['save']))
{
print_r($_POST); // ou var_dump, c'est un tableau dans les deux cas, donc _r permet de l'imprimer
}
else
{?>
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
<form>
// Les champs à compléter
<input type="submit" class="save" name="save" id ="save" value="Sauvegarder" />
</form>
<?php
}
?>
Comme je suis paresseux, je mélange allègrement Php et Html, mais les puristes font mieux.

Cordialement,

Gaspard