8722 sujets

Développement web côté serveur, CMS

Bonjour, je débute en PhP, et je rencontre un problème pour envoyer un formulaire dans ma base de donné, je suis entrain de créer un formulaire de demande de devis, dans ce formulaire il y a le nom et prenom et e-mail qui apparait, ensuite il y a un champ ou on peut entrer une référence et un dernier champ pour entrer du texte, et j'ai crée une nouvelle table dans ma BDD la table 'demande_devis' dans le quel il y a 5 champs pour recevoir les données du devis, et c'est là que je suis perdu je ne sais pas comment faire pour envoyer ces données dans la nouvelle table, j'ai pourtant bien réussi à le faire pour le formulaire d'inscription..quelqu'un pourrait m'aider svp?
En espérant avoir été assez clair
Merci.

Voici mon code :
 <?php
session_start();

$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_client', 'root', '');

 if(isset($_SESSION['id'])  AND $_GET['id'] > 0)

{   
  $getid = intval($_GET['id']);
  $requser = $bdd->prepare('SELECT * FROM client WHERE id = ? ');
  $requser->execute(array($_SESSION['id']));
  $userinfo = $requser->fetch();
 





 
 if(isset($_POST['mondevis']))
 {
    if(!empty($_POST['nom']) AND  !empty($_POST['prenom']) AND   !empty($_POST['imm']) AND  !empty($_POST['devis']));
    {
       $insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, num, devis) VALUES (?, ?, ?, ?, ?") 
       $insertdemandedevis->execute(array($userinfo, $userinfo, $imm, $devis));
       $erreur = "Devis envoyé ! ";

    }
      else
    {
        $erreur = "Tout les champs doivent être complétés !" ;
    }
 }   
 
?>
 
  
 
<a href="accueil.php?id=<?php echo $userinfo['id'] ?>"> Accueil </a>



<html>
   <head>
       <title> formulaire d'inscrption brouillon</title>
       <link href="forminscription.css" rel="stylesheet" media="all" type="text/css" />
       <meta charset="utf-8">
   </head>
   <body>
          <div align="center">

             

<form method="post" >           
             

            <h2> demande devis </h2>

            Nom : <?php echo $userinfo['nom'] ; ?> <br>  prenom : <?php echo $userinfo['prenom'] ; ?> 

               <p> 2/ Pour réaliser votre devis avec précision, merci de nous indiquer obligatoirement la référence * </p>
     <input type="text" name="imm" id="imm" placeholder="EX : FGT54ZE">

                     <p> 3/ Votre demande détaillée * </p>

            <textarea   name="devis"  id="devis">  </textarea>
            <br>
       <input  name="mondevis" type="submit" value="Envoyer mon devis"/>
</form>

         <?php 
                
              if(isset($erreur)) 
              {
                echo $erreur;
              }

          ?>

   </div>

      
   </div>

 
  

   </body>
</html>


 <?php

}

else

{
     header("Location: demandedevis.php?id=".$_SESSION['id']);
}
 

?> 


?> 

Modifié par loicc97460 (23 Mar 2018 - 15:01)
Bonjour...

Nous ne sommes pas là pour faire le "travail" à la place des autres, pourrais tu au minimum nous mettre ce que tu as commencé à faire ???

merci
Salut,

essai en corrigeant cette ligne :
 <input  name"mondevis" type="submit" value="Envoyer mon devis"/>

Par:
 <input  name="mondevis" type="submit" value="Envoyer mon devis"/>


et fais nous un retour
Modifié par biduletruck (23 Mar 2018 - 14:55)
Oui j'ai édité mon poste en haut ^^ , je comprends pas j'ai pourtant procédé de la même manière que j'ai fais pour récupérer les données du formulaire d'inscription qui fonctionne très bien, mais là je suis bloqué... notamment pour récupérer les variable $userinfo qui correspond au nom et prenom(de la table espace_client) afin de les envoyer dans la table demande_devis qui eux aussi ont des champs nom et prenom.

$insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, num, devis) VALUES (?, ?, ?, ?, ?") 
$insertdemandedevis->execute(array($userinfo, $userinfo, $imm, $devis));


Tu nous dis que tu as 5 champs mais dans ta requete tu ne nommes de 4 champs et tu précises 5 valeurs à passer (?, ?, ?, ?, ?") et ensuite dans ton tableau tu ne passes que 4 champs, tu te retrouves donc avec des erreurs.
oui j'avais vu j'ai corrigé merci ^^
ah oui mince, c'est par ce que dans ma table demande_devis j'avais mis un id (Auto Increment) et du coup je l'avais compté dans les valeurs.
Maintenant j'ai ce message d'erreur : ( ! ) Parse error: syntax error, unexpected '$insertdemandedevis' (T_VARIABLE) in C:\wamp\www\Nouveau dossier\demandedevis.php on line 25
Modifié par loicc97460 (24 Mar 2018 - 05:43)
salut,

alors voici ton code:


if(!empty($_POST['nom']) AND  !empty($_POST['prenom']) AND   !empty($_POST['imm']) AND  !empty($_POST['devis']));
    {
       $insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, num, devis) VALUES (?, ?, ?, ?, ?") 
       $insertdemandedevis->execute(array($userinfo, $userinfo, $imm, $devis));
       $erreur = "Devis envoyé ! ";


1- au niveau de ton "IF" à la fin de ta condition tu as mis ";", il n'y en a jamais à ce niveau.
2-
 $insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, num, devis) VALUES (?, ?, ?, ?, ?") 
ici il manque justement la ";" Smiley cligne d'où ton erreur à la ligne 25
Non malheureusement toujours pas, j'ai maintenant un message d'erreur qui me dit qu'il y a un problème avec mon else :
( ! ) Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\wamp\www\Nouveau dossier\demandedevis.php on line 28


<?php
session_start();

$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_client', 'root', '');

 if(isset($_SESSION['id'])  AND $_GET['id'] > 0)

{   
  $getid = intval($_GET['id']);
  $requser = $bdd->prepare('SELECT * FROM client WHERE id = ? ');
  $requser->execute(array($_SESSION['id']));
  $userinfo = $requser->fetch();
 






 if(isset($_POST['mondevis']))
 {
    if(!empty($_POST['nom']) AND  !empty($_POST['prenom']) AND   !empty($_POST['imm']) AND  !empty($_POST['devis']))
    {
       $insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, num, devis) VALUES (?, ?, ?, ?, ?") ;
       $insertdemandedevis->execute(array($userinfo, $userinfo, $imm, $devis));
       $erreur = "Devis envoyé ! ";

      else
    {
        $erreur = "Tout les champs doivent être complétés !" ;
    }
 }   
 
?>
 
  
 
<a href="accueil.php?id=<?php echo $userinfo['id'] ?>"> Accueil </a>



<html>
   <head>
       <title> formulaire d'inscrption brouillon</title>
       <link href="forminscription.css" rel="stylesheet" media="all" type="text/css" />
       <meta charset="utf-8">
   </head>
   <body>
          <div align="center">

             

<form method="post" >           
             

            <h2> demande devis </h2>

            Nom : <?php echo $userinfo['nom'] ; ?> <br>  prenom : <?php echo $userinfo['prenom'] ; ?> 

               <p> 2/ Pour réaliser votre devis avec précision, merci de nous indiquer obligatoirement la référence * </p>
     <input type="text" name="imm" id="imm" placeholder="EX : FGT54ZE">

                     <p> 3/ Votre demande détaillée * </p>

            <textarea   name="devis"  id="devis">  </textarea>
            <br>
       <input  name="mondevis" type="submit" value="Envoyer mon devis"/>
</form>

         <?php 
                
              if(isset($erreur)) 
              {
                echo $erreur;
              }

          ?>

   </div>

      
   </div>

 
  

   </body>
</html>


 <?php

}

else

{
     header("Location: demandedevis.php?id=".$_SESSION['id']);
}
 

?> 
Modérateur
Bonjour,

Avoir ce genre d'erreur fait partie du quotidien du débutant qui ne maitrise pas encore tout à fait la syntaxe des différentes commandes. Loin de moi la volonté de vous jeter la pierre, mes débuts étaient pareils Smiley cligne

Un petit rappel de différentes syntaxes de base en PHP :

// Une instruction finit toujours par un point virgule
instruction ;

// Le double slash passe tout ce qui suit et qui est sur la même ligne en commentaire
/* Ceci est aussi un commentaire.
Il peut-être utilisé sur plusieurs lignes ou pour une partie d'une ligne.*/

// Condition simple
if ( test ) { instructions; }
//   Si le -test- est concluant les -instructions- seront exécutées. Dans tous les cas, tout ce qui suivra sera exécuté.

// Condition simple
if ( test ) {
  // est exécuté si condition remplie
  instruction1;
  instruction2;
} else {
  // est exécuté si condition non remplie
  instruction3;
  instruction4;
}
//   Si le test est concluant, les instructions 1 et 2 seront exécutées mais pas 3 et 4.
//   Si le test échoue, ce seront les instructions 3 et 4 qui le seront et non les 1 et 2.

// Conditions multiples
if ( test1) {
  instruction1;
}
elseif ( test2 ) {
  instruction2;
} else {
  instruction3;
}
//   Si test1 est concluant, seule instruction 1 est exécuté et le reste est ignoré.
//   Si le test1 n'est pas concluant et que le test2 l'est, seule l'instruction 2 sera exécutée.
//   Si 1 et 2 échouent alors l'instruction 3 est exécutée.
//   Dans tous les cas la suite du code est exécutée.


/*

Le principe est le même pour les boucles for, foreach et while (entre-autres)

*/


En ayant bien ceci en tête je vous invite à vérifier votre code et vous vous apercevrez bien vite comment lever l'erreur. Smiley cligne


Le codage nécessite une rigueur absolue. Ça se joue au caractère près. Smiley langue
Modifié par Greg_Lumiere (26 Mar 2018 - 11:13)
Ecoute Greg Lumière et il te l'apportera... vachement rechercher comme phrase Smiley smile


Bref, il à raison,
Je commande à lire à la volée et je vois ça direct :

    if(!empty($_POST['nom']) AND  !empty($_POST['prenom']) AND   !empty($_POST['imm']) AND  !empty($_POST['devis']))
    {
       $insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, num, devis) VALUES (?, ?, ?, ?, ?") ;
       $insertdemandedevis->execute(array($userinfo, $userinfo, $imm, $devis));
       $erreur = "Devis envoyé ! ";
//ICI IL MANQUE LA FERMETURE DE LACCOLADE DU IF
      else
    {
        $erreur = "Tout les champs doivent être complétés !" ;
    }

*Voir le commentaire //ICI IL MANQUE LA FERMETURE DE LACCOLADE DU IF*
Donc oui, y'a des problème d'accolade... tout le monde en a fait, donc reprend tes lignes une à une et refait toi le chemin avec le message de greg tu devrais t'en sortir.
Modifié par JENCAL (26 Mar 2018 - 11:23)
Merci beaucoup ! j'ai pu accéder enfin à la page sans message d'erreur ^^
Maintenant ce que je ne comprend pas , c'est comment faire pour récupérer la variable $userinfo c'est-à-dire les données nom, prenom car maintenant quand je valide pour envoyer mon formulaire ça met dit que tout les champs doivent être complétés, sachant que j'ai deux tables distinct dans ma BDD j'ai une table ou il y a toutes les info client (nom, prenom, adresse etc..) et une autre table qui s’appelle devis pour recevoir les données du devis ( nom, prenom , num, devis ).



<?php
session_start();

$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_client', 'root', '');

 if(isset($_SESSION['id'])  AND $_GET['id'] > 0)

{   
  $getid = intval($_GET['id']);
  $requser = $bdd->prepare('SELECT * FROM client WHERE id = ? ');
  $requser->execute(array($_SESSION['id']));
  $userinfo = $requser->fetch();
 






 if(isset($_POST['mondevis']))
 {
    if(!empty($_POST['nom']) AND  !empty($_POST['prenom']) AND   !empty($_POST['imm']) AND  !empty($_POST['devis']))
    {
       $insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, num, devis) VALUES (?, ?, ?, ?, ?") ;
       $insertdemandedevis->execute(array($userinfo, $userinfo, $imm, $devis));
       $erreur = "Devis envoyé ! ";
    }
      else
    {
        $erreur = "Tout les champs doivent être complétés !" ;
    }
 }   
 
?>
 
  
 
<a href="accueil.php?id=<?php echo $userinfo['id'] ?>"> Accueil </a>



<html>
   <head>
       <title> formulaire d'inscrption brouillon</title>
       <link href="forminscription.css" rel="stylesheet" media="all" type="text/css" />
       <meta charset="utf-8">
   </head>
   <body>
          <div align="center">

             

<form method="post" >           
             

            <h2> demande devis </h2>

            Nom : <?php echo $userinfo['nom'] ; ?> <br>  prenom : <?php echo $userinfo['prenom'] ; ?> 

               <p> 2/ Pour réaliser votre devis avec précision, merci de nous indiquer obligatoirement la référence * </p>
     <input type="text" name="imm" id="imm" placeholder="EX : FGT54ZE">

                     <p> 3/ Votre demande détaillée * </p>

            <textarea   name="devis"  id="devis">  </textarea>
            <br>
       <input  name="mondevis" type="submit" value="Envoyer mon devis"/>
</form>

         <?php 
                
              if(isset($erreur)) 
              {
                echo $erreur;
              }

          ?>

   </div>

      
   </div>

 
  

   </body>
</html>


 <?php

}

else

{
     header("Location: demandedevis.php?id=".$_SESSION['id']);
}
 

?> 

Il me semble qu'il faudra utiliser une requête sql pour que je puisse récupérer les valeurs d'une variable d'une autre table non ?
Modifié par loicc97460 (26 Mar 2018 - 11:48)
Modérateur
if(!empty($_POST['nom']) AND  !empty($_POST['prenom']) AND


'nom' et 'prenom' semble ne pas être transmise par POST. Ne serait-ce pas plutôt les infos de $userinfo qu'il faille utiliser ?
Oui j'ai déjà essayé mais ça ne marche toujours pas, ça me dit que tout les champs doivent être complétés




if(isset($_POST['mondevis']))
 {
    if(!empty($_POST['$userinfo']) AND  !empty($_POST['$userinfo']) AND   !empty($_POST['imm']) AND  !empty($_POST['devis']))
    {
       $insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, imm, devis) VALUES (?, ?, ?, ?, ?") ;
       $insertdemandedevis->execute(array($userinfo, $userinfo, $imm, $devis));
       $erreur = "Devis envoyé ! ";
    }
      else
    {
        $erreur = "Tout les champs doivent être complétés !" ;
    }
 }   



Modifié par loicc97460 (26 Mar 2018 - 12:06)
slt,

attention à tes copier/coller Smiley cligne

 if(!empty($_userinfo['$nom']) AND  !empty($_userinfo['$prenom']) AND   


tes variable en sont pas correctement écrites.

de plus plus tu risque d'avoir un soucis ici car tes variables "$userinfo" sont des tableaux.

 $insertdemandedevis->execute(array($userinfo, $userinfo, $imm, $devis));


et ici tu as 4 insertions pour 5 valeurs attendues (?, ?, ?, ?, ?")

$insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, num, devis) VALUES (?, ?, ?, ?, ?") ;
Modérateur
Je pensais plutôt à
if(!empty($userinfo['nom']) AND !empty($userinfo['prenom'])


D'ailleurs le test sur $userinfo devrait être fait en amont et en dehors de if(isset($_POST['mondevis']))


PS: J'en suis encore à essayer de comprendre la logique du script. Smiley confused


Si je traduis le script tel qu'il semble devoir être:
- on initialise une connexion à la bdd (hydratation de $bdd)
- Si $_SESSION['id']) ET $_GET['id'] sont définis (>0 ne sert à rien ici) on hydrate $userinfo avec les données de la bdd (je pense qu'on récupère ici les nom et prénom).
- Ici on devrait tester si on a bien les noms et prénom sinon on prévoit une porte de sortie.

- Ensuite on vérifie que la demande de devis a bien été postée.
* Si c'est le cas on vérifie que les champs 'imm' et 'devis' sont correctement remplis. On hydrate la bdd n°2 le cas échéant sinon on retourne un message d'erreur (tous les champs doivent être complétés).

Si le devis n'a pas été posté:
- on affiche le formulaire par lequel on récupère en POST 'imm', 'devis' et 'mondevis'



Ceci étant, dites-moi si je fais erreur mais:
* On ne peut faire une demande de devis QUE qui on est connecté en tant que client du site. Vrai / Faux ?
* Que se passe-t-il si l'ID transmise dans l'url est modifiée pour une raison x ou y ?
* Vous semblez refuser les demandes aux clients non inscrits. v/f ?
* Et si je suis client et que je veux que le devis soit fait au nom de quelqu'un d'autre ou au nom de l'entreprise ?


Mon avis:
Il y a de l'idée mais la question ne semble pas avoir été étudiée en profondeur. Avec l'expérience vous vous apercevrez que toute idée commence par une feuille (ce truc fin fait à partir d'un arbre et qui passe sous une porte) et un stylo.
Vos tests effectués sur les données transmises sont rudimentaires et loin d'être imperméables. Il vous faudra poursuivre votre apprentissage sur le thème de la sécurisation des données entrantes. Une règle est à placer en préambule à toutes les autres: ne jamais faire confiance aux données du client ! J'ajouterais qu'il faille même être paranoïaque vis-à-vis d'elles.
Pensez aussi à la maintenabilité de votre code. Ici vous mélangez allègrement français et anglais. Fixer-vous des règles, une convention de nommage et tentez d'utiliser des noms (variables, fonctions etc) les plus explicites possibles. Pensez toujours à dans 6 mois quand vous voudrez faire une retouche.
Enfin, rigueur, rigueur et encore rigueur ! Indispensable.

Voila, fin de mon aparté. Smiley smile
Modifié par Greg_Lumiere (26 Mar 2018 - 12:22)
1/ Vrai
2/ En effet si ID est modifié on peut switcher du compte d'un client à un autre ce qui n'est pas normal..
3/ Vraie si un client n'est pas inscrit il ne peut pas faire de devis
4/Lors de l'inscription le client aura le choix dans le champ civilité de choisir entre : Monsieur, Madame, Mademoiselle, et société, et il a la possibilité de modifier tout ses informations dans l'édition de profil ( nom prenom civilité ).

C'est peut être ce que dis mon code PhP, mais moi en réalité ce que je veux lui faire faire c'est qu'il vérifie que tout les champs sont complétés et qu'il récupère les valeurs de la variable $userinfo nom et prenom qu'il le transmettre à ma table demandevis, sinon, si tout les champs ne sont pas complétés qu'il adresse au client ce message d'erreur : " tout les champs doivent être complétés ! "
c'est si simple de le dire mais c'en est une autre de le faire.. ^^
Modifié par loicc97460 (26 Mar 2018 - 13:23)
Modérateur
loicc97460 a écrit :
1/ Vrai
2/ En effet si ID est modifié on peut switcher du compte d'un client à un autre ce qui n'est pas normal..
3/ Vraie si un client n'est pas inscrit il ne peut pas faire de devis
4/Lors de l'inscription le client aura le choix dans le champ civilité de choisir entre : Monsieur, Madame, Mademoiselle, et société, et il a la possibilité de modifier tout ses informations dans l'édition de profil ( nom prenom civilité ).

2/ C'est pourquoi la transmission d'un référant par GET est à bannir, trop facilement accessible et trop tentant de le modifier. Quand ça fait référence à un numéro de page, ce n'est pas un soucis, il m'est d'ailleurs arriver de naviguer de cette façon sur certains sites mais pour un identifiant rattaché à des informations personelles....
Même si les données POST restent manipulables par le client, au moins la modification involontaire est écartée.
Dans ce genre de cas on couple généralement l'id à un token temporaire et à chaque page durant le temps de la session on contrôle la validité du couple.
PS: ou on vire l'id et on n'utilise qu'un token ; différents procédés existent, Google en connaît un rayon sur le sujet Smiley cligne

4/ Donc je me suis inscris avec la civilité 'Monsieur' et Trucmuche, qui n'a pas d'accès Internet, me demande de lui éditer un devis pour sa PME. Je vais dans la demande de devis et là BIMMM... je m'aperçois que je ne peux personnaliser ma demande. Je dois donc retourner dans mon espace membre (faut y penser, hein ?), mettre les infos de la société de Trucmuche, retourner dans la demande de devis, valider le formulaire, retourner à nouveau dans mon espace membre et enfin remettre mes infos personnelles. Sérieux ?
Pourquoi ne pas insérer des champs nom, prénom, adresse, sté [...] qui seraient pré-remplis avec les infos de $userinfos et laisser la possibilité à l'utilisateur de les modifier ? C'est juste une idée.


Pour en revenir au cœur du sujet, avez-vous solutionné la problématique énoncée ?
Edit: je n'avais pas lus toute la réponse Smiley confused
Modifié par Greg_Lumiere (26 Mar 2018 - 13:33)
Modérateur
loicc97460 a écrit :

C'est peut être ce que dis mon code PhP, mais moi en réalité ce que je veux lui faire faire c'est qu'il vérifie que tout les champs sont complétés et qu'il récupère les valeurs de la variable $userinfo nom et prenom
Erreur ! Tel que c'est là vous avez besoin de $userinfo avant que le formulaire ne soit soumit car vous personnalisez le-dit formulaire.


loicc97460 a écrit :

c'est si simple de le dire mais c'en est une autre de le faire.. ^^
Papier + crayon....


Hé oui, il est temps de reprendre l'idée depuis son germe et de la faire fleurir:
* De quoi disposons-nous quand le visiteur arrive sur la page ?
Nous avons son ID ! Grace à elle nous avons les infos de la première table soit nom et prénom.
* De quoi avons nous besoin: imm, devis et que le formulaire a bien été validé

Quelles "fonctions devrions-nous mettre en place ?
* Contrôler l'existence et la validité de ID:
- si ID ok, on obtient nom et prénom
- si ID pas ok, on kick le visiteur vers la page de connexion
* Contrôler si le formulaire a été soumit pour:
- contrôler la saisie:
__ si saisie ok, enregistrement en bdd, on confirme l'envoi au client + on masque le formulaire
__ si saisi pas ok on affiche un message d'erreur et on affiche le formulaire

A ce stade on cherche les points communs afin de déterminer les solutions techniques qu'on va mettre en place et éviter la redondance:
* la détermination de nom et prénom est globale à la page et à tout contexte. Cette directive nécessite de prendre une décision quand à l'avenir du reste de la page donc on commence le code par ceci.
* le contrôle après soumission se fait toujours avant le formulaire (dans ce cas de one-page). Ce contrôle détermine si on va afficher le formulaire ou non. donc soit on choisit de regrouper les tests (plus complexe mais optimal) soit on vérifie deux fois que le formulaire a été soumit (la voie vers laquelle vous vous dirigez actuellement et que je vais détailler)
Donc on vérifie que le formulaire a été soumit ET on contrôle les saisies utilisateur. On affiche l'un ou l'autre message (échec/réussite)
* enfin on contrôle à nouveau que le formulaire a été soumit et uniquement qu'il l'a été.
Si c'est le cas on n'affiche rien de plus sinon on affiche le formulaire.
* on peut maintenant intégrer notre zoli pied de page.


Voyons un peu ce que ça peut donner en terme de code. Ceci n'est qu'un brouillon qui tend a être au plus proche de ce que vous avez déjà. Il vous faudra le perfectionner et l'affiner:

<?php
  session_start();

  /* Vérification sur l'ID */
  if (isset($_SESSION['id']) AND $_GET['id'] > 0) {// contrôleur à perfectionner
  
    $bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_client', 'root', '');
    $getid = intval($_GET['id']);
    $requser = $bdd->prepare('SELECT * FROM client WHERE id = ? ');
    $requser->execute(array($_SESSION['id']));
    $userinfo = $requser->fetch();// théoriquement on a déterminé 'nom' et 'prénom' ; ils sont maintenant prêts à l'emploi
  }
  /* On contrôle qu'on bien récupéré le nom et le prénom sinon DEHORS !!!!! */
  if (empty($userinfo['nom'])
  &&  empty($userinfo['prenom'])) {
    header('location: page_de_connexion.php');// la sortie c'est par là !
    exit;// on n'oublie pas le exit sinon le reste du code sera exécuté
  }

  $yaErreur = '';// on s'en servira plus tard... Retenez que pour l'instant c'est un string.
  
  /* Le visiteur a-t-il déjà soumit le formulaire ? That's the question !
     Et s'il fût asser fou pour le faire, l'a-t-il bien fait au moins ?
     PS: pas besoin de revérifier le nom et prénom on a contrôlé plus haut */
  if (!empty($_POST['mondevis']
  &&  (empty($_POST['imm']) ||  empty($_POST['devis']))) {
    $insertdemandedevis = $bdd->prepare("INSERT INTO demande_devis(nom, prenom, num, devis) VALUES (?, ?, ?, ?, ?") ;
    $insertdemandedevis->execute(array($userinfo, $userinfo, $imm, $devis));
    $msgErreur = "Devis envoyé ! ";
    $yaErreur = false;// pas d'erreur, on passe au booléen false
  } else {
    $msgErreur = "Tout les champs doivent être complétés !" ;
    $yaErreur = true;// attention erreur, on passe aussi en booléen
  } 
?>
<?php
  /* Que fait ceci ici ????????????
  <a href="accueil.php?id=<?php echo $userinfo['id'] ?>"> Accueil </a>
  */
?>
<html>
  <head>
    <title> formulaire d'inscrption brouillon</title>
    <link href="forminscription.css" rel="stylesheet" media="all" type="text/css" />
    <meta charset="utf-8">
  </head>
  <body>
    <div align="center">
      <?php
        /* On affiche le message résultant de la demande de devis
           Si $yaErreur est devenu un booléen c'est que la soumisison a été faite */
        if (is_bool($yaErreur)) { echo '<div>', $msgErreur, '</div>'; }
        
        /* Si le formulaire n'a pas été soumit ou si les données transmises sont erronées on affiche le formulaire */
        if ($yaErreur !== false) {
      ?>
      <form action="/" method="post" >
        <h2> demande devis </h2>
        <p>Nom : <?php echo $userinfo['nom'] ; ?> <br>  prenom : <?php echo $userinfo['prenom'] ; ?></p>
        <p> 2/ Pour réaliser votre devis avec précision, merci de nous indiquer obligatoirement la référence * </p>
        <input type="text" name="imm" id="imm" placeholder="EX : FGT54ZE">
        <p> 3/ Votre demande détaillée * </p>
        <textarea name="devis"  id="devis"></textarea>
        <br>
        <input  name="mondevis" type="submit" value="Envoyer mon devis"/>
      </form>
      <?php
        /* On n'oublie surtout pas de refermer son IF !!!! */
        }
      ?>
    </div>
  </body>
</html>


Voila qui pose, je pense, de bonnes fondations.
Modifié par Greg_Lumiere (30 Mar 2018 - 14:12)