IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Contrôler deux dates avant un enregistrement


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut Contrôler deux dates avant un enregistrement
    Bonjour,

    lorsque l'utilisateur fait un clic sur un bouton submit je contrôle une date de début et une date de fin.
    Ma logique (?)
    si id_modif (doit contenir l'id de l'enregistrement) est renseigné alors je vérifie le format de la date de début. si la date est ok alors je vérifie la date de fin. si elle est ok alors j'enregistre la modification.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    if (isset($_POST['bouton_modifier'])){
    	if (isset($_POST['id_modif'])){
    		//vérifier les dates saisies
    		if (!empty($_POST['modif_date_debut'])){
    			//vérifie la date de début
    			if (preg_match('#^([0-9]{2})([/])([0-9]{2})\2([0-9]{4})$#', $modif_date_debut, $m) == 1 && checkdate($m[3], $m[1], $m[4])) {
      				if (!empty($_POST['modif_date_fin'])){
    					//vérifie la date de fin
    					if (preg_match('#^([0-9]{2})([/])([0-9]{2})\2([0-9]{4})$#', $modif_date_fin, $m) == 1 && checkdate($m[3], $m[1], $m[4])) {
    						//dates correctes : modifier l'enregistrement
    						echo "enregistré";
     
    						$message = "Votre période de disponibilité a bien été modifiée.";
    					}
    				}
    				// date fin incorrecte
    				else { 
    					echo "date fin incorrecte";
    					$message1 = "format de la date de fin de période non valide.";
    				}
    			}
    			//date début incorrecte 
    			else  { 
    				echo "date début incorrecte";	
    				$message1 = "format de la date de début de période non valide.";
    			}	
    		}
    	}
    }
    Si le format de la date de début est incorrecte j'ai bien l'echo qui s'affiche mais si la date de début est bonne et la date fin incorrecte, rien ne se passe .
    Les "echo" me serve juste à faire mes tests.
    Merci de me dire où est mon erreur.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as 6 if{}et seulement 2 else{}, c'est donc normal qu'il y ait des trous.
    En particulier, il manque le else{} pour "la date de fin est incorrect" justement. Celui actuellement présent concerne uniquement le test !empty mais pas le test preg_match()
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    Merci.
    ça m'a permit de voir que j'avais un if inutile.

    Autre souci :
    Mes dates sont dans une div id="div_modifier" qui est display:"none" et qui devient display:"inline" quand je clique sur un bouton situé sur chaque ligne dans la dernière colonne d'un tableau.
    quand l'utilisateur clique sur ce bouton d'une ligne pour modifier les données, j'affiche la div id="div_modifier".
    quand je clique sur mon bouton submit j'arrive sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (isset($_POST['bouton_modifier'])){ 
    ....
    }
    ma page étant rechargée la div id="div_modifier" se retrouve fermée.
    comment je peux à la fin du traitement du bouton submit appeler la fonction javascript pour afficher la div s'il y un message d'erreur

    j'espère que mon explication est claire sinon je joins le fichier

    merci

  4. #4
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    bon je crois que j'ai raconté un peu n'importe quoi. même à 17h je suis pas réveillé. je reviendrai plus tard

  5. #5
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    Après des heures de recherche j'en suis toujours au même point
    J'explique :
    Dans un tableau construit avec un query j'ai les colonnes suivantes :
    - date début - date fin - prénom nom - modifier - supprimer -
    sur chaque ligne du tableau dans la colonne modifier je mets un bouton.
    quand on clique sur ce bouton j'affiche une div avec une fonction javascript
    la fonction javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    function montrer_cacher(div){
     document.getElementById(div).style.display = "inline"; 
    }
    la div au chargement de la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <div id="div_modifier" style="display:none">
    blablabla
    <input type="submit" name="bouton_modifier" value="Valider" style="width:105px;margin-left:340px ">
    </div>
    le traitement du bouton_modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    if (isset($_POST['bouton_modifier'])){
    	//vérifier les dates saisies
    	if (!empty($_POST['modif_date_debut'])){
    		//vérifie la date de début
    		if (preg_match('#^([0-9]{2})([/])([0-9]{2})\2([0-9]{4})$#', $modif_date_debut, $m) == 1 && checkdate($m[3], $m[1], $m[4])) {
      			if (!empty($_POST['modif_date_fin'])){
    				//vérifie la date de fin
    				if (preg_match('#^([0-9]{2})([/])([0-9]{2})\2([0-9]{4})$#', $modif_date_fin, $m) == 1 && checkdate($m[3], $m[1], $m[4])) {
    					//dates correctes : modifier l'enregistrement
    					echo "enregistré";
     
    					$message = "Votre période de disponibilité a bien été modifiée.";
    				}
    				else {
    					$control_div = 0;
    					//montrer_cacher("div_modifier");
    					$message1 = "format de la date de fin de période non valide.";
    				}
    			}
    			// date fin vide
    			else { 
    				$control_div = 0;
    				$message1 = "La date de fin de période n'est pas renseignée.";
    			}
    		}
    		//date début incorrecte 
    		else  { 
    			$control_div = 0;	
    			$message1 = "format de la date de début de période non valide.";
    		}	
    	}
    	else {
    		$control_div = 0;
    		$message1 = "La date de début de période n'est pas renseignée.";
    	}
    	if ($control_div == 0){ 
    		echo "afficher la div";
     
    		//je dois rendre la div id="div_modifier" à style="display:inline";
     
    	}
    }
    Quand les différentes conditions ne sont pas réalisées, j'affecte la valeur 0 à une variable $control_div.
    Avant de sortir de la condition je teste si $control_div == 0
    si c'est le cas je veux afficher la div. ET C'EST CE QUE JE N'ARRIVE PAS A FAIRE.
    J'espère avoir été clair!!
    Merci de votre aide

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    par pitié, il faut arrêter avec les regex pour tout et n'importe quoi. Pour valider une date, c'est plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date_modif = \DateTime::createFromFormat('d/m/Y', $_POST['modif_date_debut']);
    if ($date_modif === false) {...}

  7. #7
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Salut,

    par pitié, il faut arrêter avec les regex pour tout et n'importe quoi. Pour valider une date, c'est plutôt comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $date_modif = \DateTime::createFromFormat('d/m/Y', $_POST['modif_date_debut']);
    if ($date_modif === false) {...}
    Merci; cela me semble effectivement bien plus simple.

    Par contre cela ne me donne pas la solution pour afficher de nouveau la <div id="div_modifier" style="display:none">avant de sortir du traitement de mon if quand on clic sur un bouton submit !!

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu n'as pas besoin d'utiliser une fonction javascript puisque tu es sur un rechargement de la page (si j'ai bien compris) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($control_div == 0){ 
       $div_display = 'inline';
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<div id="div_modifier" style="display:' . $div_display . '">';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 898
    Points : 442
    Points
    442
    Par défaut
    Merci

    j'ai initialisé une variable
    j'ai juste un peu adapté le code car j'avais fermé de code php avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div id="div_modifier" style= "display:<?php echo $display_div; ?>" >

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Verifier not isNull de deux champs Avant d'enregistrer
    Par mcharmat dans le forum Macros Access
    Réponses: 4
    Dernier message: 26/11/2014, 06h55
  2. Comparaison entre deux dates avant envoi formulaire
    Par Anibel dans le forum jQuery
    Réponses: 2
    Dernier message: 14/05/2013, 13h27
  3. Contrôler la saisie avant l'enregistrement
    Par kameram dans le forum Windev Mobile
    Réponses: 3
    Dernier message: 17/10/2011, 17h30
  4. Réponses: 16
    Dernier message: 16/05/2008, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo