Formulaire PHP avec test champs vides

Formulaire PHP avec test champs vides - PHP - Programmation

Marsh Posté le 25-05-2011 à 14:18:47    

Bonjour à tous,
 
alors je vous explique mon problème, j'avais réalisé un formulaire PHP qui testait les champs vides, ce formulaire était composé de deux scripts (un pour le formulaire et le "fichier action" ) ça marchait très bien sauf que s'il y avait un champ vide le fichier action indiquait l'erreur ainsi qu'un lien pour revenir au formulaire mais l'utilisateur perdait alors ce qu'il avait déjà tapé.
On m'a parlé de session PHP mais j'ai pas trop réussi à mettre en place le truc, j'ai donc décidé de réaliser ce formulaire avec un seul fichier mais j'ai l'erreur suivante :
 
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\test_ajout.php:1) in C:\xampp\htdocs\test_ajout.php on line 50
 
Voilà ci-dessous mon code en entier :  
 

Code :
  1. <?php
  2. // Paramètres pour accéder à ta base MysQl
  3. $host = "localhost";
  4. $user = "root";
  5. $password = "";
  6. $bdd = "application";
  7. // Connection à la Base MySql
  8. mysql_connect($host, $user, $password) or die ("impossible de se connecter au serveur" );
  9. mysql_select_db($bdd) or die ("impossible de se connecter a la base de donnees" );
  10. // Déclaration des champs (vides ou récupération des $_POST)...
  11. $title = (isset($_POST['title'])) ? htmlspecialchars($_POST['title']) : '';
  12. $logiciel = (isset($_POST['prenom'])) ? htmlspecialchars($_POST['logiciel']) : '';
  13. $version = (isset($_POST['version'])) ? htmlspecialchars($_POST['version']) : '';
  14. $link = (isset($_POST['link'])) ? htmlspecialchars($_POST['link']) : '';
  15. $logiciel = (isset($_POST['description'])) ? htmlspecialchars($_POST['description']) : '';
  16. // Si le formulaire a été envoyé, on teste les champs...
  17. $erreur = false;
  18. if (!empty($_POST)) {
  19. // vérification dans l'ordre inverse pour que le dernier soit le premier  smile  
  20. if (empty($title)) {
  21.  $erreur = true;
  22.  $errmsg = 'Merci de saisir le titre !';
  23. }
  24. if (empty($logiciel)) {
  25.  $erreur = true;
  26.  $errmsg = 'Merci de saisir le logiciel/matériel !';
  27. }
  28.  // Si tout est OK on exécute l'action (INSERT dans la base, envoi d'email, etc...)
  29. if (!$erreur) {
  30.  mysql_query("INSERT INTO infolog (title,logiciel,version,link,description) VALUES('$title','$logiciel','$version','$link','$description')" );
  31.  header("Location: ajout_info.php" );
  32.  exit;
  33. }
  34. }
  35. ?>
  36. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  37. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
  38.   <head>
  39.        <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
  40.     <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  41.     <title>Ajouter nouvelle info</title>
  42.     <link href="CSS/style.css" rel="stylesheet" type="text/css" media="screen" />
  43. <style type="text/css">
  44. .alert {
  45. color:#990000;
  46. }
  47. </style>
  48.   </head>
  49. <BODY background="metal.jpg" style="background-repeat:no-repeat; background-attachment:fixed">
  50. <?php
  51. if ($erreur) {
  52. echo '<p class="alert">'.$errmsg.'</p>';
  53. }
  54. ?>
  55. <br>
  56. <ul id="menu_dynamique">
  57.     <li class="extend">Informations<ul>
  58. <li><a href="traitement.php">Infos Logiciels</a></li>
  59. <li class="sans"><a href="traitementmat.php">Infos Mat&eacute;riels</a></li>
  60. <li><a href="traitementcontrat.php">Infos Contrats</a></li>
  61. </ul>
  62. </li>
  63. <li class="extend none"><a href="http://192.168.66.110/ouapi1.0">G&eacute;rer le parc Informatique</a></li>
  64. <li class="extend">Gestion des infos<ul>
  65.  <li><a href="nouvelle_info.html">Ajouter une info</a></li>
  66.  <li class="sans"><a href="modifinfo.php">Modifier/Supprimer info</a></li>
  67.     <li><a href="removerss.php">Supprimer document</a></li>
  68.  </ul>
  69. </li>
  70. <li class="extend none">Gestion des flux RSS
  71.  <ul>
  72.  <li><a href="actu_flux.php">Actualiser les flux</a></li>
  73.  <li class="sans"><a href="nouv_flux.html">Ajouter un flux</a></li>
  74.     <li><a href="removeflux.php">Supprimer un flux</a></li>
  75.  </ul>
  76. </li>
  77. <li class="extend"><a href="http://www.groupe-ocealis.com/ocealis-securite.html" title="Lien vers le site d'Ocealis S&eacute;curit&eacute;">Ocealis S&eacute;curit&eacute;</a></li>
  78. </ul>
  79. <br><br><br><br>
  80. <table align="center" width="800" height="390" border="0" cellpadding="0" cellspacing="0">
  81.    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
  82.       <tr>
  83.         <!--<td width="6%">&nbsp;</td>-->
  84.         <td colspan="5"><P ALIGN='center'><FONT SIZE=5 COLOR='#377693'><span style="font-variant: small-caps;"><B>Ajouter une nouvelle Information</B></SPAN></FONT><BR><BR><BR></P></td>
  85.      </tr>
  86.   <tr>
  87.  <td><div><font size=4 COLOR='#377693'><span style="font-variant: small-caps;"><B><label for="title">Titre *</label></B></SPAN></font></div></td>
  88.   </tr>
  89. <tr>
  90.       <td colspan="35"><input type="text" name="title" id="title" size="76" maxlength="500" value="<?php echo stripslashes($title); ?>" /></td>
  91. </tr>
  92. <tr>
  93.       <td><div><font size=4 COLOR='#377693'><span style="font-variant: small-caps;"><B><label for="logiciel">Logiciel / Mat&eacute;riel *</label></B></SPAN></font></div></td></tr>
  94.   <tr>
  95.       <td colspan="5"><input type="text" name="logiciel" id="logiciel" size="50" maxlength="50" value="<?php echo stripslashes($logiciel); ?>" /></td>
  96. </tr>
  97. <tr>
  98.       <td><div><font size=4 COLOR='#377693'><span style="font-variant: small-caps;"><B><label for="version">Version</label></B></SPAN></font></div></td>
  99.   </tr>
  100. <tr>
  101.       <td colspan="5"><input type="text" name="version" id="version" size="50" maxlength="50" value="<?php echo stripslashes($version); ?>" /></td>
  102. </tr>
  103. <tr>
  104. <td><div><font size=4 COLOR='#377693'><span style="font-variant: small-caps;"><B><label for="link">Lien *</label></B></SPAN></font></div></td></tr>
  105. <tr>
  106. <td colspan="5"><input type="text" name="link" id="link" size="50" maxlength="50" value="<?php echo stripslashes($link); ?>" /></td>
  107. </tr>
  108. <tr>     
  109.       <td><BR><div><font size=4 COLOR='#377693'><B><span style="font-variant: small-caps;"><label for="description">Description *</label></SPAN></B></font></div></td>
  110.   </tr>
  111.   <tr>
  112.       <td colspan='5'><textarea rows="5" cols="76" name="description" id="description" value="<?php echo stripslashes($description); ?>"></textarea></td>
  113. </tr>
  114. <tr>
  115.   <td height="24"></td>
  116.   <td>&nbsp;</td>
  117.   <td>&nbsp;</td>
  118. </tr>
  119. <tr>
  120.   <td height="14"></td>
  121.   <td width="16%"><center><input type="reset" name="Submit2" value="Effacer"></center></td>
  122.   <td width="28%"><left><input type="submit" name="Submit" value="Enregistrer l'info"></left></td>
  123. </tr>
  124. <tr>               
  125. <td height="20"></td>
  126.      <td></td>
  127.      <td></td>
  128. </tr>
  129. </form>
  130. </table></td></tr>
  131. </table>
  132. </div>
  133. <BR><BR><BR>
  134. <P align="right"><FONT COLOR='#377693' STYLE="font-family:trebuchet MS;">* indique un champ requis</FONT></P>
  135. </body>
  136. </html>


