pb sur formulaire de contact

Par sylvain, il y a 11 ans


Bonjour
J'ai un soucis apres l'envoi d'un formulaire de contact, je ne sais pas pourquoi ce message d'erreur. car a aucun moment je ne lui preciser comment revenir cette page.

L'adresse '/contact' n'a pas pu être trouvée sur ce serveur

Hors si je mets manuellement dans le browser /contact/
ca fonctionne.

De quoi le tester :
http://goo.gl/TT1wDE

j'ai utilisé le code du tuto formulaire de contact pratiquement

class ContactController extends AppController{ //public $components = array('Session','Security'); function index(){ if($this->request->is('post')){ // if(!empty($this->request->data['Contact']['website'])){ // $this->Session->setFlash("Votre mail nous est bien parvenu","ok"); // $this->request->data = array(); // }else{ if($this->Contact->send($this->request->data['Contact'])){ $this->Session->setFlash("Votre mail nous est bien parvenu","ok"); $this->request->data = array(); return $this->redirect(['controller'=>'contact','action'=>'index']); }else{ $this->Session->setFlash("Merci de corriger vos champs","ko"); return $this->redirect(['controller'=>'contact']); } // } } }

10 réponses

sylvain, il y a 11 ans

rien a changé

}else{ $this->Session->setFlash("Merci de corriger vos champs","ko"); return $this->redirect(['controller'=>'contact','action'=>'index']); }

j'ai commenté les routes et c'est pareil.

Lartak, il y a 11 ans

Bonjour.

je ne sais pas pourquoi ce message d'erreur. car a aucun moment je ne lui preciser comment revenir cette page.

Bien sûr que si, puisque tu fais un redirect.
C'est le composant Security qui retourne à cette erreur :

The request has been black-holed

Pour commencer, tu devrais faire ta validation avant de tenter d'envoyer l'email.
Vu que tu ne nous montre pas le code qui correspond au traitement des données ni à l'envoi de l'email, je ne peux pas trop t'aider ni être plus précis.

Hors si je mets manuellement dans le browser /contact/ ca fonctionne.

Non, pas vraiment, car j'ai faussé l'adresse de l'action du formulaire en mettant /contact/ au lieu de /contact/ et ça ne change rien.
Un peu plus de précisions serait bien.

En fait, j'ai la forte impression, que tu utilises le composant Security, mais que tu n'utilises pas le FormHelper pour les inputs du formulaire, ce qui est incompatible.

sylvain, il y a 11 ans

la vue que j'ai

<?php echo $this->Form->create('Contact'); ?> <!-- <form id="contact" action="contact.html" method="post"> --> <div class="form_settings"> <p><span>Nom</span><input class="contact" type="text" name="your_name" value="" /></p> <p><span>Votre courriel</span><input class="contact" type="text" name="your_email" value="" /></p> <p><span>Message</span><textarea class="contact textarea" rows="5" cols="50" name="your_message"></textarea></p> <p style="padding-top: 15px"><span>&nbsp;</span><input class="submit" type="submit" name="contact_submitted" value="envoyer" /></p> </div> </form>

et le model

<?php class Contact extends AppModel{ public $useTable = false; public $validate = array( 'name' => array( 'rule' => 'notEmpty', 'required' => true, 'message' => 'Vous devez entrer votre nom' ), 'email' => array( 'rule' => 'email', 'required' => true, 'message' => 'Vous devez entrer un email valide' ), 'message' => array( 'rule' => 'notEmpty', 'required' => true, 'message' => 'Vous devez entrer votre message' ) ); public function send($d){ $this->set($d); if($this->validates()){ App::uses('CakeEmail','Network/Email'); $mail = new CakeEmail(); $mail->to('ssylvain@gmail.com') ->from($d['email']) ->subject('Contact :: le vallon des roses') ->emailFormat('html') ->template('contact')->viewVars($d); return $mail->send(); }else{ return false; } } }
Lartak, il y a 11 ans

C'est bien ce que je disais, tu utilises le composant Security mais tu n'utilises pas le Helper Form pour les inputs, ce qui est totalement incompatible.

sylvain, il y a 11 ans

je comprends pas tres bien, il est commenté le composant ...

Lartak, il y a 11 ans

Il est pourtant bien fonctionnel puisque qu'il génère un input avec un token dans ton formulaire.

<input type="hidden" name="data[_Token][key]" value="184b3b6659ec39d5f6dc862cd5e6525af5567cbe" id="Token636591527">

Et puis, comment pourrais tu envoyer un tableau de données avec l'index Contact :

$this->request->data['Contact']

alors que tes inputs n'ont que le nom du champ ?
À mon avis le tableau ci-dessus doit être vide et ne doit donc même pas pouvoir passer la validation.
Ce n'est pas parce que tu ne le définis pas dans ton ContactController, qu'il n'y est pas actif, si par exemple tu le charge dans ton AppController, il sera effectif également dans tous les autres controller, à moins par exemple que dans ton ContactController, tu le désactive.

sylvain, il y a 11 ans

Merci c'est bien ca, il etait également dans AppController. Et je n'avais pas fait attention car ce n'etais pas le code pour le formulaire.

Lartak, il y a 11 ans

De rien. :)

sylvain, il y a 11 ans

J'ai quand meme un soucis du coup, car dans l'appController

j'ai

public $components = array( 'Session', 'Auth', 'RequestHandler' , 'Security' => array( 'csrfUseOnce' => false ) );

Qui est utilisé par autre chose dans le system.
Si je retire le formulaire fonctionne, mais le blog ne fonctionne plus

sylvain, il y a 11 ans

j'ai rien dit. c'est bon. tout m'es revenu