Formulaire d'insertion dans une BDD [carte cliquable]

Eléphant du PHP | 51 Messages

08 juin 2009, 09:15

Bonjour,

Je post un nouveau sujet pour mon nouveau soucis ^^ !

Alors dans ma carte cliquable http://www.phpfrance.com/forums/voir_sujet-248133.php j'affiche des infos sur des clients, et j'aimerai pouvoir compléter ma BDD grâce à un formulaire.

j'ai commencé ce formulaire:
<?php
if (isset($_POST['mot_de_passe'])) // Si la variable existe
{
    // On se crée une variable $mot_de_passe avec le mot de passe entré
    $mot_de_passe = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
    $mot_de_passe = ""; // On crée une variable $mot_de_passe vide
}
 
if ($mot_de_passe == "******") // Si le mot de passe est bon
{
// On affiche la page cachée.
?>
<!-- PAGE HTML D'INSERTION -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Formulaire Client</title>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	   
       <!-- CSS -->
	   <style type="text/css">
          label {
				display:block;
				width:200px;
				float:left;
				} 
       </style>
   </head>
   	<hr/>

   <body>

<!-- TEST  -->
<form method="post" action="ajout.php">

<!-- FORMULAIRE A REMPLIR -->
<p><font color="#330099"> <p align="center"> <font face="Trebuchet, Helvetica, sans-serif"> <font size="5"><b>  Nouveau Client  </b></font></font></font></p>
<hr size="5" width="100%" align="center"> <br /><br />

<!--<label for="nom"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Departement :  </b></font></font></font> </label><br /><br />

<label for="idselect"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Departement :  </b></font></font></font></label> 
  <select name="param" id="idselect">
    <option value=""selected="selected">Faites votre choix</option>
    <option value="1">Ain</option>
    <option value="2">Aisne</option>
    <option value="3">Allier</option>
    <option value="4">Alpes-de-Haute-Provence</option>
...
  </select><br /><br />-->
  
<label for="Entreprise"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Entreprise :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Num_Dep"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Numero Departement :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Nom_Maintenance"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Nom Maintenance :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Num_Maintenance"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Numero Maintenance :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Nom_Travaux"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Nom travaux :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Num_Travaux"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Numero Travaux :  </b></font></font></font> </label><input type="text" /><br /><br />

<label for="Adresse"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Adresse :  </b></font></font></font> </label><input type="text" /><br /><br /><br />

<input type="submit" value="Insérer dans la base">

</p>
<br/>
<br/>
</form> <FORM ACTION="http://localhost/test/index.php"> <INPUT TYPE="SUBMIT" VALUE="Annuler"> </FORM> </TABLE></body></html>

<?php
}
else // le mot de passe n'est pas bon
{
	// On affiche la zone de texte pour rentrer le mot de passe.
?>

<!-- ZONE MOT DE PASSE -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Page protégée par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
   
<body>
	<p>	<br/> <br/>
	Veuillez entrer le mot de passe pour insérer un nouveau client :
	<br/> <br/>	</p>

<form action="protection.php" method="post">
	<p>
	<input type="text" name="mot_de_passe" /> <input type="submit" value="Valider" />
	</p>
</form>
	<hr/>
	<TABLE BORDER=4 CELLPADDING=0 CELLSPACING=0 ALIGN="LEFT"> <TR><TD> <FORM ACTION="http://localhost/test/index.php"> <INPUT TYPE="SUBMIT" VALUE="Annuler"></TD> </FORM></TR> </TABLE>
</body></html>
<?php
} // Fin du else
// Fin du code :)
?>
J'utilise des labels pour les formulaires, methode post ensuite :

ma page ajout.php :
<?php
      
      // déclaration de quelques variables

      $host = "localhost";
      $user = "root";
      $pass = "";
      $bdd = "clients";
      $table = "informations";

      // connection avec MySQL

      @mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données");

      // Le @ indique à php de ne pas afficher de message d'erreur

      @mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");

     
      // stockage dans la bdd
 
