Bonsoir,
Voici une petite fonction que j'essai de mettre en place.
En testant avec mon formulaire je reçois bien les erreurs que je sort dans ma boucle
function errors($messages = []){
$return = "<div class='notify notify-rouge'><div class='notify-box-content'>";
foreach($messages as $k => $v){
$return .= '<li>'.$v.'</li>';
var_dump('<li>'.$v.'</li>');
}
$return .="</div></div>";
return $return;
}
voici ce que je teste
if((strlen($pass) < 6) || (strlen($pass) > 100)){
$error = errors(["Le mots de pass est trop court 6 mini ou trop long - 100 caractères"]);
}if(!empty($pass != $password_confirm)){
$error = errors(["Vos mots de pass sont diférent"]);
}
j'affiche mes erreurs comme ceci <?= !empty($error) ? $error : '' ;?>
hors dans mon var_dump je retourne bien les deux erreurs mais pas dans le return.
En gros je cherche a retourner toutes les erreurs de mes formulaire avec une fonction c'est plus pratique que de faire un foreach sur chaque page.
J'avoue ne pas trop connaitre les fonction :)
Initialise ton $error avant ($error = '';)
Puis à chaque erreur, tu fais un $error .= //appel à ta fonction
(en ajoutant le "point" avant le égal).
Retire
$return = "<div class='notify notify-rouge'><div class='notify-box-content'>";
et
$return .="</div></div>";
de ta fonction
Et ajoute-le à la mano après.
PS : div > li , ça n'existe pas
Bonjour,
Pourquoi
!empty($pass != $password_confirm)
Et pas juste
$pass != $password_confirm
Et tu peux nous montrer ta fonction errors ?
Car là, ta variable $error contient le retour du premier errors puis est écrasé avec le deuxième.
Après, ru peux essayer un truc du genre
$error =[];
if((strlen($pass) < 6) || (strlen($pass) > 100)){
$error[] = "Le mots de pass est trop court 6 mini ou trop long - 100 caractères";
}if(!empty($pass != $password_confirm)){
$error[] = "Vos mots de pass sont diférent";
}
Return $error;
Et la tu as un array avec toutes tes erreurs en lignes.
Bonsoir / jour
Alors pour répondre a exothermique oui j'ai fais un var_dump de ma variable error elle me sort une seul ligne !!
le var dump de $error string '<div class='notify notify-rouge'><div class='notify-box-content'><li>Vos mots de pass sont diférent</li></div></div>'
et le var dump dans ma fonction ou j'ai bien mes deux lignes
string '<li>Le mots de pass est trop court 6 mini ou trop long - 100 caractères</li>' (length=77)
string '<li>Vos mots de pass sont diférent</li>' (length=40)
et pour répondre a eltharin pourquoi !empty($pass != $password_confirm)
par ce que je vérifie aussi si c'est vide m'enfin ça sert a rien c'est juste un tique.
Et pour ma fonction error elle est dans mon premier méssage
function errors($messages = []){
$return = "<div class='notify notify-rouge'><div class='notify-box-content'>";
foreach($messages as $k => $v){
$return .= '<li>'.$v.'</li>'; // m'en retourne qu'une seul
var_dump('<li>'.$v.'</li>'); //me retourne deux ligne
}
$return .="</div></div>";
return $return;
}
le but est que ça m'affiche toute les erreurs qu'il y a dans le même formulaire, je presume que j'ai pas besoin de désigner une var error[ ]
puisse que ma fonction le fait avec $messages
.
Bonjour,
Le empty est lancé sur ta condition, en gros ca revoens à faire empty(false) si les valeurs sont differentes.
Donc pour moi non ca ne sert à rien, si tu veux dans le même temps tester les deux c'est
If (!empty($pass) && $pass != $password_confirm)
Concernant ta variable message, elle est locale à la fonction, elle ne va pas stocker les deux erreurs.
Ta fonction va prendre cette variable faire un foreach et generer du HTML (en li) pour ce tableau et le retourner.
Ce code HTML généré va alors dans la variable $error de ta fonction principale.
A la deuxième erreur, il recommence la fonction, avec un nouveau $message et génère à nouveau du code et le stocke dans la variable $error en ecrasant toute donnée précédente.
D'ailleurs si tu fais un var_dump après chaque $error =... Tu auras bien deux lignes.
Regarde le code que je t'ai donné au dessus et ajoute à la fin (a la place du return)
Var_dump (errors($error));
Tu devrais avoir deux lignes.
Bizarrement quand je fais un var_dump j'ai deux lignes, je retourne donc ce que je veut, mais quand je fais seleument le echo je n'en ai qu'une.
Merci kenor j'y suis presque, mes erreur ce chevauche.
Alors qu'elle devrait être dans la même div
<div class='notify notify-rouge'>
<div class='notify-box-content'>
<li>error 1 </li>
<li>error 2 </li>
</div>
</div>
c'est la même fonction sauf que dans mon traitement de formulaire j'ai fais ça
if((strlen($pass) < 6) || (strlen($pass) > 100)){
$error = errors(["Le mots de pass est trop court 6 mini ou trop long - 100 caractères"]);
}if($pass != $password_confirm){
$error .= errors(["Vos mots de pass sont diférent"]);
}
et comme c'est une div fixe
.notify {
width: auto;
height: auto;
position: fixed;
z-index: 5000;
margin-top: 5px;
margin-right: 5px;
right: 0;
top: 0;
}
je ne vois pas trop comment réglé ça.
ça marche bien mais le soucis c'est que dans certain cas si on ne retourne pas d'erreur comme ici :
if(empty($email)){
$error = errors(["L'email n'est pas valide ne doit pas être vide"]);
}
if($email != $email_confirm){
$error .= errors(["L'email est diférent"]);
}
if(empty($userurl) || !preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$userurl)){
$error .= errors(["Votre URL n'est pas une URL valide"]);
}if((strlen($description) > 500)){
$error .= errors(["La description ne doit pas contenir plus de 500 caractères"]);
}
si la première erreur ne retourne rien alors j'ai undefined variable sur le email confirm tant que je ne retire pas le point.
C'est pour ça que j'avais dis
"Initialise ton $error avant ($error = '';)"
Soit, dans ton cas :
$error = '';
if(empty($email)){
$error .= errors(["L'email n'est pas valide ne doit pas être vide"]);
etc.