8791 sujets

Développement web côté serveur, CMS

[Résolu] Il ne fallait pas mettre :
<?php $this->db->get(); ?>
dans la fonction de callback.



Bonsoir / Bonjour,

Comme précisé dans le sujet j'utilise CodeIgniter comme framework php pour développer un site web.
Je m'occupe actuellement de la page de profil de l'utilisateur.
Le problème étant que je veux vérifier que l'adresse email renseignée dans le profil n'est pas déjà utilisée par un autre utilisateur car l'email est unique dans la base de données.
J'ai donc fais une fonction de callback qui va vérifier dans la base de données si cette adresse email existe pour un autre utilisateur que l'utilisateur connecté et entrain de modifier son profil. (l'id utilisateur est son login).

Voici la partie intéressante du controller :


<?php
case('profil'):
					
// définitions des règles du formulaire
$this->form_validation->set_rules('prenom','Prénom','trim|required|xss_clean|max_length[64]');
$this->form_validation->set_rules('nom','Nom','trim|required|xss_clean|max_length[64]');
$this->form_validation->set_rules('email','Email','trim|required|valid_email|xss_clean|max_length[64]|callback_check_email');
$this->form_validation->set_rules('naissance','Date de naissance','trim|xss_clean|max_length[10]');
$this->form_validation->set_rules('confidentialite','Confidentialité','trim|required|xss_clean');
						
// si les règles du formulaire sont respectées
if($this->form_validation->run())
{
	...
}
break;
?>



<?php
// fonction de callback
function check_email()
{
	$where="login != '".$this->session->userdata('login')."' AND email = '".$this->input->post('email')."' AND banni = 0";
	$this->db->select('email');
	$this->db->from('site_utilisateur');
	$this->db->where($where);
	$this->db->get();
		
	// si il y a déjà un utilisateur avec l'email du formulaire, retourne message d'erreur et FAUX
	if($this->db->count_all_results() > 0)
	{
		$this->form_validation->set_message('check_email','Cette adresse email est déjà utilisée !');
		return false;
	}
	// si l'adresse email est libre, retourne VRAI
	else return true;
}
?>


Actuellement, lorsque l'utilisateur change son prénom par exemple, par défaut il a son adresse email qui est rentrée dans le formulaire. Et lorsqu'il envoie le formulaire, ça affiche le message d'erreur "Cette adresse email est déjà utilisée !".
Pourtant la requête ne recherche que les emails == à l'email du formulaire pour les utilisateurs différents de l'utilisateur qui modifie son profil.. donc la fonction de callback devrait retourner vrai...

Si je ne me trompe pas, puisque la requête de callback passe sous phpmyadmin et qu'elle retourne un résultat vide, au pire cela fonctionnerait (si le problème vient du fait qu'il y a un résultat mais vide) :


<?php
if($this->db->count_all_results() > 0 || $this->db->count_all_results() == NULL)
{
	$this->form_validation->set_message('check_email','Cette adresse email est déjà utilisée !');
return false;
}
?>


Mais cela ne fonctionne pas non plus...


Si quelqu'un veut bien et peut m'aider s'il vous plait.. Smiley smile
Modifié par Kami (23 Nov 2011 - 01:47)
Effectivement, c'était bien ça !
C'était tout simple...

Merci !
Modifié par Kami (03 Jul 2017 - 23:54)