$id = $_POST['id'];
$Entreprise = $_POST['Entreprise']; 
$Num_Dep = $_POST['Num_Dep'];
$Nom_Maintenance = $_POST['Nom_Maintenance'];
$Num_Maintenance = $_POST['Num_Maintenance'];
$Nom_Travaux = $_POST['Nom_Travaux'];
$Num_Travaux = $_POST['Num_Travaux'];
$Adresse =$_POST['Adresse'];
     
 
      $sql = "INSERT INTO informations(id,Entreprise, Num_Dep, Nom_Maintenance, Num_Maintenance, Nom_Travaux, Num_Travaux, Adresse) VALUES('','$Entreprise', '$Num_Dep', '$Nom_Maintenance', '$Num_Maintenance', '$Nom_Travaux', '$Num_Travaux', '$Adresse')";
      $res = mysql_query($sql) or die(mysql_error());
	  echo 'merci beaucoup, vos infos ont été enregistrées.';


      // déconnection avec MySQL

      mysql_close();

      ?>
lorsque je valide le formulaire , on m'affiche des erreurs comme

Code : Tout sélectionner

Notice: Undefined index: id in C:\wamp\www\test\ajout.php on line 22
et puis dans ma table cela rajoute une ligne vide, à part l'id auto incrémenté qui augmente à chaque texte malgrès les effacages.

Mon formulaire, mot de passe fonctionne, mais cela n'envoie pas les données dans la BDD, j'ai fait le tour de pas mal de tutos, mais peut être pas les bons....

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2009, 10:02

Lorsque tu vois Undefined c'est que c'est inexistant. Dans ton formulaire, on ne voit l'ID nulle part. S'il s'agit d'une auto-incrémentation, inutile de le mettre dans la requête d'insertion.

Eléphant du PHP | 51 Messages

08 juin 2009, 10:06

Oui il est en auto incrément, j'avais vu que ce n'etait pas la peine de le mettre, mais dans d'autres tutos oui... J'avais donc testé les deux...

Cependant jene comprends pas pourquoi mes index sont 'inexistants', ils sont pourtant bien là!

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2009, 10:11

$id = $_POST['id'];
Si tu regardes bien ton formulaire, à aucun moment tu ne passes cette donnée ID que tu tentes de récupérer.

Eléphant du PHP | 51 Messages

08 juin 2009, 10:23

Oui, j'ai supprimé tout ce qui concernait l'id...

Je declare pourtant dans mon formulaire tout le reste :
<form method="post" action="ajout.php">

<!-- FORMULAIRE A REMPLIR -->
<p><font color="#330099"> <p align="center"> <font face="Trebuchet, Helvetica, sans-serif"> <font size="5"><b>  Nouveau Client  </b></font></font></font></p>
<hr size="5" width="100%" align="center"> <br /><br />
  
<label for="Entreprise"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Entreprise :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Num_Dep"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Numero Departement :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Nom_Maintenance"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Nom Maintenance :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Num_Maintenance"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Numero Maintenance :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Nom_Travaux"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Nom travaux :  </b></font></font></font> </label><input type="text"  /><br /><br />

<label for="Num_Travaux"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Numero Travaux :  </b></font></font></font> </label><input type="text" /><br /><br />

<label for="Adresse"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Adresse :  </b></font></font></font> </label><input type="text" /><br /><br /><br />

<input type="submit" value="Insérer dans la base">
et c'est la même erreur :?

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2009, 10:31

Mais l'erreur vient justement du fait que tu tentes de récupérer quelque chose que tu as supprimée...

Si tu as supprimé tout ce qui concerne l'ID, tu dois faire de même lors de l'insertion :
1. supprimer
$id = $_POST['id'];
2.
$sql = "INSERT INTO informations(Entreprise, Num_Dep, Nom_Maintenance, Num_Maintenance, Nom_Travaux, Num_Travaux, Adresse) VALUES('".$Entreprise."', '".$Num_Dep."', '".$Nom_Maintenance."', '".$Num_Maintenance."', '".$Nom_Travaux."', '".$Num_Travaux."', '".$Adresse."')";

Eléphant du PHP | 51 Messages

08 juin 2009, 10:38

J'ai bien supprimé ces deux choses, le
$id = $_POST['id'];
et l'argument id dans ma requête d'insertion...

Mais même soucis, j'ai du mal définir mes variables quelquepart...

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2009, 10:40