Merci d'avance pour votre aide !

Reply

Marsh Posté le 25-05-2011 à 14:18:47   

Reply

Marsh Posté le 25-05-2011 à 14:33:25    

pb archi traité sur ce forum ou sur google :/
 
T'as des trucs écrits (ou juste un caractère espace) avant l'instruction header("Location: ajout_info.php" );


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 25-05-2011 à 14:44:34    

alors en fait je n'ai plus la même erreur ça devait venir de l'encodage. Mais là le problème c'est qu'il ne fait pas les test correctement, il enregistre quand même dans la bdd si'il manque un champ il ne ré-affiche plus ce que l'utilisateur avait saisi.

Reply

Marsh Posté le 25-05-2011 à 15:40:58    

Ligne 18, y'a rien qui te choque? :D
 
par ailleurs, tu testes "empty" que 3 champs sur les 5...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 25-05-2011 à 16:05:35    

oui oui j'ai corrigé mes erreurs !
ça marche à peu près, lorsqu'il y a une erreur ça conserve bien ce que l'utilisateur avait tapé sauf pour le champ description, peut être parce qu'il est de type textarea ?
Sinon, je voudrais savoir comment faire pour afficher, lorsque la requête a bien été prise en compte, un petit message qui dit que ça a marché avec un lien pour ajouter une nouvelle info plutôt que de rafficher la page telle qu'elle comme si rien ne s'était passé ?
 
