[RESOLU] Deux formulaires dans une page / un seul obligatoire

Eléphanteau du PHP | 36 Messages

13 avr. 2015, 10:59

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

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

13 avr. 2015, 12:13

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.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 36 Messages

13 avr. 2015, 12:36

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>'; } ?>

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

13 avr. 2015, 13:11

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.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 36 Messages

13 avr. 2015, 15:20

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 } } ?>

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

13 avr. 2015, 18:36

YES.
T'as vérifié si çà marche?
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphanteau du PHP | 36 Messages

14 avr. 2015, 11:59

Oui oui ça marche, merci sadoq !