Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > symfony
symfony Forum d'entraide sur le framework PHP symfony. Avant de poster : cours symfony et FAQ symfony
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/04/2011, 08h17   #1
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
Par défaut Formulaire de contact

Hello.

Je souhaite créer un formulaire de contact.
J'ai déja parcouru pas mal de tutos qui expliquent comment créer un formulaire permettant à un visiteur d'envoyer un message sur une adresse fixe.

Mais ce que je cherche à faire, c'est un formulaire qui permet à un visiteur lambda d'envoyer un message à une personne (dont les coordonnées sont stockées dans une base).

Je bloque sur un point : comment passer l'id de la personne à qui on écrit à mon formulaire ?

En gros, j'ai créé mon formulaire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<form id="contact" action="<?php echo url_for('contact/submit') ?>" method="POST">
  <table>
    <tbody>
      <?php echo $contact_form['id']->renderRow() ?>
      <?php echo $contact_form['name']->renderRow() ?>
      <?php echo $contact_form['email']->renderRow() ?>
      <?php echo $contact_form['message']->renderRow() ?>
      <?php echo $contact_form->renderHiddenFields() ?>
    </tbody>
    <tfoot>
      <tr>
        <td></td>
        <td><input class="submit_button" type="submit" /></td>
      </tr>
    </tfoot>
  </table>
</form>
<?php
Et je pensais renseigner le champ "id" avec l'id souhaité.

J'ai commencé comme ça :
Code :
1
2
3
4
5
6
7
 
  public function executeShow(sfWebRequest $request)
  {
    $this->truc             = $this->getRoute()->getObject();
    $this->contact_form     = new ContactForm();
    $this->contact_form->id = $this->truc->getId();
  }
Et je pensais qu'il serait facile de renseigner ensuite le champ id, de le cacher, et au moment d'envoyer mon message d'aller chercher l'adresse correspondant à l'id dans ma base...

Alors première question : est-ce que c'est la bonne méthode (je débute sur symfony...) ?

Deuxième question : comment renseigner mon champ 'id' ?

Ah... et question bonus : je vais ensuite ajouter des validateurs pour m'assurer que le visiteur renseigne tout correctement.
Comme mon formulaire est inclus dans une page (et pas sur une page spécifique de contact), comment rediriger mon formulaire sur cette même page en cas d'erreur ?

Merci d'avance pour votre aide !
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 08h40   #2
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Tu peux mettre le code de ton form ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h10   #3
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
Le voilà :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
class ContactForm extends sfForm
{
  public function configure()
  {
    $this->setWidgets(array(
      'id'      => new sfWidgetFormInput(),
      'name'    => new sfWidgetFormInput(),
      'email'   => new sfWidgetFormInput(),
      'message' => new sfWidgetFormTextarea(),
    ));
 
    $this->widgetSchema->setLabels(array(
      'name'    => 'Votre nom :',
      'email'   => 'Votre email :',
      'message' => 'Votre message :',
    ));  
 
    $this->widgetSchema->setNameFormat('contact[%s]');
 
    $this->setValidators(array(
      'name'    => new sfValidatorString(array('required' => false)),
      'email'   => new sfValidatorEmail(),
      'message' => new sfValidatorString(array('min_length' => 4)),
    ));
  }
}
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h36   #4
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Je ne comprend pas trop comment tu comptes récupérer l'id du destinataire dans ton form alors qu'il s'affiche mais n'a pas de validateur. Et de plus il conviendrait que le scripteur du message connaisse l'id de l'enregistrement du destinataire. Peu probable.

Il faut le passer en hiden.

Une autre solution serait de le passer dans l'url de retour du message POST généré par la balise form. En effet, vus que l'on parse l'url au retour quelque soit le type de message (POST ou GET) tu peux renvoyer des informations par ce biais, elles seront analysée par le système de route. Ce qui évite qu'elles ne circulent dans des champs cachés mais potentiellement modifiables.