:shock: tu as exactement la même erreur ID ?? Ca me parait très étonnant si c'est le cas...

Eléphant du PHP | 51 Messages

08 juin 2009, 10:47

En fait j'ai le même type d'erreur...

Code : Tout sélectionner

Notice: Undefined index: Entreprise in C:\wamp\www\test\ajout.php on line 23 Notice: Undefined index: Num_Dep in C:\wamp\www\test\ajout.php on line 24 Notice: Undefined index: Nom_Maintenance in C:\wamp\www\test\ajout.php on line 25 Notice: Undefined index: Num_Maintenance in C:\wamp\www\test\ajout.php on line 26 Notice: Undefined index: Nom_Travaux in C:\wamp\www\test\ajout.php on line 27 Notice: Undefined index: Num_Travaux in C:\wamp\www\test\ajout.php on line 28 Notice: Undefined index: Adresse in C:\wamp\www\test\ajout.php on line 29

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2009, 10:52

Heu...je n'avais pas fait attention à cause de l'erreur. Mais regarde ton formulaire. Pour tous tes champs je vois :
<input type="text"  />
Normal donc qu'il ne trouve aucun donnée.

Le nom doit se trouver dans le champ input et non pas dans le label si tu veux récupérer les données.

Et juste comme ça, les FONT c'est l'horreur : ça ne respecte plus la norme et le code est illisible. Un conseil donc, met toi très vite aux CSS.

Si tu passes ton site ici : http://validator.w3.org tu serais très surpris !

Eléphant du PHP | 51 Messages

08 juin 2009, 11:49

La methode avec les labels correspond elle à mes besoins?

Voici un demes labels :

Code : Tout sélectionner

