Le système de messagerie utilise la même fonction pour envoyer et répondre aux messages. Un utilisateur envoie un message à un autre avec comme sujet: "juste tester £ 69 $ 100 @ ha". Et le message contient du texte, php et html. PHP est supprimé par CI xss_clean et html est bloqué/remplacé par le système. Il est envoyé sans erreurs. L'autre utilisateur le reçoit, l'ouvre et essaie de répondre avec un texte en clair de 47 caractères. La classe de validation de formulaire CI le bloque et affiche une erreur: le sujet doit comporter moins de 1000 caractères. Le premier et le plus important est qu'il ne devrait pas déclencher une erreur de validation. Deuxièmement CI forme val. a sujet réglé à max. 30 caractères, et le message réglé à max 1000 caractères - de sorte que le message d'erreur est également incorrect. Mon intuition est que l'un des personnages du sujet bouleverse la forme CI. mais ça ne l'a pas bouleversé quand le message original a été envoyé! Une idée de ce qui se passe ici?Problème de validation Codeigniter
Voici le code pertinent du formulaire;
<form name="sendmessage" method="POST" action="<? echo base_url(); ?>user/messaging/sendmessage/">
<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>" />
<input type="hidden" name="recipiant" value="<? echo $message['mem_msg_from_id']; ?>" />
<input type="hidden" name="thread" value="<? echo $message['mem_msg_thread_id']; ?>" />
<? if(substr($message['mem_msg_subject'],3) == 'Re:'){$subject = $message['mem_msg_subject'];}else{$subject = 'Re: ' . $message['mem_msg_subject'];} ?>
<input type="hidden" name="subject" value="<? echo ucfirst($subject); ?>">
Et voici le code du contrôleur;
public function sendmessage(){
if($this->input->is_ajax_request()){ // ajax request only
$subject = $this->input->post('subject',TRUE);
$message = $this->input->post('message',TRUE);
$recipiant = $this->input->post('recipiant',TRUE);
$thread_id = $this->input->post('thread',TRUE);
$subject_val = $this->form_validation->set_rules('subject', 'Subject', 'required|min_length[3]|max_length[30]');
$subject_req_error = $this->form_validation->set_message('required', 'A %s is required!');
$subject_min_error = $this->form_validation->set_message('min_length', '%s must be at least 3 characters!');
$subject_max_error = $this->form_validation->set_message('max_length', '%s must be under 30 characters!');
$message_val = $this->form_validation->set_rules('message', 'Message', 'required|min_length[5]|max_length[1000]');
$message_req_error = $this->form_validation->set_message('required', 'A %s is required!');
$message_min_error = $this->form_validation->set_message('min_length', '%s must be at least 5 characters!');
$message_max_error = $this->form_validation->set_message('max_length', '%s must be under 1000 characters!');
$this->form_validation->set_error_delimiters('<div class="pull-left">',' </div><br>');
if ($this->form_validation->run() == FALSE){ // FAILED TRY AGAIN
echo '<div style="font-weight: bold; color: red;">' . form_error('subject') . form_error('message') . '</div>';
}else{ // ALL SEEMS TO BE IN ORDER HERE
// clean it up a bit
$subject = str_replace('<', '', $subject);
$subject = str_replace('>', '' , $subject);
$subject = auto_link($subject, 'both', TRUE);
$message = str_replace('<', '', $message);
$message = str_replace('>', '' , $message);
$message = auto_link($message, 'both', TRUE);
// stick it in the database
$db = $this->user_messaging_model->sendMessage($this->userinfo['user_id'], $recipiant, $subject, $message, $thread_id);
echo 'sent';
}
}
}
avez-vous chargé l'aide de formulaire? – sandip
@sandip Oui, il y aurait une erreur si je ne l'avais pas fait. – Ally