Pour mettre une valeur dans un champs il faut faire un setDefault(). Pour la récupérer il faut un validateur, même si c'est un champ caché.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h44   #5
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
En fait, l'id de mon destinataire est précisé dans l'url de ma page qui contient le formulaire de contact.

Est ce que je peux récupérer cette valeur et l'utiliser dans mon formulaire ?
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 09h50   #6
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Non, il faut qu'elle soit dans l'id appelée par le form du formulaire
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 10h16   #7
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
J'ai fait le test suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
<?php use_stylesheet('contact.css') ?>
 
<?php $url='contact/submit?id='.$contact_form->id;  ?>
 
<form id="contact" action="<?php echo url_for($url) ?>" method="POST">
  <table>
    <tbody>
      <?php echo $contact_form['id']->renderRow() ?>
      <?php echo $contact_form['name']->renderRow() ?>
      <?php echo $contact_form['email']->renderRow() ?>
      <?php echo $contact_form['message']->renderRow() ?>
      <?php echo $contact_form->renderHiddenFields() ?>
    </tbody>
    <tfoot>
      <tr>
        <td></td>
        <td><input class="submit_button" type="submit" /></td>
      </tr>
    </tfoot>
  </table>
</form>
De cette façon, le form généré est le suivant :
Code :
<form id="contact" action="/frontend_dev.php/contact/submit/id/2" method="POST">

Donc a priori, le problème de l'id est réglé.

Il ne me reste plus qu'un souci :
quand je valide mon formulaire, je suis redirigé vers la page "contact/submit/id/2", mais si un de mes validateurs retourne une erreur (champ non renseigné par exemple), comment faire pour que les messages d'erreurs soient affichés sur ma page de départ ?
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 10h34   #8
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
Jamais essayé. Je devrais.

Regarde un peu comment il le gère dans sfGuard, j'ai l'impression qu'ils le font. Mais sans en être sur.

Si non il faudrait en passer par du javascript.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 10h40   #9
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
ok.
Je vais jeter un oeil.

Merci pour ton aide.
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 15h16   #10
Membre du Club
 
Homme
Inscription : novembre 2006
Messages : 146
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34

Informations forums :
Inscription : novembre 2006
Messages : 146
Points : 41
Points : 41
c'est marrant, ce fil ressemble étrangement au mien.

Personnellement, pour me souvenir de mon destinataire, j'ai mis son "DoctrineRecord" dans un attribut du user... ça marche bien. L'utilisateur ne voit pas ces infos... maintenant, si c'est une bonne pratique de prog, ça reste à voir, je n'en sais rien en fait.
jekif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 16h43   #11
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
L'objet user est l'idéal pour stocker des informations pertinentes pour la session. Seul inconvénient, elles le sont pour la session. Donc, si en fonction de ces déplacement dans le site l'utilisateur se retrouve avec deux fenêtres de dépôts de messages ouvertes pour deux destinataires différents, il y a un risque de collision. Si le destinataire dépend exclusivement d'un seul correspondant, c'est parfait.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 17h03   #12
Membre du Club
 
Homme
Inscription : novembre 2006
Messages : 146
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34

Informations forums :
Inscription : novembre 2006
Messages : 146
Points : 41
Points : 41
Snif, je n'y avais pas pensé... je retourne à l'id du destinataire dans un champ caché...
jekif est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2011, 19h45   #13
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
L'id est moins génante, sauf si ton champ s'appelle admin_id et qu'il est possible de modifier le mot de passe par une url change_passe/id/nouveaupasse (déjà vu !)

C'est moins gênant de passer l'adresse email dans un champ ou un nom plutôt qu'un pseudo. L'id seul n'est probablement pas catastrophique.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/04/2011, 10h38   #14
Candidat au titre de Membre du Club
 
Homme
Inscription : février 2009
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : février 2009
Messages : 44
Points : 13
Points : 13
Merci à vous deux pour vos conseils.
J'ai finalement opté pour l'id du destinataire dans un champ caché, et le traitement de mon formulaire fonctionne
plastic1st est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h45.


 
 
 
 
Partenaires

Hébergement Web