Merci d'avance

Reply

Marsh Posté le 25-05-2011 à 16:26:26    

C'est bon j'avais fait une erreur dans mon textarea !
Par contre, je ne sais pas comment afficher, lorsque la requête a bien été prise en compte, un petit message qui dit que ça a marché avec un lien pour ajouter une nouvelle info plutôt que de rafficher la page telle qu'elle comme si rien ne s'était passé ?

Reply

Marsh Posté le 25-05-2011 à 16:37:56    

boss183 a écrit :

oui oui j'ai corrigé mes erreurs !
ça marche à peu près, lorsqu'il y a une erreur ça conserve bien ce que l'utilisateur avait tapé sauf pour le champ description, peut être parce qu'il est de type textarea ?
Sinon, je voudrais savoir comment faire pour afficher, lorsque la requête a bien été prise en compte, un petit message qui dit que ça a marché avec un lien pour ajouter une nouvelle info plutôt que de rafficher la page telle qu'elle comme si rien ne s'était passé ?
 
Merci d'avance


 
ben tout simple :
if (OK){
    afficher le contenu de la page web avec le msg de confirmation + un lien
} else {
    réafficher le formulaire avec les msg d'erreur + valeurs déjà saisies
}
 
:/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 25-05-2011 à 17:07:10    

Merci mais en fait je voudrais que ma page soit constitué :
 
- d'une partie en HTML : menu et fond (qui seront toujours présent)
 
- de mon formulaire qui s'affiche lorsqu'on arrive sur la page ou qui se ré-affiche avec les valeurs saisies avant si les champs sont vides
 
- d'un message qui confirme que l'info a bien été enregistré avec un lien si on désire remettre ajouter une nouvelle info
 
le truc c que je veux pas afficher en même temps le message de confirmation et le formulaire, c'est soit l'un soit l'autre avec toujours en fond la partie html pour le fond et le menu.

Reply

Marsh Posté le 25-05-2011 à 17:20:56    

d'où le test if que j'ai mis :/
 
Si tu regardes mon soft Astres (cf ma signature), c'est comme ça que je fais : y'a des parties de contenu de ma mage web qui varient suivant des tests...
 
Edit : mais le mieux c'est de faire un MVC (modèle vue contrôleur) -> y'a un gros topic sur ce forum à ce propos...


Message édité par rufo le 25-05-2011 à 17:22:11

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 25-05-2011 à 17:23:11    

ça veut dire que ta partie en html qui représente le menu et le fond je la tape deux fois ?? et en plus faut que je me tape de mettre tous les echo pour transformer en php

Reply

Marsh Posté le 25-05-2011 à 17:23:11   

Reply

Marsh Posté le 25-05-2011 à 18:06:35    

boss183 a écrit :

ça veut dire que ta partie en html qui représente le menu et le fond je la tape deux fois ?? et en plus faut que je me tape de mettre tous les echo pour transformer en php


 
Ben non, tu factorises (include par ex). Mais comme dit précédemment, le mieux est de faire un MVC...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed