Page 1 sur 1

Deux formulaires dans une page / un seul obligatoire

Posté : 13 avr. 2015, 10:59
par PortgasDKiba
Bonjour,

je suis confronté à une problématique que je n'arrive pas à résoudre...

Si quelqu'un peut me mettre sur la piste ce serait sympathique.

Dans une page, j'ai un formulaire d'ajout de médecins et un formulaire d'ajout de laboratoires contenant :
Nom (du médecin ou du laboratoire)
Date du RDV
Heure du RDV

J'ai des contrôles sur les champs :
Ils ne peuvent pas être vides
Contrôle du format de la date et de l'heure

Le problème est le suivant, à cause de mes contrôles je suis obligé d'avoir renseigné les deux formulaires pour pouvoir valider mon formulaire. Je voudrai pouvoir valider le formulaire si médecin est rempli mais pas laboratoire, si laboratoire est rempli mais pas médecin et si les deux sont remplis.

Comment faire ?

Merci

Re: Deux formulaires dans une page / un seul obligatoire

Posté : 13 avr. 2015, 12:13
par sadeq
Bonjour, voici la table de vérité :

Soit, 2 variables logiques : f1 et f2 représentant respectivement tes 2 formulaires médecin et laboratoire.
Voici les états de validité logiques possibles et les actions qui en découlent :
f1 -------- f2 ----------- Action
V -------- V ----------- Validation des 2 formulaires f1 et f2
V -------- F ----------- Validation de f1
F --------- V ----------- Validation de f2
F --------- F ----------- Aucune validation du tout

Et voici l'algorithme qui code cette table de vérité :
Si f1 n'est pas valide ET f2 n'est pas valide Alors Erreur de validation de f1 et f2
Sinon
_____ Si f1 est valide Alors Validation de f1
_____ Sinon
___________ Si f2 est valide Alors Validation de f2 Fin si
______ Fin si
Fin si.

Voila.

Re: Deux formulaires dans une page / un seul obligatoire

Posté : 13 avr. 2015, 12:36
par PortgasDKiba
Bonjour sadeq et merci pour ta réponse.

J'ai bien la logique en tête de l'algo me permettant de valider ce ou ces formulaires.

Le problème c'est plutôt sur l'organisation de mon code avec tous les contrôles etc.

Voici actuellement mon code :

Code : Tout sélectionner

<?php if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") { $errors = array(); $medecins_nom = array_filter($_POST['medecins_nom'], function ($value) { return !empty($value); }); if(empty($medecins_nom)) { $errors[] = ''. _msgForm_NOM .''; } foreach($_POST['medecins_date'] as $medecins_date) { if(empty($medecins_date)) { $errors[] = ''. _msgForm_DATERDV .''; } else if(!preg_match('/^([1-9]|[0-2][\d]|3[0-1])\/([1-9]|[0-1][0-2])\/(19|20)[\d]{2}$/', $medecins_date)) { $errors[] = ''. _msgForm_DATEFORMAT .''; } else { $ad_medecins_date = DateTime::createFromFormat('d/m/Y', $medecins_date); $timestamp_mdate = $ad_medecins_date->getTimestamp(); } } foreach($_POST['medecins_heure'] as $medecins_heure) { if(empty($medecins_heure)) { $errors[] = ''. _msgForm_HEURERDV .''; } else if(!preg_match('/^(2[0-3]|[01][0-9]):[0-5][0-9]$/', $medecins_heure)) { $errors[] = ''. _msgForm_HEUREFORMAT .''; } } $laboratoires_rs = array_filter($_POST['laboratoires_rs'], function ($value) { return !empty($value); }); if(empty($laboratoires_rs)) { $errors[] = ''. _msgForm_RS .''; } foreach($_POST['laboratoires_date'] as $laboratoires_date) { if(empty($laboratoires_date)) { $errors[] = ''. _msgForm_DATERDV .''; } else if(!preg_match('/^([1-9]|[0-2][\d]|3[0-1])\/([1-9]|[0-1][0-2])\/(19|20)[\d]{2}$/', $laboratoires_date)) { $errors[] = ''. _msgForm_DATEFORMAT .''; } else { $ad_laboratoires_date = DateTime::createFromFormat('d/m/Y', $laboratoires_date); $timestamp_ldate = $ad_laboratoires_date->getTimestamp(); } } foreach($_POST['laboratoires_heure'] as $laboratoires_heure) { if(empty($laboratoires_heure)) { $errors[] = ''. _msgForm_HEURERDV .''; } else if(!preg_match('/^(2[0-3]|[01][0-9]):[0-5][0-9]$/', $laboratoires_heure)) { $errors[] = ''. _msgForm_HEUREFORMAT .''; } } $medecins = $_POST['medecins_id']; $laboratoires = $_POST['laboratoires_id']; if(!empty($errors)) { echo '<div class="alert mt20 error"> <ul>'; foreach($errors as $error) { echo '<li>',$error,'</li>'; } echo '</ul> </div>'; } else { // Mes requête d'insertions dans mes tables echo '<div class="alert mt20 success">Les rendez-vous médecin(s) / laboratoire(s) ont bien été enregistrés.</div>'; } ?>

Re: Deux formulaires dans une page / un seul obligatoire

Posté : 13 avr. 2015, 13:11
par sadeq
Tu peux spécifier pour chaque formulaire une variable d'erreurs qui témoignent si elles sont vides de la validité de chaque formulaire.
Par exemple, $errors_medecin et $errors_laboratoire, puis faire le dernier test SI comme ça :
Si $errors_medecin n'est pas vide ET $errors_laboratoire n'est pas vide Alors:
_________ afficher les messages de $errors_medecin et $errors_laboratoire
Sinon
_________ Exécuter les requêtes d'insertion dans les tables
Fin si.

Re: Deux formulaires dans une page / un seul obligatoire

Posté : 13 avr. 2015, 15:20
par PortgasDKiba
Quelque chose dans ce genre là sadeq ?

Code : Tout sélectionner

<?php if(isset($_POST) and $_SERVER['REQUEST_METHOD'] == "POST") { $errors_medecins = array(); $errors_laboratoires = array(); $medecins_nom = array_filter($_POST['medecins_nom'], function ($value) { return !empty($value); }); if(empty($medecins_nom)) { $errors_medecins[] = ''. _msgForm_NOM .''; } foreach($_POST['medecins_date'] as $medecins_date) { if(empty($medecins_date)) { $errors_medecins[] = ''. _msgForm_DATERDV .''; } else if(!preg_match('/^[0-3]?[0-9]\/[01]?[0-9]\/[12][90][0-9][0-9]$/', $medecins_date)) { $errors_medecins[] = ''. _msgForm_DATEFORMAT .''; } else { $ad_medecins_date = DateTime::createFromFormat('d/m/Y', $medecins_date); $timestamp_mdate = $ad_medecins_date->getTimestamp(); } } foreach($_POST['medecins_heure'] as $medecins_heure) { if(empty($medecins_heure)) { $errors_medecins[] = ''. _msgForm_HEURERDV .''; } else if(!preg_match('/^(2[0-3]|[01][0-9]):[0-5][0-9]$/', $medecins_heure)) { $errors_medecins[] = ''. _msgForm_HEUREFORMAT .''; } } $laboratoires_rs = array_filter($_POST['laboratoires_rs'], function ($value) { return !empty($value); }); if(empty($laboratoires_rs)) { $errors_laboratoires[] = ''. _msgForm_RS .''; } foreach($_POST['laboratoires_date'] as $laboratoires_date) { if(empty($laboratoires_date)) { $errors_laboratoires[] = ''. _msgForm_DATERDV .''; } else if(!preg_match('/^[0-3]?[0-9]\/[01]?[0-9]\/[12][90][0-9][0-9]$/', $laboratoires_date)) { $errors_laboratoires[] = ''. _msgForm_DATEFORMAT .''; } else { $ad_laboratoires_date = DateTime::createFromFormat('d/m/Y', $laboratoires_date); $timestamp_ldate = $ad_laboratoires_date->getTimestamp(); } } foreach($_POST['laboratoires_heure'] as $laboratoires_heure) { if(empty($laboratoires_heure)) { $errors_laboratoires[] = ''. _msgForm_HEURERDV .''; } else if(!preg_match('/^(2[0-3]|[01][0-9]):[0-5][0-9]$/', $laboratoires_heure)) { $errors_laboratoires[] = ''. _msgForm_HEUREFORMAT .''; } } $medecins = $_POST['medecins_id']; $laboratoires = $_POST['laboratoires_id']; if(!empty($errors_medecins) AND !empty($errors_laboratoires)) { echo '<div class="alert mt20 error"> <ul>'; foreach($errors_medecins as $error_medecins) { echo '<li>',$error_medecins,'</li>'; } foreach($errors_laboratoires as $error_laboratoires) { echo '<li>',$error_laboratoires,'</li>'; } echo '</ul> </div>'; } else { // Mes requêtes } } ?>

Re: Deux formulaires dans une page / un seul obligatoire

Posté : 13 avr. 2015, 18:36
par sadeq
YES.
T'as vérifié si çà marche?

Re: Deux formulaires dans une page / un seul obligatoire

Posté : 14 avr. 2015, 11:59
par PortgasDKiba
Oui oui ça marche, merci sadoq !