<label for="Entreprise"> * Entreprise : </label><input id="Entreprise" type="text" /><br /><br />
(j'ai commencé le CSS, merci du conseil )

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2009, 12:03

Un petit name="Entreprise" dans ton input et la récupération sera fera sans souci.

Ton label sert à mettre le curseur dans le champ lorsque l'on clique sur l'intitulé, ici "* Entreprise :"

Eléphant du PHP | 51 Messages

08 juin 2009, 13:59

Toujours rien :(
<label for="Entreprise">  * Entreprise : </label><input name="Entreprise" type="text"  /><br /><br />
Dans mon ajout.php, j'ai tester de mettre un echo mais il ne renvoit rien, j'ai donc un soucis dans la récupération de mes POST :
$Entreprise = $_POST['Entreprise'];
echo $Entreprise; 

Avatar du membre
ViPHP
ViPHP | 3008 Messages

08 juin 2009, 14:40

Tu peux nous reposter ton code complet corrigé ?

Parce que là ça devrait fonctionner sans problème.

Eléphant du PHP | 51 Messages

08 juin 2009, 14:50

Voici protection.php :
<?php
if (isset($_POST['mot_de_passe'])) // Si la variable existe
{
    // On se crée une variable $mot_de_passe avec le mot de passe entré
    $mot_de_passe = $_POST['mot_de_passe'];
}
else // La variable n'existe pas encore
{
    $mot_de_passe = ""; // On crée une variable $mot_de_passe vide
}
 
if ($mot_de_passe == "******") // Si le mot de passe est bon
{
// On affiche la page cachée.
?>
<!-- PAGE HTML D'INSERTION -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Formulaire Client</title>
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	   
  </head>
   	<hr/>

   <body>

<!-- TEST  -->
<form method="post" action="ajout.php">
<br/>
<!-- FORMULAIRE A REMPLIR -->
<!--<p><font color="#330099"> <p align="center"> <font face="Trebuchet, Helvetica, sans-serif"> <font size="5"><b>  Nouveau Client  </b></font></font></font></p>
<hr size="5" width="100%" align="center"> <br /><br />-->
<fieldset><legend>NOUVEAU CLIENT</legend>
<!--<label for="nom"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Departement :  </b></font></font></font> </label><br /><br />

<label for="idselect"><font color="#330099">  <font face="Trebuchet, Helvetica, sans-serif"> <font size="3"><b>  * Departement :  </b></font></font></font></label> 
  <select name="param" id="idselect">
    <option value=""selected="selected">Faites votre choix</option>
    <option value="1">Ain</option>
    <option value="2">Aisne</option>
    <option value="3">Allier</option>
    <option value="4">Alpes-de-Haute-Provence</option>
	<option value="5">é"</option>

  </select><br /><br />-->
  
<label for="Entreprise">  * Entreprise : </label><input name="Entreprise" type="text"  /><br /><br />

<label for="Num_Dep">  * Numero Departement : </label><input name="Num_Dep" type="text"  /><br /><br />

<label for="Nom_Maintenance">  * Nom Maintenance : </label><input name="Nom_Maintenance" type="text"  /><br /><br />

<label for="Num_Maintenance">  * Numero Maintenance : </label><input name="Num_Maintenance"type="text"  /><br /><br />

<label for="Nom_Travaux">  * Nom travaux : </label><input name="Nom_Travaux" type="text"  /><br /><br />

<label for="Num_Travaux"> * Numero Travaux : </label><input name="Num_Travaux" type="text" /><br /><br />

<label for="Adresse"> * Adresse : </label><input name="Adresse" type="text" /><br /><br /><br />

<input type="submit" value="Insérer dans la base">

</p>
<br/>
<br/>
</form> </fieldset><FORM ACTION="http://localhost/test/index.php"> <INPUT TYPE="SUBMIT" VALUE="Annuler"> </FORM> 

 <!-- CSS -->
	   <style type="text/css">
label 
{
	display:block;
	width:200px;
	float:left;
	font-family="Trebuchet, Helvetica, sans-serif";
	font-weight:bold;
	
} 
				
fieldset
{
	margin-bottom: 10px;
	border: #330099 2px solid;
}

fieldset legend
{
	padding: 0 10px;
	border-left: #330099 2px solid;
	border-right: #330099 2px solid;
	font-size: 1.2em;
	color: #999;
}
       </style>

</body></html>

<?php
}
else // le mot de passe n'est pas bon
{
	// On affiche la zone de texte pour rentrer le mot de passe.
?>

<!-- ZONE MOT DE PASSE -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
        <title>Page protégée par mot de passe</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
   
<body>
	<p>	<br/> <br/>
	Veuillez entrer le mot de passe pour insérer un nouveau client :
	<br/> <br/>	</p>

<form action="protection.php" method="post">
	<p>
	<input type="text" name="mot_de_passe" /> <input type="submit" value="Valider" />
	</p>
</form>
	<hr/>
	<TABLE BORDER=4 CELLPADDING=0 CELLSPACING=0 ALIGN="LEFT"> <TR><TD> <FORM ACTION="http://localhost/test/index.php"> <INPUT TYPE="SUBMIT" VALUE="Annuler"></TD> </FORM></TR> </TABLE>
</body></html>
<?php
} // Fin du else
// Fin du code :)
?>

et ajout.php
<?php
      
      // déclaration de quelques variables

      $host = "localhost";
      $user = "root";
      $pass = "";
      $bdd = "clients";
      $table = "informations";

      // connection avec MySQL

      mysql_connect($host, $user, $pass) or die("Impossible de se connecter à la base de données");

      // Le @ indique à php de ne pas afficher de message d'erreur

      mysql_select_db($bdd) or die("Impossible de se connecter à la base de données");

     
      // stockage dans la bdd
 

$Entreprise = $_POST['Entreprise']; 

$Num_Dep = $_POST['Num_Dep'];
$Nom_Maintenance = $_POST['Nom_Maintenance'];
$Num_Maintenance = $_POST['Num_Maintenance'];
$Nom_Travaux = $_POST['Nom_Travaux'];
$Num_Travaux = $_POST['Num_Travaux'];
$Adresse =$_POST['Adresse'];
    

 /*
      $sql = "INSERT INTO informations(Entreprise, Num_Dep, Nom_Maintenance, Num_Maintenance, Nom_Travaux, Num_Travaux, Adresse) VALUES('$Entreprise', '$Num_Dep', '$Nom_Maintenance', '$Num_Maintenance', '$Nom_Travaux', '$Num_Travaux', '$Adresse')";
      $res = mysql_query($sql) or die(mysql_error());
	  echo 'merci beaucoup, vos infos ont été enregistrées.';

*/
      // déconnection avec MySQL

      mysql_close();

      ?>