Probleme de liaison avec base mysql et formul

Résolu/Fermé
amphitrion Messages postés 6 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 28 juin 2008 - 26 juin 2008 à 20:57
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 - 28 juin 2008 à 11:09
Bonjour,

Il y a plusieurs heures que j'essaye de lier mon formulaire et ma base mysql;
La dernière réponse de la base est: "L'insertion a echouée car Query was empty"

j'ai consulté de nombreux tutos et je n'arrive pas a aboutir.

J'ai compris qu'il fallait créer deux pages;
une pour le formulaire et l'autre pour le transfert des données à la base.

C'est ce que j'ai fait;

voici mes codes:

page 1: index2.php (formulaire)

<!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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>formulaireclient</title>
</head>
<body bgcolor="#FFFFFF">
<form id="form1" name="contactclient" method="post" enctype="multipart/form-data" action="merci.php">
<td width="372"><table width="600">
<tr>
<td>Prénom</td>
<td><input type="text" name="prenom" /></td>
</tr>
<tr>
<td>Nom</td>
<td><input type="text" name="nom" /></td>
</tr>
<tr>
<td>Adresse</td>
<td><input type="text" name="adresse" /></td>
</tr>
<tr>
<td>Cp</td>
<td><input type="text" name="cp" /></td>
</tr>
<tr>
<td>Ville</td>
<td><input type="text" name="ville" /></td>
</tr>
<tr>
<td>Télèphone fixe</td>
<td><input type="text" name="telfixe" /></td>
</tr>
<tr>
<td>Portable</td>
<td><input type="text" name="portable" /></td>
</tr>
<tr>
<td>Fax</td>
<td><input type="text" name="fax" /></td>
</tr>
<tr>
<td>E-mail</td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td>Type Investisseur</td>
<td><select name="typeclient">
<option>Acheteur</option>
<option>Vendeur</option>
</select></td>
</tr>
<tr>
<td>Etes vous déja investisseur?</td>
<td><select name="dejainvest">
<option>OUI</option>
<option>NON</option>
</select></td>
</tr>
<tr>
<td>Type de bien </td>
<td><select name="typebien">
<option>Studio</option>
<option>Appartement</option>
<option>Maison de ville</option>
<option>Immeuble de rapport</option>
<option>Meublé</option>
<option>Autres</option>
</select></td>
</tr>
<tr>
<td>Budget</td>
<td><select name="budget">
<option>50 à 100 000 €</option>
<option>100 à 150 000 €</option>
<option>150 à 200 000 €</option>
<option>200 à 300 000€</option>
<option>300 à 500 000 €</option>
<option>500 000 à 1 million €</option>
<option>+ de 1 Million</option>
</select></td>
</tr>
<tr>
<td>Région ou Ville</td>
<td><input type="text" name="region" /></td>
</tr>
<tr>
<td>Observations</td>
<td><textarea name="observations" rows="10" wrap="virtual" cols="45"></textarea></td>
</tr>
<tr>
<td><div align="center">
<input type="submit" name="Submit" value="Envoyer" />
</div></td>
<td><div align="center">
<input type="reset" name="Submit2" value="Réinitialiser" id="Submit" />
</div></td>
</tr>
</table>
</form>
</body>
</html>

Page 2 (merci.php) page de reception

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php

// parametres d'access
$base='baseamphitrion';
$login='baseamphitrion';
$pwd= 'mot de passe';
$host="mon serveur";

// connection au serveur
$db=mysql_connect($host, $login, $pwd) or die('Erreur de connexion');

if(!$db)
{
print "erreur connection $db";
exit;
}

// on choisit la bonne base
if(!mysql_select_db($base,$db)){
print "erreur ".mysql_error()."<br>";
mysql_close($db);
exit;
}
$resultat = mysql_query($query)
or die("L'insertion a echouée car ". mysql_error() .".");

// on ferme la base
mysql_close($db);

?>
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">


<title>pagede reception</title>


</head>
<body>
<?php
$prenom=$_POST['prenom'];
$nom=$_POST['nom'];
$adresse=$_POST['adresse'];
$cp=$_POST['cp'];
$ville=$_POST['ville'];
$telfixe=$_POST['telfixe'];
$portable=$_POST['portable'];
$email=$_POST['email'];
$typeclient=$_POST['typeclient'];
$dejainvest=$_POST['dejainvest'];
$datecontact=$_POST['datecontact'];
$typebien=$_POST['typebien'];
$budget=$_POST['budget'];
$region=$_POST['region'];
$observations=$_POST['observations'];

/* puis faire la requete : */
$query = "INSERT INTO baseamphitrion VALUES('$prenom','$nom','$adresse','$cp','$telfixe','$telfixe','$portable','$fax','$email', '$typeclient','$dejainvest','$datecontact', '$typebien','$budget','$budget','$region','$observations' )";
?>



</body>

</html>

J'ai recopié et adapté ces scripts de différents tutos.

Question subsidiaire si vous avez le temps !: comment faire quand il y a plusieurs tables dans la base ???


Merci pour votre aide

3 réponses

sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
26 juin 2008 à 23:54
Bonsoir,
Je pense que ton soucis vient du fait que tu fait ta requête avant de déclarer ton $query, d'où ton message d'erreur de "query was empty". D'autre part je me permet de te rajouter un else {}, en effet dans le script que tu as donné tu aurais eu plusieurs messages d'erreurs s'additionnant en cas de mauvais mysql_select_db
Correction :
Page 2 (merci.php) page de reception

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<?php

// parametres d'access
$base='baseamphitrion';
$login='baseamphitrion';
$pwd= 'mot de passe';
$host="mon serveur";

// connection au serveur
$db=mysql_connect($host, $login, $pwd) or die('Erreur de connexion');

if(!$db)
{
print "erreur connection $db";
exit;
}

// on choisit la bonne base
if(!mysql_select_db($base,$db))
{
  print "erreur ".mysql_error()."<br>";
  mysql_close($db);
  exit;
}
else
{ 
  
  ?>
  <html>

  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">


  <title>pagede reception</title>


  </head>
  <body>
  <?php
  $prenom=$_POST['prenom'];
  $nom=$_POST['nom'];
  $adresse=$_POST['adresse'];
  $cp=$_POST['cp'];
  $ville=$_POST['ville'];
  $telfixe=$_POST['telfixe'];
  $portable=$_POST['portable'];
  $email=$_POST['email'];
  $typeclient=$_POST['typeclient'];
  $dejainvest=$_POST['dejainvest'];
  $datecontact=$_POST['datecontact'];
  $typebien=$_POST['typebien'];
  $budget=$_POST['budget'];
  $region=$_POST['region'];
  $observations=$_POST['observations'];

  /* puis faire la requete : */
  $query = "INSERT INTO baseamphitrion VALUES('$prenom','$nom','$adresse','$cp','$telfixe','$telfixe','$portable','$fax','$email'­, '$typeclient','$dejainvest','$datecontact', '$typebien','$budget','$budget','$region','$observations' )";
  $resultat = mysql_query($query)
  or die("L'insertion a echouée car ". mysql_error() .".");

  // on ferme la base
  mysql_close($db);
}
?>



</body>

</html> 
Voilà ça devrait fonctionner comme ça.
Je me permet quand même de te dire que ton script tel quel est très vulnérable. En effet, il est plus que recommandé d'échapper toutes les variables reçues par POST et GET. Je te laisse te renseigner tout seul là dessus car c'est comme ça que l'on apprend le mieux mais tu verras c'est vraiment pas compliquer.

Et sinon j'ai pas compris la question subsidiaire... Comment faire quoi si l'on a plusieurs tables ? Si c'est l'insertion, tu peux tout simplement faire plusieurs requêtes à se suivre, la première pour insérer dans la table 1, la seconde pour insérer dans la table 2, etc

En espérant que j'ai été assez clair.
0
amphitrion Messages postés 6 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 28 juin 2008
27 juin 2008 à 16:00
Bonjour et merci pour ta réponse;

J'obtiens maintenant la réponse suivante: "L'insertion a échouée car Table 'baseamphitrion.baseamphitrion' doesn't exist."

/* puis faire la requete : */
$query = "INSERT INTO baseamphitrion

c'est à ce niveau que cela pourrait clocher ?


En ce qui concerne ma question sur les tables, je voulais dire que ma base comporte 2 tables différentes et que je me demandais si il ne fallait pas préciser dans le script le nom de la table qui contient les champs concernés.

Jai essayé INSERT INTO baseamphitrion clients (nom de ma table) et j'ai reçu:

"L'insertion a echouée car You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'clients VALUES('Michel','COPIN','32 rue d\'hébuterne','59126','0320465020','0613' at line 1."

Merci pour ton aide.

je précise aussi que je débute en php et que la première partie du script m'a été donné par mon hébegeur online.net
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
28 juin 2008 à 00:31
Pour ton premier message d'erreur, ça vient du fait que, apparemment, tu n'as pas de table "baseamphitrion" dans ta base "baseamphitrion". Dans la requète INSERT INTO, tu dois mettre le nom de la table dans laquelle tu veux insérer tes données et non le nom de la base de données que tu utilises. Ce nom tu le donnes déja avec le "mysql_select_db".

Et pour la deuxième partie, en fait c'est exactement la même réponse que la première partie ;) Tu mets le nom de la table dans laquelle tu veux insérer tes données après le INSERT INTO
Ex :
  $query = "INSERT INTO clients VALUES('$prenom','$nom','$adresse','$cp','$telfixe','$telfixe','$portable','$fax','$email'­­, '$typeclient','$dejainvest','$datecontact', '$typebien','$budget','$budget','$region','$observations' )";

une petite documentation si je ne suis pas clair : ici
0
amphitrion Messages postés 6 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 28 juin 2008
28 juin 2008 à 00:44
Merci beaucoup pour tes conseils; cela fonctionne maintenant!
0
sly-bzh Messages postés 415 Date d'inscription jeudi 10 janvier 2008 Statut Membre Dernière intervention 5 décembre 2009 118
28 juin 2008 à 11:09
De rien ce fut un plaisir
0