Bonjour,
Alors voila j'ai essayer de faire un formulaire d'inscription avec PDO mais je n'est n'y message d'erreur n'y nouvelles infos dans ma basse de donnée, je vous montre mon code ci vous pouvez m'aider ca serais cool Voici les 3 pages que j'utilise
index.php :
<?php
// A inclure dans le fichier index.php une foie la decomposition faite.
session_start();
//Connexion a la basse de donnée.
try{
$PDO = new PDO('mysql:host=localhost;dbname=myblog','root','');
$PDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);
$PDO->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_OBJ);
}catch(PDOException $e){
echo 'Connexion impossible';
}
// Inclure le fichier class.
require "class.auth.php";
//Fin de l'inclusion.
?>
Ensuite regis.php :
<?php
require "index.php";
if(isset($_POST'register'])){
$login = $_POST'login'];
$password = md5($_POST'password']);
$repeatpassword = $_POST'repeatpassword'];
$email = $_POST'email'];
$infos = $_POST'infos'];
if($Auth->register($PDO,$login,$password,$email,$infos)){
echo "Inscription termine";
}else{
echo "Echec lors de votre inscription";
}
}
?>
<h1>Inscription</h1><hr>
<form method="post" action="">
<label for="login">Login :</label>
<input type="text" name="login"><br/>
<label for="password">password :</label>
<input type="password" name="password"><br/>
<label for="repeatpassword">repeatpassword :</label>
<input type="password" name="repeatpassword"><br/>
<label for="email">email :</label>
<input type="text" name="email"><br/>
<label for="infos">infos :</label>
<input type="text" name="infos"><br/>
<input type="submit" name="valider" value="inscription">
</form>
et pour finir class.auth.php :
<?php class Auth{
/**
* Permet d'identifier un utilisateur
**/
function register($PDO,$login,$password,$email,$infos){
$req = $PDO->prepare("INSERT INTO users (login, password, email, infos, roles_id) VALUES ('".$login."', '".$password."', '".$email."', '".$infos."', '2')");
$req->execute(array(
"login" => $login,
"password" => $password,
"email" => $email,
"infos" => $infos
));
$data = $req->fetchAll();
if(count($data)>0){
$_SESSION'Auth'] = $data[0];
return true;
}
return false;
}
}
$Auth = new Auth();
Voila je vient de me mettre a PDO donc explication facile ca serais mieux :D
Salut,
Les valeurs externes dans les requêtes en PDO s'écrivent soit par des ?, soit par leur nom précédé d'un ":".
Essaye déjà comme ça :
$req = $PDO->prepare("INSERT INTO users (login, password, email, infos, roles_id) VALUES (:login, :password, :email, :infos, '2')");
$req->execute(array(
"login" => $login,
"password" => $password,
"email" => $email,
"infos" => $infos
));
Essaye ça,
J'utilisais cette fonction pour faire mes insert à l'époque.
Je l'ai déjà adapté pour toi.
/*CONNEXION*/
$pdo = new PDO('mysql:dbname=tuto;host=localhost','root','');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*INITIALISATION*/
echo "<pre>";
print_r($_POST);
echo "</pre>";
//On insert les donné des post dans un tableau pour la fonction ci dessous
$values= [
'username' => $_POST['username'],
'email' => $_POST['username'],
'password' => $_POST['username']
];
//On initialise des erreurs
$errors = [];
/*CONDITIONS*/
//Si le username est vide ou qu'il contient des charactère spéciaux
if(empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])){
$errors['username'] = "votre pseudo n'est pas valide (Alphanumérique)";
}
//Si l'adresse mail est vide ou invalide
if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
$errors['email'] = "Votre email n'est pas valide";
}
//Si le mot de passe est vide ou différent l'un l'autre
if(empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']){
$errors['password'] = "Vous devez rentrer un mot de passe valide";
}
//Si aucune erreur n'et detecté
if(empty($errors)){
//Liste des champs & value
$tmp_fields = '';
$tmp_value = '';
//on parcourt le tableau contenant ce qui à été posté
foreach($values as $paramName => $paramValue){
//Si le champ n'est pas vide
if(!empty($paramValue)){
//tmp_field donnera un string: "username email password"
$tmp_fields .= $paramName;
//tmp_value donnera un string: ":username :email :password"
$tmp_value .= ':'.$paramValue;
}
}
//On insert les virgule entre charque mot "username, email, password"
$tmp_fields = rtrim($tmp_fields,', ');
$tmp_value = rtrim($tmp_value,', ');
$tmp_query = ("INSERT INTO users ($tmp_fields) VALUES ($tmp_value) ");
//le tmp_query affichera "INSERT INTO users (username, email, password) VALUES (:username, :email, :password)"
//echo $tmp_query
//Préparation de la requête
$tmp_result = $pdo->prepare($tmp_query);
//Personnaliser chaque champ avec les valeurs
foreach($values as $paramName => $paramValue){
//Si le champ n'est pas le premier (id), qui est un n° Auto
if(!($paramName == 'id')){
//Si le champ n'est pas vide
if(!empty($paramValue)){
//si le champs est un integer
if(is_int($paramValue))
$param = PDO::PARAM_INT;
//si le champs est un boolean
elseif(is_bool($paramValue))
$param = PDO::PARAM_BOOL;
//si le champs est un NULL
elseif(is_null($paramValue))
$param = PDO::PARAM_NULL;
//si le champs est un string
elseif(is_string($paramValue))
$param = PDO::PARAM_STR;
//sinon
else
$param = FALSE;
//Associe une VALEUR à ce CHAMP
//ex: username donnera: $tmp_result->bindValue(':username', "Joe", PDO::PARAM_STR);
$tmp_result->bindValue(':'.$paramName, $paramValue, $param);
}
}
}
if($tmp_result->execute()){
echo "Succes";
}else{
echo "une erreur est survenue l'ors de l'insertion";
}
}
//Si au moins une erreurs est detecté ont affiche les erreurs
else{
echo "<pre>";
print_r($errors);
echo "</pre>";
}