débutant... Je n'arrive pas à envoyer les données en bdd... La connexion est pourtant ok...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : débutant... Je n'arrive pas à envoyer les données en bdd... La connexion est pourtant ok...

Re: débutant... Je n'arrive pas à envoyer les données en bdd... La connexion est pourtant ok...

par @rthur » 08 janv. 2021, 19:38

Il faut que tu avances davantage dans ton debugage pour qu'on puisse t'aider.
Commence par activer les messages d'erreurs de PDO avec le paramètre PDO::ERRMODE_WARNING pour voir les erreurs
https://www.php.net/manual/fr/pdo.error-handling.php

Et vérifie les logs Apache/PHP pour voir si ton script s'exécute bien.

débutant... Je n'arrive pas à envoyer les données en bdd... La connexion est pourtant ok...

par greggregorymars » 08 janv. 2021, 17:02

Bonjour, je viens vers vous pour me sortir de ce m...

J'arrive à récupérer les données de l'user mais arrivé à l'insertion en bdd, impossible, ça ne renvoie rien...


voici la fonction en question :


// Register
public function register($username, $email, $password, $password_check, $firstname, $lastname, $adress, $phone, $gender, $birthdate)
{
// Connexion Db
$connexion = $this->db->connectDb();

// Username
$pattern = "/^[\w]{5,20}$/i";
$username_required = htmlspecialchars(preg_match($pattern, $username));
if (!$username_required) {
$_GET['error'] = "Votre pseudo doit :<br>- Comporter entre 5 et 20 caractères.<br>- Ne contenir aucun espace.<br>- Ne contenir aucun caractère spécial (excepté _).";
}

/* var_dump($username); */

$user_check = $connexion->prepare("SELECT username FROM users WHERE username = '$username'");
$user_check->execute();
$user_checked = $user_check->fetch(PDO::FETCH_ASSOC);

/* var_dump($user_checked); */

if (!empty($user_checked['username'])) {
$_GET['error'] = "Ce pseudo est déjà utilisé.";
}

// Email
$pattern = "/^[A-Za-z0-9._-]+@[a-z]+.[a-z]{2,4}$/";
$email_required = htmlspecialchars(preg_match($pattern, $email));
if (!$email_required) {
$_GET['error'] = "Le format de l'e-mail est incorrect.";
}

$email_check = $connexion->prepare("SELECT email FROM users WHERE email = '$email'");
$email_check->execute();
$email_checked = $email_check->fetch(PDO::FETCH_ASSOC);

/* var_dump($email_checked); */

if (!empty($email_checked['email'])) {
$_GET['error'] = "Cette adresse mail est déjà utilisée.";
}

/* var_dump($email); */

// Password
$pattern = "/^(?=.*?[A-Z]{1,})(?=.*?[a-z]{1,})(?=.*?[0-9]{1,})(?=.*?[\W]{1,}).{8,20}$/";
$password_required = htmlspecialchars(preg_match($pattern, $password));
if (!$password_required) {
$_GET['error'] = "Le mot de passe doit contenir:<br>- Entre 8 et 20 caractères<br>- Au moins 1 caractère spécial<br>- Au moins 1 majuscule et 1 minuscule<br>- Au moins un chiffre.";
}
if ($password != $password_check) {
$_GET['error'] = "Les mots de passe ne correspondent pas.";
} else {
$password_hashed = password_hash($password, PASSWORD_BCRYPT, array('cost' => 10));
/* var_dump($password_hashed, $password, $password_check); */
}

// Firstname
$pattern = "/^(?=.*[A-Za-z]$)([A-Za-z]{2,25}[\s]?[A-Za-z]{1,25})$/";
$firstname_required = htmlspecialchars(preg_match($pattern, $firstname));
if (!$firstname_required) {
$_GET['error'] = "Le prénom doit:<br>- Comporter entre 3 et 50 caractètres.<br>- Commencer et finir par une lettre.<br>- Ne contenir aucun caractère spécial (excepté un espace).";
}

/* var_dump($firstname); */

// Lastname
$pattern = "/^(?=.*[A-Za-z]$)([A-Za-z]{2,25}[\s]?[A-Za-z]{1,25})$/";
$lastname_required = htmlspecialchars(preg_match($pattern, $lastname));
if (!$lastname_required) {
$_GET['error'] = "Le nom doit:<br>- Comporter entre 3 et 50 caractètres.<br>- Commencer et finir par une lettre.<br>- Ne contenir aucun caractère spécial (excepté un espace).";
}

/* var_dump($lastname); */

// Adress
$adress = htmlspecialchars($adress);

/* var_dump($adress); */

// Phone number
$pattern = "/^0[1-9]{9}$/";
$phone_required = htmlspecialchars(preg_match($pattern, $phone));
if (!$phone_required) {
$_GET['error'] = "Le numéro de téléphone doit commencer par un zéro '0' et contenir au total 10 chiffres.";
}

/* var_dump($phone); */

// Gender
$gender = htmlspecialchars($gender);

/* var_dump($gender); */

// Birthdate
/* var_dump($birthdate); */


$pattern = "/^0[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])$/";
$birtdate_required = htmlspecialchars(preg_match($pattern, $birthdate));
if (!$birtdate_required) {
$_GET['error'] = "Seulement ce format est accepté :<br>- jj/mm/aaaa. -";
}

// Date
date_default_timezone_set("Europe/Paris");

if (empty($username or $email or $password or $password_check or $firstname or $lastname or $adress or $phone or $gender or $birthdate)) {
$_GET['error'] = "Tous les champs doivent être remplis.";
}

var_dump($username, $email, $password, $password_check, $firstname, $lastname, $adress, $phone, $gender, $birthdate);

if (empty($_GET['error'])) {

$register = $connexion->prepare("INSERT INTO users
(rank, username, password, email, firstname, lastname, adress, phone, gender, birthdate, date_joined)
VALUES (:rank, :username, :password, :email, :firstname, :lastname, :adress, :phone:, :gender, :birthdate, NOW())");



$register->bindParam(':rank', 'user', PDO::PARAM_STR);
$register->bindParam(':username', $username, PDO::PARAM_STR);
$register->bindParam(':password', $password_hashed, PDO::PARAM_STR);
$register->bindParam(':email', $email, PDO::PARAM_STR);
$register->bindParam(':firstname', $firstname, PDO::PARAM_STR);
$register->bindParam(':lastname', $lastname, PDO::PARAM_STR);
$register->bindParam(':adress', $adress, PDO::PARAM_STR);
$register->bindParam(':phone', $phone, PDO::PARAM_STR);
$register->bindParam(':gender', $gender, PDO::PARAM_STR);
$register->bindParam(':birthdate', $birthdate, PDO::PARAM_STR);
$register->execute();


header('Location:connexion.php');
/* $this->connect($email, $password); */
}

}

Et voici la connexion en bdd :



<?php
class Db
{
// ATTRIBUTS
private $host = 'localhost';
private $username = 'root';
private $password = '';
private $database = 'boutique';
public $PDO;

// METHODES
// Constructeur
public function __construct($host = null, $username = null, $password = null, $database = null)
{
if ($host != null) {
$this->host = $host;
$this->username = $username;
$this->password = $password;
$this->database = $database;
}
}

// Connexion Db
public function connectDb()
{

try { // Indique la requête SQL à lancer quand on se connecte
$this->PDO = new PDO(
'mysql:host=' . $this->host .
';dbname=' . $this->database,
$this->username,
$this->password,
// On interragit avec la Base de données en UTF8 pour empêcher les problèmes d'accent
array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8',
// Mode d'erreur pour avoir des warning et le descriptif des erreurs
PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING
)
);
// Retour de la connexion
return $this->PDO;
// Récupération des erreurs
} catch (PDOException $e) {
print_r("Erreur de connexion à la base de données : " . $e->getMessage() . "<br/>");
die();
}
}
}
?>

Merci à celui ou ceux qui trouveront le soucis...