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 :

Syntaxe formulaire php


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 116
    Points : 48
    Points
    48
    Par défaut Syntaxe formulaire php
    Bonjour à tous,

    J'ai réalisé un petit formulaire en php avec vérification des champs (empty), lors de différents tests toutes les fonctions ont fonctionnées (vérification, affichage du message d'erreur, envoi du mail).

    Maintenant que j'ai fini mon bout de code, quand je fais un test global, le traitement reste bloqué sur mon fichier mail.php.

    Je pense que c'est tout simplement un problème de syntaxe, il doit y avoir des {} mal placés, j'ai essayé plusieurs solutions, tout en me référant au tuto:
    http://sylvie-vauthier.developpez.co...ulaires#LIII-1

    Mais je dois avouer que je tourne en rond.

    Si vous avez une idée lumineuse ou juste la possibilité de mettre le doigt sur mes erreurs, je vous en serai très reconnaissant.

    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
    72
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <meta http-equiv="Content-Type" content="text/plain; charset=UTF-8" />
    </head>
    <?PHP
    if (get_magic_quotes_gpc())
    {
        $nom = stripslashes($_POST['nom']); 
        $email = stripslashes($_POST['email']);
        $nation = stripslashes($_POST['nation']); 
        $prenom = stripslashes($_POST['prenom']); 
        $telephone = stripslashes($_POST['telephone']); 
        $adresse = stripslashes($_POST['adresse']);
        $profession = stripslashes($_POST['profession']); 
        $statut = stripslashes($_POST['statut']); 
        $interet = stripslashes($_POST['interet']);
        $message = stripslashes($_POST['message']);  
    } 
    else
    {  
        $nom = $_POST['nom'];
        $email = $_POST['email'];
        $nation = $_POST['nation']; 
        $prenom = $_POST['prenom']; 
        $telephone = $_POST['telephone']; 
        $adresse = $_POST['adresse'];
        $profession = $_POST['profession']; 
        $statut = $_POST['statut']; 
        $interet = $_POST['interet'];
        $message = $_POST['message'];  
     
     
     
    /* Destinataire (votre adresse e-mail) */
    $to = 'mail@alamaison.com';
     
    // Subject
    $subject = 'Demande informations concernant mon site';
    /////voici la version Mine 
    $headers = "MIME-Version: 1.0\r\n"; 
     
    $headers .='Content-Type: text/plain; charset="utf-8"'." ";
    $headers .='Content-Transfer-Encoding: 8bit'; 
    /* Construction du message */
    $msg  = 'Bonjour,'."\r\n\r\n";
    $msg .= 'Ce mail a été envoyé depuis le site monsite.com par '.$nom.' '.$prenom."\r\n\r\n";
    $msg .= 'Voici le message qui vous est adressé:'."\r\n";
    $msg .= '***************************'."\r\n";
    $msg .= 'Le nom est :'.$nom."\r\n\r\n";
    $msg .= 'Le prénom est :'.$prenom."\r\n\r\n";
    $msg .= 'La nationalité est :'.$nation."\r\n\r\n";
    $msg .= 'Le numéro de téléphone est :'.$telephone."\r\n\r\n";
    $msg .= 'L adresse email est :'.$email."\r\n\r\n";
    $msg .= 'L adresse de domiciliation est :'.$adresse."\r\n\r\n";
    $msg .= 'Sa profession est :'.$profession."\r\n\r\n";
    $msg .= 'Son statut est :'.$statut."\r\n\r\n";
    $msg .= 'Son intérêt est :'.$interet."\r\n\r\n";
    $msg .= 'Son message est :'.$message."\r\n\r\n";
    $msg .= '***************************'."\r\n\r\n";
     
     
    $headers = 'From: '.$nom.' '.$prenom.' <'.$expediteur.'>'."\r\n\r\n";}
    /* Envoi de l'e-mail */
     
    if (empty($nom) || empty($prenom) || empty($nation) || empty($telephone) || empty($email))
        echo 'veuillez remplir tous les champs';
    else
        mail($to, $subject, utf8_decode($msg), utf8_decode ($headers));
     
    header('Location: http://www.monsite.com/');
    </html>
    Je vous remercie d'avance pour votre aide, très bonne journée.

  2. #2
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut
    Bonjour

    Tu n'as absolument pas besoin de balise HTML pour faire le traitement que tu réalises en php. Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    <meta http-equiv="Content-Type" content="text/plain; charset=UTF-8" />
    </head>
    et

    doivent virer.

    Ensuite, pour ouvrir une déclaration php, la balise exacte est Ensuite dans le bas de ta page, tu oublies de la fermer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    header('Location: http://www.monsite.com/');
    </html> // à virer
    ?>
    De plus, tu regarderas la syntaxe de ton if/else

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (empty($nom) || empty($prenom) || empty($nation) || empty($telephone) || empty($email))
        echo 'veuillez remplir tous les champs';
    else
        mail($to, $subject, utf8_decode($msg), utf8_decode ($headers));
     
    header('Location: http://www.monsite.com/');
    C'est ce que j'ai repéré au premier coup d'oeil
    _____________________________________________
    Tours Football Club - Turonorum Civitas Libera

    Content pas content de ma réponse? N'hésitez pas votez !!

  3. #3
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour à tous les deux,

    @ledisciple
    Il y a du html car il peut y avoir un echo dans le code php
    Sinon ok pour les balises php, manque le ?> et c'est ça qui doit merdouiller

    @paikan
    Peut tu développer:
    Maintenant que j'ai fini mon bout de code, quand je fais un test global, le traitement reste bloqué sur mon fichier mail.php.
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  4. #4
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour à tous les deux,

    @ledisciple
    Il y a du html car il peut y avoir un echo dans le code php
    Sinon ok pour les balises php, manque le ?> et c'est ça qui doit merdouiller
    En même temps, je n'ai pas remarqué

    à quoi ça sert qu'il fasse un echo

    si derrière, il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Location: http://www.monsite.com/');
    Le header, n'est pas censé faire basculer sa page sur ce site, sans afficher les echo?
    _____________________________________________
    Tours Football Club - Turonorum Civitas Libera

    Content pas content de ma réponse? N'hésitez pas votez !!

  5. #5
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    à quoi ça sert qu'il fasse un echo

    si derrière, il y a

    Code :Sélectionner tout - Visualiser dans une fenêtre à partheader('Location: http://www.monsite.com/');
    C'est sûr, et je ne m'attache pas à la structure du code ... et il n'est peut être pas complet (voir le ?> manquant alors qu'il existe peut être)

    sinon +1 pour toi
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 116
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup pour vos coups de main et vos réponses.
    C'est effectivement ?> qui été manquant.

    Donc, si j'ai bien compris le concept, si j'utilise la fonction header, je ne peux pas afficher le message pour indiquer aux visiteurs que tous les champs ne sont pas remplis......

    Connaissez vous un autre moyen d'afficher l'information tout en conservant la fonction header ??? (popup, Js, etc....)

    Merci d'avance

  7. #7
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut
    Perso, j'utilise les $_SESSION[""].

    Ca me permet de stocker les erreurs, d'une part :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION["monform"]["erreur"]
    et les champs d'autre part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $_SESSION["monform"]["champ1"]
    $_SESSION["monform"]["champ2"]
    //etc
    après, je suis sur qu'il y a d'autres façon bien mieux de le faire ..
    _____________________________________________
    Tours Football Club - Turonorum Civitas Libera

    Content pas content de ma réponse? N'hésitez pas votez !!

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Donc, si j'ai bien compris le concept, si j'utilise la fonction header, je ne peux pas afficher le message pour indiquer aux visiteurs que tous les champs ne sont pas remplis......
    Tu as plusieurs solutions:

    En js, tu peux vérifier tous les champs et sur le submit du formulaire interdire ce submit si manque un champ + afficher un message.

    En php, lors du submit du formulaire, tu pars sur une page qui vérifie et affiche les champs manquants + message et enfin un post.

    En php, de même sur la même page avec ajout de lignes en rouge pour les champs manquants

    En jQuery encore plus de possibilité

    Donc et j'en passe que de solutions ...

    Connaissez vous un autre moyen d'afficher l'information tout en conservant la fonction header
    Pourquoi vouloir garder le header pour ce genre de traitement ?
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  9. #9
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Rappel sur le protocole HTTP

    Les headers doivent, comme leur nom l'indique, être servis au client en tête de réponse et avant tout envoi de contenu.

    En PHP, l'envoi de n'importe quel contenu, qu'il soit explicite avec echo ou implicite en envoyant du flux HTML (ou autre...) ou en rencontrant une erreur affichable, déclenche implicitement l'envoi de headers (notamment le content-type, par défaut text/html).

    Egalement, l'utilisation de session_start déclenche l'envoi de header (pour le cookie de session notamment). cette fonction doit donc être appellée avant l'envoi de tout contenu.

    En résumé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <html>
    <head><title>Mauvais Exemple</title></head>
    <body>
    <?php
    session_start(); // va provoquer un erreur
    header("Reresh: 5;url=index.php"); // va provoquer une erreur
    echo "Vous allez être redirigé vers index.php";
    ?>
    </body>
    </html>
    Voici la bonne façon de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    session_start();
    header("Refresh: 5; url=index.php");
    ?>
    <html>
    <head><title>Bon Exemple</title></head>
    <body>
    <p>Vous allez être redirigé</p>
    </body>
    </html>

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    En jQuery encore plus de possibilité
    Il n'y a pas "plus" de possibilités en jQuery, ce sont celles de JavaScript enrobées de sucre et joliment embalées pour que ce soit plus doux et que ça fonde sous la langue du développeur paresseux (je me fais l'avocat du diable, j'adore jQuery).

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // voici un bout de code jQuery typique
    jQuery(function ($) {
      $('#mon-select').change(function () {
        alert($(this).val());
      }
    });
     
    // et voici son équivalent JavaScipt pur
    window.onload = function () {
      document.getElementById('mon-select').onchange = function () {
        alert(this.options[this.selectedIndex].value);
      }
    }

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 116
    Points : 48
    Points
    48
    Par défaut
    Merci à tous pour votre aide,
    j'ai bien compris la situation, je laisse tomber "header"

    je suis en train d'essayer un petit script du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "javascript:history.back()"
    sans trop de succès, a votre avis c'est la bonne piste ?

  12. #12
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Non, fais tes redirection normalement avec des headers, comme montré plus haut.

Discussions similaires

  1. Problème de syntaxe dans un formulaire php-mysql
    Par alex45500 dans le forum Langage
    Réponses: 3
    Dernier message: 05/11/2012, 15h56
  2. [MySQL] Formulaire PHP ->MySQL
    Par shub dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 09/02/2010, 22h42
  3. Nom d'un Formulaire Php
    Par etiennegaloup dans le forum Langage
    Réponses: 2
    Dernier message: 03/11/2005, 21h55
  4. Formulaire PHP+ envoi de fichier joint
    Par GraphicProvider dans le forum Langage
    Réponses: 2
    Dernier message: 29/10/2005, 18h12
  5. [MySQL] Formulaire php + bdd = perte des sauts de ligne html ?
    Par sunshine33 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 03/10/2005, 11h19

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