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 :

[PHP-JS] Champs en plus ou en moins


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de Strix
    Inscrit en
    Novembre 2006
    Messages
    632
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 632
    Points : 607
    Points
    607
    Par défaut [PHP-JS] Champs en plus ou en moins
    Bonjour. alors voilà j'ai pour l'instant un formulaire simple avec vérification des champs :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    <form name="forml" method="post" action="<?php echo $_SERVER['PHP_SELF'].'?lang='.$lang; ?>">
    	<table border="0" cellspacing="0" cellpadding="0">
     	 <tr>
    	  <td class="w1"><?php echo nom; ?></td>
    	  <td><input name="nom" type="text" id="nom" value="<?php echo $nom ; ?>"><span class="obl">*</span></td>
     	 </tr>
             <tr>
    	  <td><?php echo prenom; ?></td>
    	  <td><input name="prenom" type="text" id="prenom" value="<?php echo $prenom ; ?>"><span class="obl">*</span></td>
     	 </tr>
     	 <tr>
    	  <td><?php echo societe; ?></td>
    	  <td><input name="societe" type="text" id="societe" value="<?php echo $societe ; ?>"></td>
     	 </tr>
             <tr>
    	  <td><?php echo mail; ?></td>
    	  <td><input name="email" type="text" id="email" value="<?php echo $email ; ?>"><span class="obl">*</span></td>
             </tr>
             <tr>
    	  <td><?php echo sujet; ?></td>
    	  <td><input name="sujet2" type="text" id="sujet2" value="<?php echo $sujet2 ; ?>"><span class="obl">*</span></td>
             </tr>
             <tr>
    	  <td><?php echo message; ?></td>
    	  <td><textarea name="mess" cols="60" rows="7" id="mess"><?php echo $mess ; ?></textarea><span class="obl">*</span></td>
     	 </tr>
     	 <tr>
    	  <td>&nbsp;</td>
    	  <td><span class="obl">* <?php echo champobl; ?></span></td>
             </tr>
    	</table>
    	<table cellpadding="2" cellspacing="0">
              <tr>
    	  <td class="centre" ><input name="Annuler" type="reset" id="Annuler2" value="<?php echo annule; ?>">
                  <input type="hidden" name="action" value="submitted">
                  <input name="Envoyer" type="submit" id="Envoyer2" value="<?php echo envoie; ?>">
    	  </td>
              </tr>
              <tr>
    	  <td  class="centre">
    	   <?php	
    	   if($_POST['action'] == 'submitted') {
    	   if((empty($nom ))
    	   ||(empty($prenom ))
    	   ||(empty($sujet2 ))
    	   ||(empty($mess ))
    	   ||(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$email)))
    	   echo error;
    	   else
    	   {
    	   $adress = "web@strix.fr";
    	   $sujet = "$_POST[sujet2]";
    	   $from = "From: ".$_POST[email]."\n";
    	   $from .= "MIME-version: 1.0\n";
    	   $from .= "Content-type: text/html; charset= iso-8859-1\n";
    	   $message="
    	   $_POST[nom] $_POST[prenom]<br>
    	   $_POST[societe]<br>
    	   $_POST[email]<br><br>
    	   $_POST[sujet2]<br>
    	   $_POST[mess]";
    	   mail($adress, $sujet, $message, $from);
    	   echo ok;
    	   echo '<meta http-equiv="Refresh" content="3; URL=accueil.php?lang=' . $lang . '">';
    	   }
    	   }			
    	   ?>
              </td>
     	 </tr>
    	</table>
    </form>
    Mais je trouve pas ça assez compliqué !
    Alors voilà ce que j'aimerais faire : un lien type texte ("Devis PAO" par exemple) qui une fois cliqué rajouterai tout une partie à mon formulaire (champs etc) ainsi que bien sûr la vérification des nouveaux champs...
    Sachant qu'après j'aimerais encore rajouté une nouvelle partie.
    J'aimerais que si la personne venait à supprimer cette partie, elle soit prévenue que les informations données vont être éffacées.

    Alors avant de me lancer... est-ce facile ou non ? Vais-je devoir changer tout mon code existant ?

    Merci d'avance
    On appelle le Dr Freud aux urgences !!
    ------------
    Quelques règles simples qui font la différence :
    Rechercher - FAQ - Dire bonjour - Écrire en français - Balises [code] - Dire merci - Tag

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 145
    Points
    145
    Par défaut
    Tu peux déjà créer les champs lors du chargement de ta page. Pour les champs qui doivent être caché au début, tu mets simplement display:none dans la css correspondant à ce champ, et tu n'aura plus qu'à changer la valeur de display en "inline" lorsque tu cliques sur ton lien, et les champs apparaîtront comme par magie.

  3. #3
    Membre confirmé Avatar de Strix
    Inscrit en
    Novembre 2006
    Messages
    632
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 632
    Points : 607
    Points
    607
    Par défaut
    Bien joué ! Et pour la modification du code php, une idée ?
    On appelle le Dr Freud aux urgences !!
    ------------
    Quelques règles simples qui font la différence :
    Rechercher - FAQ - Dire bonjour - Écrire en français - Balises [code] - Dire merci - Tag

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 10
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Strix
    Bonjour. alors voilà j'ai pour l'instant un formulaire simple avec vérification des champs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="forml" method="post" action="<?php echo $_SERVER['PHP_SELF'].'?lang='.$lang; ?>">
    T'as une possible faille de sécurité. Si t'es sous Apache, suffit d'appeller ton script genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://tonsite.com/tonscript.php/<script>alert(document.cookie)</script>
    Et le script sera interprété. Pratique pour insérer du contenu ou volez des cookies C'est donc une faille de style XSS. Utilise plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES) ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	<table border="0" cellspacing="0" cellpadding="0">
     	 <tr>
    	  <td class="w1"><?php echo nom; ?></td>
    	  <td><input name="nom" type="text" id="nom" value="<?php echo $nom ; ?>"><span class="obl">*</span></td>
     	 </tr>
    .....
    Attention, le code HTML est complètement invalide et non sémantique. N'utilise pas de tableaux pour la mise en page. Associe les input et leur intitulés avec des labels. Utilise des fieldset pour grouper des champs. Met tout ça en page avec des CSS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form id="zeForm" action="pouet.php" method="post">
      <div>
        <label for="zeNom">Nom</label>
        <input type="text" id="zeNom" name="nom" />.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	  <td class="centre" ><input name="Annuler" type="reset" id="Annuler2" value="<?php echo annule; ?>">
    Pour l'annulation, utilise plutôt un lien normal vers la page précédente (si le formulaire est sur sa page propre). La remise à zéro ne sera presque jamais utilisée en fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	   <?php	
    	   if($_POST['action'] == 'submitted') {
    Pour détecter si le formulaire a été envoyé, teste plutôt le type de requête HTTP. T'aura pas besoin de mettre un name sur le submit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($_SERVER['HTTP_METHOD'] === 'POST')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	   if((empty($nom ))
    	   ||(empty($prenom ))
    	   ||(empty($sujet2 ))
    	   ||(empty($mess ))
    	   ||(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$",$email)))
    N'utilise pas empty, qui peut avoir des surprise ("0" est considéré comme empty Teste si les variables sont là, et testes leur longueur après avoir supprimé tout espace en trop, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $nom = isset($_POST['nom']) ? trim($_POST['nom']) : null;
    $prenom = isset($_POST['prenom'] ? trim($_POST['prenom']) : null;
     
    if(strlen($nom) > 0 && strlen($prenom) > 0.....
    Pour l'adresse email, tu peux plutôt utiliser preg_match, qui est plus rapide que eregi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	   echo '<meta http-equiv="Refresh" content="3; URL=accueil.php?lang=' . $lang . '">';
    N'utilise pas de meta refresh pour rediriger, c'est pas bien

    Le mieux, après une requête POST, et de rediriger vers une autre page via un header HTTP, et une redirection de type 303 See Other. Ainsi, si le gars fait rafraîchir, on lui proposera pas de renvoyer les données POST :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location: http://tonsite.com/envoye-succes.php?lang=' . $lang, true, 303);
    Il faut évidemment une page de confirmation (plus sympathique), et surtout ne rien avoir affiché avant (là va falloir tout modifier )

    Mais je trouve pas ça assez compliqué !
    Et encore, t'as pas affiché les messages d'erreur au-dessus du formulaire comme il faudrait le faire

    Alors voilà ce que j'aimerais faire : un lien type texte ("Devis PAO" par exemple) qui une fois cliqué rajouterai tout une partie à mon formulaire (champs etc)
    C'est pas super en fait d'afficher tout à coup un nouveau morceau de formulaire. L'utilisateur s'est fait une image mentale de ton truc, et commence à le remplir. Là tout à coup apparaît un autre gros truc, ça risque de lui chambouler l'esprit, voir de le décourager.

    Pour ce genre de formulaire "conditionnel", il vaut mieux faire ça page à page : d'abord il choisi par exemple "devis PAO", ensuite on l'envoie sur un formulaire complet permettant de remplir un devis PAO. S'il choisit une autre option, on le renvoi vers un autre formulaire adapté à l'autre option

  5. #5
    Membre confirmé Avatar de Strix
    Inscrit en
    Novembre 2006
    Messages
    632
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 632
    Points : 607
    Points
    607
    Par défaut
    Je le trouvais bien mon formulaire...

    Merci quand même

    Bon du coup j'ai plus envie de rien faire moi

    Je crois que je vais partir sur différentes pages mais ça "m'oblige" à faire devis PAO, Devis Web et Devis PAO/web...

    Rappelle-moi pourquoi je t'ai dis merci FlorentG ?

    Mon formulaire n'est pas super sécurisé, mais si quelqu'un veut me contacter, va-t-il chercher les failles du formulaires ?

    Par contre je serais intéressé par le fait de mettre des alertes à cotés des champs non remplis...

    Edit : on reprend tout !

    Mon formulaires est pas super sécurisé, ok. Ma réponse : si ça amuse les petits cons, tant mieux.

    Le CSS oui, d'accord c'est c que j'utilise à 98%, mais les tableaux ne sont pas encore bannis du html. Si ?

    Ce que je recherche :
    - faire apparaître (ou disparaître) des champs lors d'un clic et donc que me l'as dit de passer de display:none à display:inline après un clic sur un lien

    - Que les nouveau champs soient prisent en compte à l'envoie du formulaire

    - Petit plus : affiché le message d'erreur à côté ou à l'intérieur du champs non valide.

    Voilà c'est dit !
    On appelle le Dr Freud aux urgences !!
    ------------
    Quelques règles simples qui font la différence :
    Rechercher - FAQ - Dire bonjour - Écrire en français - Balises [code] - Dire merci - Tag

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Luxembourg

    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 145
    Points
    145
    Par défaut
    Citation Envoyé par Strix
    Ce que je recherche :
    - Que les nouveau champs soient prisent en compte à l'envoie du formulaire
    -> Il suffit de verifier si le display du champ a la valeur inline ou none.

    Citation Envoyé par Strix
    - Petit plus : affiché le message d'erreur à côté ou à l'intérieur du champs non valide.
    -> Pour afficher un message à l'intérieur d'un champ en javascript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('IDduChamp').value = "message"
    Evidemment, cette méthode sous-entend que tu as donné un ID a ton champ.

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

Discussions similaires

  1. [PHP-JS] champ texte peut il devenir un champ html ?
    Par djedje37et28 dans le forum Langage
    Réponses: 5
    Dernier message: 28/08/2006, 09h16
  2. Réponses: 3
    Dernier message: 24/02/2006, 15h11
  3. [PHP-JS] Champs de saisie
    Par lechevin dans le forum Langage
    Réponses: 15
    Dernier message: 05/01/2006, 12h09
  4. [PHP-JS] case avec plus et moins a coté
    Par budiste dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2005, 14h09
  5. Réponses: 2
    Dernier message: 04/10/2005, 12h05

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