Bonjour,
Voila je rencontre un petit problème avec mon code.
<?php
include_once 'function.php';
class inscription{
private $nom;
private $prenom;
private $mdp;
private $mdp2;
private $email;
private $date_1;
private $pays;
private $sexe;
private $bdd;
public function __construct($nom,$prenom,$mdp,$mdp2,$email,$date_nais,$pays,$sexe){
$nom = htmlspecialchars($nom);
$prenom = htmlspecialchars($prenom);
$email = htmlspecialchars($email);
$date_nais = htmlspecialchars($date_nais);
$pays = htmlspecialchars($pays);
$sexe = htmlspecialchars($sexe);
$this->nom = $nom;
$this->prenom = $prenom;
$this->mdp = $mdp;
$this->mdp2 = $mdp2;
$this->email = $email;
$this->date_nais = $date_nais;
$this->pays = $pays;
$this->sexe = $sexe;
$this->bdd = bdd();
}
public function verif(){/*verifie si les elements du formulaire sont correct*/
if(strlen($this->nom) > 2 AND strlen($this->nom) < 20 ){ /*Si le nom est bon*/
if(strlen($this->prenom) > 2 AND strlen($this->prenom) <30 ) {/*si le prenom est bon*/
if(strlen($this->mdp) >6 AND strlen($this->mdp) <50 ){/*si le mot de passe est bon*/
if(strlen($this->mdp) == strlen($this->mdp2)){/*si le mot de passe est identique*/
if(preg_match('#^[0-9]{4}/[0-3]{2}/[0-3]{2}$#', $this->date_nais)){/*si la date est valide*/
if(preg_match('/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{2,4}$/', $this->email)){/*email valide*/
if($this->sexe == 'hommes' OR $this->sexe == 'HOMMES' OR $this->sexe == 'femmes' OR $this->sexe == 'FEMMES'){
return 'ok';
}else{
$erreur = 'entrer votre sexe';
return $erreur;
}
}else{
$erreur = 'l\'email n\'est pas correct';
return $erreur;
}
}else{
$erreur = ' le date n\'est pas valide';
return $erreur;
}
}else{
$erreur = 'les mots de passe ne sont pas identique';
return $erreur;
}
}else{
$erreur = 'mot de passe inccorrect';
return $erreur;
}
}else{
$erreur = 'prenom inccorrect';
return $erreur;
}
}
else { /*nom mauvais*/
$erreur = 'Le nom doit contenir entre 5 et 20 caractères';
return $erreur;
}
}
public function enregistrement(){
$requete = $this->bdd->prepare('INSERT INTO membres(nom,prenom,mdp,email,date_nais,pays,sexe) VALUES(:nom,:prenom,:mdp,:email,:date_nais,:pays,:sexe)');
$requete->execute(array(
'nom'=> $this->nom,
'prenom'=> $this->prenom,
'mail' => $this->mail,
'mdp' => $this->mdp,
'email'=> $this->email,
'date_nais' => $this->date_nais,
'pays' => $this->pays,
'sexe'=> $this->sexe,
));
return 1;
}
public function session(){
$requete = $this->bdd->prepare('SELECT id FROM membres WHERE nom = :nom ');
$requete->execute(array('nom'=> $this->nom));
$requete = $requete->fetch();
$_SESSION['id'] = $requete['id'];
$_SESSION['nom'] = $this->nom;
return 1;
}
}
je voudrai enreigistrer le formulaire dans la bd mai je bute sur une erreur de date
Bonsoir.
Pour commencer, tu devrais faire en sorte d'être cohérent entre les propriétés que tu déclares et de la manière que tu les définies.
Par exemple, tu déclares la propriété private $date_1;
sauf que dans le reste de ta classe tu la définis/appelle $this->date_nais
.
Tu as donc forcément une classe qui ne peut pas fonctionner correctement.
je ne parvien pas a enreigistrez les infos dans ma bd
Étant donné que dans ta requête SQL tu utilises $this->date_nais
alors que la propriété se nomme date_1
, ce n'est pas étonnant que tu aies une erreur pour l'enregistrement en BDD.
Ensuite, tu pourrais facilement éviter une condition aussi longue que :
if($this->sexe == 'hommes' OR $this->sexe == 'HOMMES' OR $this->sexe == 'femmes' OR $this->sexe == 'FEMMES')
En remplaçant par :
if(in_array($this->sexe, ['hommes', 'HOMMES', 'femmes', 'FEMMES']))
Soit avec la fonction in_array()
, qui permet de vérifier si une valeur est comprise dans un tableau.
jai rectifier le soucis est que lorsque j'ajoute une nouvelle conditiioin juste apres la date refuse
Concernant les Regex, tu trouveras ton bonheur ici https://regex101.com/ (Mieux vaut y aller avec Chrome, Firefox risque de planter).
Le dieux de la proigrammation a inventé les boucles :D
<select aria-label="Année" name="date_nais" id="year" title="Année" class="f_01">
<option value="0" selected="1">Année</option><option value="2016">2016</option>
<?php for ($i = 2015; $i >= 1905; $i -= 1): ?>
<option value="<?= $i ?>"><?= $i ?></option>
<?php endfor; ?>
</select>
De plus quand je vois le nombre de condition imbriqué je pense que tu as de sérieux soucis et que tu devrais voir/revoir l'algorithmie car en plus d'être immonde car il faut scroll à l'horizontale pour l'utilisateur ça deviens ceci :
Cordialement.
Pour le mail pourquoi une regex alors que tu a filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)