J'ai un souci de logique avec un if imbriqué ds un autre
elseif(!empty($post['email'])) //check given email address
{
if (!filter_var($post['email'], FILTER_VALIDATE_EMAIL))
{
echo($post['email']." is not a valid email address");
require 'vue/register.php';
}
}
else
{
echo "formulaire envoyé";
//instancier la classe qui envoie les données des utilisateurs vers la bdd
$user= new AdminUsers();
$checkUser = $user->addUserToDb($post);
echo $checkUser;
}
A la fin de mon if interne je ne reprend pas le else final du if principal
mon script complet est le suivant
public function addUser()
{
$post = $_POST;
/******** Contact form check ****************/
$contactMessage="";
echo "$contactMessage " .$contactMessage;
if (empty($post['nom']))
{
$_GLOBALS["contactMessage"] = "rien ds le nom"; // Store error message to be abvailable into register.php
require 'vue/register.php';
}
elseif(empty($post['prenom']))
{
$_GLOBALS["contactMessage"] = "rien ds le prenom";
require 'vue/register.php';
}
elseif(empty($post['email']))
{
$_GLOBALS["contactMessage"] = "rien ds le email";
require 'vue/register.php';
}
elseif(!empty($post['email'])) //check given email address
{
if (!filter_var($post['email'], FILTER_VALIDATE_EMAIL))
{
echo($post['email']." is not a valid email address");
require 'vue/register.php';
}
}
elseif(empty($post['login']))
{
$_GLOBALS["contactMessage"] = "rien ds le login";
require 'vue/register.php';
}
elseif(empty($post['password']))
{
$_GLOBALS["contactMessage"] = "rien ds le password";
require 'vue/register.php';
}
elseif(empty($post['password2']))
{
$_GLOBALS["contactMessage"] = "rien ds le password2";
require 'vue/register.php';
}
elseif(($post['password2']) !== ($post['password']) )
{
$_GLOBALS["contactMessage"] = "les champs des mots de passe doivent être identique";
require 'vue/register.php';
}
else
{
echo "formulaire envoyé";
//instancier la classe qui envoie les données des utilisateurs vers la bdd
$user= new AdminUsers();
$checkUser = $user->addUserToDb($post);
echo $checkUser;
}
}
Au fait non car il faut vraiment voir les accolades comme des blocks de code et donc si tu es dans un if car la condition de ce dernier est vrai alors tu n'ira jamais dans le else quoi qu'il arrive. On va prendre un exemple simple pour illustrer :
Si je lance ce code je n'aurai aucun des echo qui seront lancé car une fois que l'on rentre dans le if de l'action, on ne peut plus aller dans le else. Le if sur l'age n'est pas lié au if sur l'action.
Je sais pas si j'ai été clair car pour moi cela semble logique et naturel.
Pour en revenir à ton code, je dirais qu'il a plusieurs soucis et tous ses elseif déjà c'est bizarre. Voici comment je ferrais personnellement :
<?php
class Test
{
public function addUser()
{
// pas besoin du $post = $_POST
// on va prendre tous les champs que l'on a besoin
// et avec l'operateur ?? on pourra
// donner une valeur par défaut
$nom = $_POST['nom'] ?? null;
$prenom = $_POST['prenom'] ?? null;
$email = $_POST['email'] ?? null;
$login = $_POST['login'] ?? null;
$password = $_POST['password'] ?? null;
$passwordConfirm = $_POST['password2'] ?? null;
// Pour gérer les erreurs on les stocks dans un tableau
$errors = [];
$requireFields = compact('nom', 'prenom', 'email', 'login', 'password', 'passwordConfirm');
if (!$this->checkAllRequiredFields($requireFields)) {
$errors[] = 'Certains champs obligatoire ne sont pas rempli';
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "L'email n'est pas dans un format valide (eg: compte@email.com)";
}
if ($password !== $passwordConfirm) {
$errors[] = 'Les mots de passe sont différent';
}
// Etc. pour toutes les erreurs
if (empty($errors)) {
// Validation OK
} else {
// validation Pas OK
}
}
/**
* @param array $fields
* @return bool
*/
private function checkAllRequiredFields(array $fields): bool
{
foreach ($fields as $field) {
if (empty($field)) {
return false;
}
}
return true;
}
}
sans reflechir plus ( ce qui me fait penser que je me fourvoie en allant ds le dev sans avoir la logique naturelle)
Si ça peut te rassurer, il n'y a rien de naturel à programmer, faut du temps de pratique pour que ça devienne naturel.
C'est un peu comme apprendre à conduire, au début on doit réfléchir à chaque action de base, et après ça devient un réflexe, et on peut passer les vitesses tout en parlant avec un passager par exemple.
Sauf que programmer, ça demande beaucoup plus de temps d'apprentissage.
Blond, bouclé, toujours le sourire aux lèvres...
if imbriqués
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Un jour j'irai vivre en Théorie , car en Théorie tout se passe bien.
Ars longa, vita brevis
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL
Un jour j'irai vivre en Théorie , car en Théorie tout se passe bien.
Ars longa, vita brevis
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL
Un jour j'irai vivre en Théorie , car en Théorie tout se passe bien.
Ars longa, vita brevis
Blond, bouclé, toujours le sourire aux lèvres...