Retour d'erreur php

Résolu
Bonjour,

Je suis actuellement sur un formulaire assez simple qui consiste a prendre une commande, et j'aimerais que l'utilisateur ne puisse pas mettre pour la date de livraison demandée une date avec la date du jour + 7 jours.

donc j'ai trouver cette ligne de commande :
$dateallowed = date('Y/m/d', strtotime('+7 day'));

mais j'aimerais savoir comment sa marche au niveau du submit, car a l'envoi du formulaire si l'utilisateur a mis une date inférieure a la date autorisée alors j'aimerais retourner un message d'erreur puis revenir a la page précédente.
Comment je peux dire que mon if entre mes balises php interragi sur le submit de la fin de mon formulaire ?

<p>Date souhaitée de livraison (prévoir votre commande une semaine à l'avance) (JJ/MM/AAAA) :</p> <input type="text" />

<input type="submit" value="Valider" />

Merci d'avance.

ps : je débute le php.

5 réponses

  1. Bonjour,

    Pour cela tu peut utiliser le javascript qui te permet de verifié directement ce que l'utilisateur a entrer dans le formulaire.

    Voici un tutoriel tres bien expliqué a ce sujet avec un tres bon exemple, en 1-2h tu sera capable de resoudre ton probleme si tu le lit correctement:

    Cours sur les formulaire
    exercice corrigé sur le formulaire
    1. En faite je ne m'y connais pas du tout en Javascripite et j'aimerais simplement optimiser mon site tout en restant dans le php.

      Faut-il que je stock la date dans une variable puis que dans la code php je mette un truc du genre

      <?php
      if ( (isset($date)) < ($dateallowed = date('Y/m/d', strtotime('+7 day'))))
      //message d'erreur puis retour de page.
      else
      //faire le submit
      ?>
      1. Je ne connait pas d'autre methode pour la verification d'un formaulaire que le javascript...que je ne connaissait pas quand j'en avais besoin et en lisant les deux pages que je t'ai donné plus haut, le soir meme j'était capable de le faire.
      2. Merci de ta réponse c'est vrai que c'est assez rapide en visitant tes 2 pages,mon code a l'air bon mais sa m'a l'air trop simple

        <form method="post" action="cible.php" onsubmit="return verify(x);">

        //mon formulaire
        <p>Date souhaitée de livraison (prévoir votre commande une semaine à l'avance) (JJ/MM/AAAA) :</p> <input type="text" name="date"/>

        </form>

        <?php

        function verify(x) {
        if( $_POST['date'] > date('Y/m/d', strtotime('+7 day')) )
        return true;
        else
        {
        alert('La date de livraison doit être dune semaine au plus tôt.');
        return false;
        }

        ?>
      3. Oui, c'est justement le principe, c'est d'une simplicité...effrayante ^^
        test le le en local
      4. oui, justement, c'est le principe, c'est d'une facilité effrayante. Test ton code en local pour etre sur du bon fonctionnement.
      5. Merci bien de tes réponses je vais tester sa :).
    2. <?php
      if ( (isset($date)) < ($dateallowed = date('Y/m/d', strtotime('+7 day'))))
      //message d'erreur puis retour de page.
      else
      //faire le submit

      //si tu est arrivé la c'est que le submit s'est déja fait

      //il vaut mieux faire ici le traitement de ta commande

      //et mets des { } avec tes if else
      ?>
      1. et par rapport a mon dernier code envoyé les acollades sont obligatoires au niveau de mon if / else ?
    3. les accolades ne sont pas obligatoires si tu n'as qu'une seule ligne d'instruction a chaque, mais il vaut mieux les mettre systématiquement, pour un meilleur lisibilité du code et si tu veux rajouter une ligne de plus, un echo par exemple tu vas te retrouver coincé, il faudra les rajouter à ce moment la, donc des risques d'erreur
      1. c'est exact, accolade non obligatoire si une ligne de code après, mais perso je les met toujours par principe.
      2. Contributeur
        Les accolades sont obligatoire pour garantir une meilleur lisibilité au code, tout comme l'indentation et les commentaires =)
      3. ah d'accord c'est comme en C merci bien de vos réponses :)
    4. un exemple de methode pour répondre à ton soucis:

      <?php
      /*
      en procedant ainsi la page s'appelle elle même (action="" )donc le formulaire va se réafficher en cas d'erreur avec les valeurs déja saisies (value="< ?php echo ...)
      
      */
      //init des variables à vide
      $msg=""; //message d'erreur eventuel
      $affich_form=true; //affichage ou reaffichage du formulaire
      //champs du formulaire
      $nom="";
      $prenom="";
      //etc..
      $date_livraison_souhaitee="";
      
      //partie traitement des erreurs et du formualire
      if(isset($_POST['envoyer_cde'])){
      	//le formualire a été posté on recupère les valeurs des champs
      	$nom=$_POST['nom'];
      	$prenom=$_POST['prenom'];
      	//etc..
      	$date_livraison_souhaitee=$_POST['date_liv_souh'];
      	//la tu fais tes tests
      	$dateAllowed = date('Y/m/d', strtotime('+7 day'))
      	if($date_livraison_souhaitee < $dateAllowed){
      		$msg="La date de livraison doit être 7 jours aprsè la date du jour !";
      		$affich_form=true; //reaffichage du formulaire
      	}else{
      		$affich_form=false; //c'est bon donc on ne réaffichera pas le formulaire
      		
      		
      		//et la tu poursuit le traitement de ta commande
      		/// .....
      	}
      }
      
      if($affich_form){
      ?>
      <form name="form1" method="post" action="">
      Nom:<input type="text" name="nom" value="<?php echo $nom; ?>" /><br />
      Prenom:<input type="text" name="prenom" value="<?php echo $prenom; ?>" /><br />
      Date de livraison souhaitée:<input type="text" name="date_liv_souh" value="<?php echo $date_livraison_souhaitee; ?>" /><br />
      <?php
      if($msg!=""){echo '<font color="red">Date de livraison non conforme !</font>';}
      
      ?>
      <br />
      <input type="submit" name="envoyer_cde" value="Envoyer le commande" /><br />
      
      </form>
      <?php
      } //fin du if ($affich_form)
      ?>
      1. merci beaucoup de ta réponse je pense que je vais utiliser cette solution la