Bonjour,
Edition :
Pourquoi avoir creer la fonction create ?
Cordialement
Bonjour à tous,
Voilà plusieurs jours que je coince pour permettre à un utilisateur lambda de s'incrire (grâce au tuto developper un site de A à Z mvc), mais je me tire les cheveux.
Dans controller/UserController.php
function inscription(){ // Fonction qui permet de se connecter
// debug($this->Session->read());
if($this->request->data){// Si des données ont été postées
$data = $this->request->data; // Pour simplifier $this->request->data on le stocke dans $data
if($data->ccab = empty($data->ccab)){
$this->loadModel('User');// On charge le modèle User
$user = $this->User->findFirst(array(// Je recherche dans la base de donnée le premier qui remplie les même conditions
'conditions' => array('login' => $data->login
)));
if(!empty($user)){ // Si ça remplie les conditions
echo 'Cette email existe déjà';
}else{
$data->password = sha1($data->password);// On crypte le mot de passe pour qu'il corresponde avec celui de la base de donnée
$data->online = '0';// On insère dans la base de donnée un compte inactif
$this->User->create($this->request->data);
$this->redirect('users/login');
}
}else{
echo 'Vous êtes enregistré';
}
}else{
echo 'Vous n\'avez pas rentré de données';
}
}
Mon formulaire dans view/users/inscription.php
<div class="container">
<div class="form-signin-heading">
<h1>inscription</h1>
</div>
<form class="form-horizontal input-lg" action="<?php echo Router::url('users/inscription'); ?> " method="post" role="form"><!-- Alignement dans form.php -->
<div class="form-group">
<?php echo $this->Form->input('login','Email', array('placeholder'=>'Enter your email / Rentrer votre email', 'class'=>'form-control')); ?>
<?php echo $this->Form->input('password','Password / Mot de passe', array('type' => 'password', 'placeholder'=>'Password / Mot de passe', 'class'=>'form-control')); ?>
<?php echo $this->Form->input('online','hidden'); ?><!-- Ce champ ne doit pas être modifié, du coup caché -->
<?php echo $this->Form->input('ccab','hidden'); ?><!-- Ce champ ne doit pas être modifié, du coup caché -->
</br>
<button type="submit" class="btn btn-primary" value="Se connecter">S'enregistrer</button>
</div>
</form>
</div>
Dans core/Model.php j'ai créé mon modèle create
/**
* Ajouter un nouvel utilisateur
**/
public function create($data){
$log = 'login';
$fields = array($data);
$d = array();
foreach($data as $k=>$v){// Pour chaque information
if($k!=$this->login){
$fields] = "$k=:$k";
$d":$k"] = $v;
}elseif(!empty($v)){// Si la clé primaire n'est pas vide.
$d":$k"] = $v;// Dans ce cas, j'envoie ma clé primaire
}
}
$sql = 'INSERT INTO '.$this->table.' SET '.implode(',',$fields);// On fait une insertion du petit nouveau.
$pre = $this->db->prepare($sql);
$pre->execute($d);
$this->id = $this->db->lastInsertId();
}
Rien ne marche, Je suppose aussi qu'il faut que je touche à mes fichier conf.php et hook.php. Bref je suis bel et bien planté.
Merci de votre aide
Bonjour,
Edition :
Pourquoi avoir creer la fonction create ?
Cordialement
Bonsoir,
Peut-être serait-ce du à:
if($data->ccab = empty($data->ccab))
Salut,
Déjà il me semble que la syntaxe utiliser n'est pas la bonne.
Pour vérifier si une variable est vide, il suffit normallement de faire :
if(empty($data->ccab)){
#code...
}
Ensuite, à quoi sert cette variable ccab?
J'ai l'impression que tu essaies de modifier le script fournit par Graf dans le tuto pour l'adapter à ton besoin mais sans vraiment comprendre ce que tu fais...
A mon avis il est préférable de suivre le tuto pas à pas, sortir quelque chose qui fonctionne, comprendre comment ça fonctionne avant de le modifier...
Eventuellement là, si tu n'y arrive pas, demander conseil et expliquer ce que tu cherche à faire...
Bref, bon dèv' en tout cas!
Merci d'avoir pris le temps de vous penchez sur mon cas.
J'ai besoin d'une fonction create car la fonction save n'est pas tout à fait adaptée. Ma fonction create va être appelée régulièrement.
En tout cas une chose est sûre, c'est dur de passer de PDO à une structure MVC :)
B-art, tu as raison
if(empty($data->ccab)){
#code...
}
.
J'ai pris le soin de casser tout ce que j'avais fait et je suis repartis de 0.
Pour ceux que ça intéresse et au passage qu'en pensez-vous?
dans view/visitors/login_fr.php
<div class="container">
<div class="form-signin-heading">
<h1>Zone réservée</h1>
</div>
<form class="form-horizontal input-lg" action="<?php echo Router::url('visitors/login_fr'); ?> " method="post" role="form"><!-- Alignement dans form.php -->
<div class="form-group">
<?php echo $this->Form->input('login','Email', array('placeholder'=>'Rentrer votre email', 'class'=>'form-control')); ?>
<?php echo $this->Form->input('password','Mot de passe', array('type' => 'password', 'placeholder'=>'Mot de passe', 'class'=>'form-control')); ?>
<?php echo $this->Form->input('ccab','hidden'); ?><!-- Ce champ ne doit pas être modifié, du coup caché -->
</br>
<button type="submit" class="btn btn-primary" value="Se connecter">Se connecter</button> <a href="<?php echo Router::url('visitors/inscription_fr/'); ?>">Inscription</a>
</div>
</form>
</div>
dans view/visitors/inscription_fr.php
<div class="container">
<div class="form-signin-heading">
<h1>inscription</h1>
</div>
<form class="form-horizontal input-lg" action="<?php echo Router::url('visitors/inscription_fr'); ?> " method="post" role="form"><!-- Alignement dans form.php -->
<div class="form-group">
<?php echo $this->Form->input('name','Nom', array('placeholder'=>'Rentrer votre nom', 'class'=>'form-control', 'required'=>'required')); ?>
<?php echo $this->Form->input('login','Email', array('type'=>'email', 'placeholder'=>'Rentrer votre email', 'class'=>'form-control', 'required'=>'required')); ?>
<?php echo $this->Form->input('password','Mot de passe', array('type' => 'password', 'placeholder'=>'Mot de passe', 'class'=>'form-control', 'required'=>'required')); ?>
<?php echo $this->Form->input('id','hidden'); ?><!-- Ce champ ne doit pas être modifié, du coup caché -->
<?php echo $this->Form->input('ccab','hidden'); ?><!-- Ce champ ne doit pas être modifié, du coup caché -->
</br>
<button type="submit" class="btn btn-primary" value="Se connecter">S'enregistrer</button>
</div>
</form>
</div>
Dans controller/VisitorController.php
class VisitorsController extends Controller{
var $table = 'users';
public $db; // Variable db qui stoquera l'objet pdo.
function inscription_fr($id = null){
$salt = "48@!alsd";
$d'id'] = $id;
if($this->request->data){
$data = $this->request->data; // Pour simplifier $this->request->data on le stocke dans $data
if(empty($data->ccab)){
$this->loadModel('User');// On charge le modèle User
$user = $this->User->findFirst(array(// Je recherche dans la base de donnée le premier qui remplie les même conditions
'conditions' => array('login' => $data->login
)));
if(!empty($user)){ // Si ça remplie les conditions
$this->Session->setFlash('Cette email existe déjà.');
}else{
$data->password = sha1(sha1($data->password).$salt);// On crypte le mot de passe pour qu'il corresponde avec celui de la base de donnée
$this->User->create($this->request->data);
$this->Session->setFlash('Vous allez recevoir un email de confirmation.');
$this->redirect('visitors/login_fr');
}
}else{// else ccab
$this->redirect('visitors/login_fr');
}
}else{
return true;
}
$this->set($d);
}
/**
* Login
**/
function login_fr(){ // Fonction qui permet de se connecter
$salt = "48@!alsd";
// debug($this->Session->read());
if($this->request->data){// Si des données ont été postées
$data = $this->request->data; // Pour simplifier $this->request->data on le stocke dans $data
if($data->ccab = empty($data->ccab)){
$data->password = sha1(sha1($data->password).$salt);// On crypte le mot de passe pour qu'il corresponde avec celui de la base de donnée
$this->loadModel('User');// On charge le modèle User
$user = $this->User->findFirst(array(// Je recherche dans la base de donnée le premier qui remplie les même conditions
'conditions' => array('login' => $data->login,'password' => $data->password
)));
if(!empty($user)){ // Si ça remplie les conditions
$this->Session->write('User',$user); // Je mets $user en session
}
$this->request->data->password = ''; //Cela évite de renvoyer une deuxième fois le mot de passe
}else{
$this->redirect('visitors/login_fr');
}
}
if($this->Session->isLogged()){// Si l'utilisateur est connecté durant la session
if($this->Session->user('role') == 'admin'){
$this->redirect('cockpit');// Alors redirection vers la page d'administration
}elseif($this->Session->user('role') == 'user'){
$this->redirect('paris');// Alors redirection
}else{
$this->redirect('');
}
}
}
J'ai résolu mes problèmes mais je laisse mon post ouvert pour les remarques.
Merci encore de votre aide.