Bonjour,
Voila je rencontre un petit problème avec mon code.
j'ai créer une classe user dans laquelle j'ai developper une fonction inscription qui permet a l'utilisateur d'inscrire et dans la page
formulaire.php j'ai créer un instance de la classe et fait appl a inscription
voici la page User.php
<?php
class User
{
public $nom;
public $prenom;
public $ncin;
public $date_nais;
public $etablissement;
public $specialite;
public $sujet_master;
public $sujet_these;
public $grade;
public $tel;
public $mail;
private $pw;
public function __construct($nom, $prenom, $ncin, $date_nais, $etablissement,
$specialite, $sujet_master, $sujet_these, $grade, $tel, $mail, $pw)
{
$this->nom = $nom;
$this->prenom = $prenom;
$this->ncin = $ncin;
$this->date_nais = $date_nais;
$this->etablissement = $etablissement;
$this->specialite = $specialite;
$this->sujet_master = $sujet_master;
$this->sujet_these = $sujet_these;
$this->grade = $grade;
$this->tel = $tel;
$this->mail = $mail;
$this->pw = $pw;
}
public function inscription()
{
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$ncin = $_POST['ncin'];
$date_nais = $_POST['date_nais'];
$etablissement = $_POST['etablissement'];
$specialite = $_POST['specialite'];
$sujet_master = $_POST['sujet_master'];
$sujet_these = $_POST['sujet_these'];
$grade = $_POST['statut'];
$tel = $_POST['tel'];
$mail = $_POST['mail'];
$pw = $_POST['pw'];
$confirmation_token = sha1(uniqid(rand()));
require_once'Database.php';
require_once 'App.php';
$bd = App::getDatabase();
$req = $bd->query("INSERT INTO user ( ncin, nom, prenom, etablissement, specialite, master,
these, tel, mail, pass,naissance,grade)
VALUES ( :ncin,:nom, :prenom, :etablissement,:specialite, :sujet_master,:sujet_these,
:date_nais, :grade,:tel,:mail,:pw, :statut)",
array("ncin"=> $ncin,
"nom" => $nom,
"prenom" => $prenom,
"etablissement" => $etablissement,
"specialite" => $specialite,
"sujet_master" => $sujet_master,
"sujet_these" => $sujet_these,
"tel" => $tel,
"mail" => $mail,
"pw" => $pw,
"date_nais" => $date_nais,
"statut" => $grade
));
$user_id = $bd->LastInsertId();
// On envoit l'email de confirmation
mail($_POST['mail'], 'Confirmation de votre compte', "Afin de valider votre compte merci de cliquer sur ce lien\n\nhttp://localhost/assos/confirm.php?id=$user_id&token=$confirmation_token");
// On redirige l'utilisateur vers la page de login avec un message flash
$_SESSION['flash']['success'] = 'Un email de confirmation vous a été envoyé pour valider votre compte';
//App::redirect('connexion.php');
exit();
if ($req == FALSE) {
$errInfos = $bd->errorInfo();
echo '<div class="alert alert-danger">
<h4>Echec</h4>
<p>Votre compte n\'a pas �t� cr�e pour les raison suivantes: </p>
</div>' . $errInfos[2];
}
}
}
?>
formulaire.php
<?php
require 'inc/header.php';
include_once('class/User.php');
require_once 'class/Database.php';
require_once 'class/App.php';
if(!empty($_POST)){
$errors=array();
if(empty($_POST['nom']) || !preg_match('/^[a-zA-Z]+$/', $_POST['nom'])){
$errors['nom'] = "Vous devez entrer votre nom";
}
if(empty($_POST['prenom']) || !preg_match('/^[a-zA-Z]+$/', $_POST['prenom'])){
$errors['prenom'] = "Vous devez entrer votre prenom";
}
if(empty($_POST['ncin'])){
$errors['ncin'] = "Vous devez entrer le numéro de votre cart d'identité";
}
if(empty($_POST['etablissement'])){
$errors['etablissement'] = "Vous devez entrer le nom d'établissement";
}
if(empty($_POST['specialite'])){
$errors['specialite'] = "Vous devez entrer votre spécialté";
}
if(empty($_POST['sujet_master'])){
$errors['sujet_master'] = "Vous devez entrer votre sujet de mastère";
}
if(empty($_POST['sujet_these'])){
$errors['sujet_these'] = "Vous devez entrer votre sujet de thèse";
}
if(empty($_POST['tel']) ){
$errors['tel'] = "Vous devez entrer votre numéro de téléphone";
}
if (empty($_POST['mail']) || !filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL)) {
$errors['mail'] = "Vérifier votre email";
}elseif(!empty($_POST['mail']) && filter_var($_POST['mail'], FILTER_VALIDATE_EMAIL)) {
include_once 'class/Database.php';
include_once 'class/App.php';
$bd=App::getDatabase();
$user =$bd->query('select mail from user WHERE mail=?',[$_POST['mail']])->fetch();
if($user){
$errors['mail'] = 'Cette adresse mail est déjà utilisé';
}
}
if ((empty($_POST['pw']) ||empty($_POST['pw1']) )){
$errors['pw'] = "Vous devez entrer votre mot de pass et sa confirmation";
if( $_POST['pw']!= $_POST['pw1'] ){
$errors['pw'] = "Vous devez retaper le même mot de pass";
}
if(strlen($_POST['pw'])<=6){
$errors['pw']="mot de passe doit contenir au moins 6 caractere ";
}
}
if(empty($errors)){
$adherent =new User($_POST['ncin'],$_POST['nom'],$_POST['prenom'], $_POST['etablissement'],$_POST['specialite'],$_POST['sujet_master'],
$_POST['sujet_these'],$_POST['tel'],$_POST['mail'],$_POST['pw'],$_POST['date_nais'],$_POST['statut']);
$adherent->inscription();
}
}
?>
<div class="container-fluid" style="margin-top: 100px">
<div class="col-md-offset-3 col-md-6">
<h1><i> Inscription</i></h1>
<br>
<?php
if(!empty($errors)):
?>
<div class="alert alert-danger">
<h4>Vous n'avez pas rempli le formulaire correctement </h4>
<ul>
<?php foreach($errors as $error): ?>
<li> <?= $error; ?></li>
<?php endforeach ; ?>
</ul>
</div>
<?php elseif(empty($errors) && !empty($_POST)): ?>
<div class="alert alert-success">
<h4>Félicitation!</h4>
<p>Votre compte a été crée avec succès.</p>
</div>
<?php endif; ?>
<form role="form" method="POST" action="formulaire.php" >
<div class="form-group col-sm-6">
<label> Nom :</label>
<input type="text" class="form-control" name="nom">
</div>
<div class="form-group col-sm-6">
<label>Prénom :</label>
<input type="text" class="form-control" name="prenom">
</div>
<div class="form-group col-sm-6">
<label >Numéro de la cart d'identité :</label>
<input type="text" class="form-control" name="ncin">
</div>
<div class="form-group col-sm-6">
<label class="oblig">Date de naissance :</label>
<input type="date" class="form-control" name="date_nais">
</div>
<div class="form-group col-sm-12">
<label class="oblig">Etablissement :</label>
<input type="text" class="form-control" name="etablissement">
</div>
<div class="form-group col-sm-6">
<label class="oblig"><b> Grade:</b></label>
<select class="form-control" name="grade" size="1">
<option>Mastère</option>
<option>Enseigant</option>
<option>Doctorant</option>
<option>Docteur</option>
</select>
</div>
<div class="form-group col-sm-6">
<label class="oblig">Spécialité: </label>
<input type="text" name="specialite" class="form-control"/><span class="error"></span>
</div>
<div class="form-group col-sm-12">
<label class="oblig">Sujet master: </label>
<input type="text" name="sujet_master" class="form-control" /><span class="error"></span>
</div>
<div class="form-group col-sm-12">
<label class="oblig">Sujet these: </label>
<input type="text" name="sujet_these" class="form-control" /><span class="error"></span>
</div>
<div class="form-group col-sm-6">
<label class="oblig">statut: </label>
<select class="form-control" name="statut" size="1">
<option>Adhérent</option>
<option>Membre</option>
<option>Trésorier</option>
<option>Administrateur</option>
<option>Président</option>
</select>
</div>
<div class="form-group col-sm-6">
<label class="oblig">Tél: </label>
<input type="text" name="tel" class="form-control" /><span class="error"></span>
</div>
<div class="form-group col-sm-12">
<label class="oblig">E-mail :</label>
<input type="email" class="form-control" name="mail">
</div>
<div class="form-group col-sm-6">
<label class="oblig">Mot de pass :</label>
<input type="password" class="form-control" name="pw">
</div>
<div class="form-group col-sm-6">
<label class="oblig">Confirmer votre mot de pass :</label>
<input type="password" class="form-control" name="pw1">
</div>
<div class="form-group col-sm-6">
<input type="submit" value="envoyer" class="btn btn-default btn-ms" name="envoyer">
</div>
</form>
</div>
</div>
<?php include'footer.html';?>
Database.php
<?php
class Database
{
public $pdo;
public function __construct(){
$this->pdo = new PDO("mysql:dbname=chercheur;host=localhost", 'root', '');
$this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
}
public function query($query,$params){
if($params) {
$req = $this->pdo->prepare($query);
$req->execute($params);
} else{
$req=$this->pdo->query($query);
}
return $req;
}
public function LastInsertID(){
return $this->pdo->LastInsertId();
}
}
je serai trés reconnaissante si quelqu'un peut m'aider de resoudre l'erreur . Merci
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\wamp\www\assos\class\Database.php on line 14
PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp\www\assos\class\Database.php on line 14
Hello,
$req = $bd->query("INSERT INTO user ( ncin, nom, prenom, etablissement, specialite, master,
these, tel, mail, pass,naissance,grade)
VALUES ( :ncin,:nom, :prenom, :etablissement,:specialite, :sujet_master,:sujet_these,
:date_nais, :grade,:tel,:mail,:pw, :statut)",
array("ncin"=> $ncin,
"nom" => $nom,
"prenom" => $prenom,
"etablissement" => $etablissement,
"specialite" => $specialite,
"sujet_master" => $sujet_master,
"sujet_these" => $sujet_these,
"tel" => $tel,
"mail" => $mail,
"pw" => $pw,
"date_nais" => $date_nais,
"statut" => $grade
));
Ton tableau de paramètre, il manque les ':' devant les noms de tes paramètres =>
$req = $bd->query("INSERT INTO user ( ncin, nom, prenom, etablissement, specialite, master,
these, tel, mail, pass,naissance,grade)
VALUES ( :ncin,:nom, :prenom, :etablissement,:specialite, :sujet_master,:sujet_these,
:date_nais, :grade,:tel,:mail,:pw, :statut)",
array(":ncin"=> $ncin,
":nom" => $nom,
":prenom" => $prenom,
":etablissement" => $etablissement,
":specialite" => $specialite,
":sujet_master" => $sujet_master,
":sujet_these" => $sujet_these,
":tel" => $tel,
":mail" => $mail,
":pw" => $pw,
":date_nais" => $date_nais,
":statut" => $grade
));
Pour plus d'informations => http://php.net/manual/fr/pdostatement.execute.php
oui il y a cela mais l'erreur dit que le nombre de paramètre demander et celui envoyer est différent. Il manque le grade dans le execute.
lol Huggy.
[Hors Sujet On] Et tant qu'on y est, on pourrais mettre tous le codage en français (^_^) [Hors Sujet Off]
Bonjour.
Il te faut également faire attention à l'ordre que tu donnes au champs et aux valeurs, car si je prends l'exemple du champ tel, en correspondance de la liste des champs, il équivaut à la valeur de date_nais
qui à mon avis à un format de date qui ne correspond pas au champ tel en base de données.
Je te conseille donc de faire attention à l'ordre que tu donnes dans tes requêtes SQL.
La notation avec les :
peut avoir un avantage contrairement à la notation en ?
dans la méthode execute d'une requête préparée, mais ça ne veut pas dire que tu ne dois pas faire attention à l'ordre que tu donnes dans la liste des champs et des valeurs.