Page 1 sur 1

Enregistrement des infos d'un formulaire dans une BDD / EDIT

Posté : 15 juin 2009, 09:52
par Cindy80s
Bonjour tout le monde !

J'ai deux fichiers. Le premier (particuliers.php) est un formulaire :
<?php
session_start();
?>


<!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>Particuliers</title>

<link href="../style/style.css" rel="stylesheet" type="text/css" />
<link href="../style/layout.css" rel="stylesheet" type="text/css" />

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


<script language="JavaScript">
//La fonction JavaScript vérifie si les champs obligatoires du formulaire ont été bien remplis 
function envoie(formulaire) {
if ( (document.getElementById('nom').value.length>0)
&&(document.getElementById('prenom').value.length>0)
&&(document.getElementById('fontion').value.length>0)
&&(document.getElementById('telephone').value.length>0)
&&(document.getElementById('fax').value.length>0)
&&(document.getElementById('adresse').value.length>0)
&&(document.getElementById('code_postal').value.length>0)
&&(document.getElementById('ville').value.length>0)
 ){
formulaire.submit();
} else
alert('Vous devez remplir tous les champs !');
}
</script>

</head>


<body id="page1">
<div class="min_width">
<div id="site_center">
<div id="main">

	<!-- Contenu -->
	<div id="content">
    <div class="line_1"></div>
        <p align="center" class="sstitre">Particuliers</p>
        <div class="line_1"></div>
        <div class="indent">
        <p align="center">&nbsp;</p>
        
        <form action="enregistrement_particuliers.php" method="post" name="form_contacts" id="form_contacts">
				
			<label for="nom">Nom du demandeur :</label> <input type="text" name="nom" id="nom" /> <br>
			<label for="prenom">Prénom du demandeur :</label> <input type="text" name="prenom" id="prenom" /> <br>
			<label for="fonction">Fonction du demandeur :</label> <input type="text" name="fonction" id="fonction" /><br /> 
			<label for="telephone">Téléphone :</label> <input type="text" name="telephone" id="telephone" /> <br>
			<label for="fax">Fax :</label> <input type="text" name="fax" id="fax" /> <br>
			<label for="adresse1">Adresse :</label> <input type="text" name="adresse" id="adresse" /><br /> 
			<label for="code_postal">Code postal :</label> <input type="text" name="code_postal" id="code_postal" /> <br>
			<label for="ville">Ville :</label> <input type="text" name="ville" id="ville" /> <br>
			<label for="adresse_facturation">Adresse de facturation*:</label> <input type="text" name="adresse_facturation" id="adresse_facturation" /><br /> 
			
			<br> <br>
			<p align="left"> <input type="submit" value="se connecter" /> </p>
			
			<br><br><br>
			*<i>si différente de l'adresse physique</i>
			
		</form>
			
        </div>

        
	<div id="Layer1" style="position:absolute; left:381px; top:26px; width:48px; height:37px; z-index:1"><a href="../Configurateur_de_site/choix.php"><img src="../images/retour.jpg" alt="" width="19" height="23" /></a></div>
	</div>
	
	<!-- footer -->
</div>	
</div>
</div>
</body>
</html>


Et un fichier (enregistrement_particuliers) qui est censé transférr les infos du formulaire dans la BDD :
<?php
session_start();
?>


<!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>Enregistrement particuliers</title>

<link href="../style/style.css" rel="stylesheet" type="text/css" />
<link href="../style/layout.css" rel="stylesheet" type="text/css" />

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

<script language="JavaScript">
//La fonction JavaScript vérifie si les champs obligatoires du formulaire ont été bien remplis
function envoie(formulaire) {
if ( (document.getElementById('nom').value.length>0)
&&(document.getElementById('prenom').value.length>0)
&&(document.getElementById('fontion').value.length>0)
&&(document.getElementById('telephone').value.length>0)
&&(document.getElementById('fax').value.length>0)
&&(document.getElementById('adresse').value.length>0)
&&(document.getElementById('code_postal').value.length>0)
&&(document.getElementById('ville').value.length>0)
 ){
formulaire.submit();
} else
alert('Vous devez remplir tous les champs !');
}
</script>

</head>


<body id="page1">
<div class="min_width">
<div id="site_center">
<div id="main">

	<!-- Contenu -->
	<div id="content">
    <div class="line_1"></div>
        <p align="center" class="sstitre">Enregistrement particuliers</p>
        <div class="line_1"></div>
        <div class="indent">
        <p align="center">&nbsp;</p>
        
        
<?php

if(isset($_POST['nom'])) { // Si on envoie le formulaire

// Connexion à la base de données "externalisation"
mysql_connect("localhost", "root");
mysql_select_db("configurateur_de_site");

// On récupère les $_POST et on en fait des variables
$_POST = array_map('mysql_real_escape_string', $_POST); // on applique mysql_real_escape_string sur tout le tableau $_POST
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$fonction = $_POST['fonction'];
$telephone = $_POST['telephone'];
$fax = $_POST['fax'];
$adresse = $_POST['adresse'];
$code_postal = $_POST['code_postal'];
$ville = $_POST['ville'];
$adresse_facturation = $_POST['adresse_facturation']

// On part du principe que le nom d'utilisateur est unique, on doit vérifier qu'il n'existe pas déjà ans la table
$requete = "SELECT COUNT(*) AS nb FROM formulaire WHERE utilisateur = '". $nom ."'"; // On crée la requête
$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // On exécute la requête
$donnees = mysql_fetch_array($resultat); // On crée un tableau pour récupérer la valeur que renvoie la requête
$nombre = $donnees['nb']; // On crée une variable qui contiendra le nombre de résultats renvoyé par la requête

	if($nombre == 0) { // Si la variable renvoie 0 c'est que le nom d'utilisateur n'existe pas dans la table donc on peut l'enregistrer
	$requete = "INSERT INTO formulaire VALUES('". $nom ."', '". $prenom ."', 1, '". $fonction ."', '". $telephone ."', '". $fax ."', '". $adresse ."', '". $code_postal ."', '". $ville ."', '". $adresse_facturation ."')";
	$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
	echo 'Enregistrement effectué. Vous êtes maintenant inscrit. Merci !<br />';
	
// On crée le message email
$msg1 = 'Merci '. $nom .' '. $prenom . pour votre inscription et bienvenue sur le site !;//Message pour le nouveau membre 
$msg2 = 'Un nouveau membre s\'est inscrit: '. $nom;  //Message pour le webmaster

$recipient = '[email protected]'; //Adresse mail du webmaster
ini_set("sendmail_from",$recipient);
$subject = 'Formulaire d\'inscription'; //On met le sujet du mail

$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$header .= "From:  ". $email ."";


	$mail1 = mail($recipient, $subject, $msg2, $header); //Mail envoyé au webmaster 
	$mail2 = mail($email, $subject, $msg1, $header); //Mail envoyé au nouveau membre
		if($mail1 && $mail2 == true) {
		echo 'Vous allez recevoir un mail avec vos informations.';
		} else {
		echo 'Erreur dans l\'envoi du mail .';
		}
	} else { // Sinon ce nom existe déjà, on insert aucune donnée
	echo 'L\'utilisateur '. $nom .' existe déjà. Veuillez vous réinscrire sous un autre nom d\' utilisateur.';
	}

mysql_close(); // On ferme la connexion
}

?>	

 
		</div>

        
	<div id="Layer1" style="position:absolute; left:381px; top:26px; width:48px; height:37px; z-index:1"><a href="./../index.php"><img src="../images/retour.jpg" alt="" width="19" height="23" /></a></div>
	</div>
	
	<!-- footer -->
</div>	
</div>
</div>
</body>
</html>
Mais ça ne veut pas s'enregistrer dans ma BDD (phpMyAdmin) ...
Il me trouve une erreur sur la ligne 76 de mon deuxieme fichier (enregistrement_particuliers)

Quelqu'un peut-il m'aider?


PS : Est-ce que le problème ne viendrait pas du fait que dans ma BDD "configurateur_de_site" il y ait 2 tables : une "particulier" ( c'est sur celle ci que je travaille actuellement ) et une "professionnel" dans lesquelles on retrouve quasiment tous les mêmes champs avec des noms identiques...
Je viens d'y penser... Mais si le prob' vient de là, je ne sais pas comment y remédier !


<souligne>EDIT</souligne> : J'ajoute ci après la structure de ma BDD "configurateur_de_site", table "particuliers :
--
-- Structure de la table `particuliers`
--

CREATE TABLE IF NOT EXISTS `particuliers` (
`Nom_du_demandeur` text NOT NULL,
`Prenom_du_demandeur` text NOT NULL,
`Fonction_du_demandeur` text NOT NULL,
`Telephone` int(10) NOT NULL,
`Fax` int(10) NOT NULL,
`Adresse` varchar(100) NOT NULL,
`Code postal` int(5) NOT NULL,
`Ville` text NOT NULL,
`Adresse_facturation` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `particuliers`
--

Et les modififications apportés à mon code :
// On part du principe que le nom d'utilisateur est unique, on doit vérifier qu'il n'existe pas déjà ans la table
<gras>$requete = "SELECT COUNT(*) AS nb FROM particuliers WHERE nom_du_demandeur = '". $nom ."'"; // On crée la requête</gras>$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // On exécute la requête
$donnees = mysql_fetch_array($resultat); // On crée un tableau pour récupérer la valeur que renvoie la requête
$nombre = $donnees['nb']; // On crée une variable qui contiendra le nombre de résultats renvoyé par la requête

        if($nombre == 0) { // Si la variable renvoie 0 c'est que le nom d'utilisateur n'existe pas dans la table donc on peut l'enregistrer
        $requete = "INSERT INTO particuliers VALUES('". $nom ."', '". $prenom ."', 1, '". $fonction ."', '". $telephone ."', '". $fax ."', '". $adresse ."', '". $code_postal ."', '". $ville ."', '". $adresse_facturation ."')";
        $resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
        echo 'Enregistrement effectué. Vous êtes maintenant inscrit. Merci !<br />';
Mais la ligne en gras pose problème!

Posté : 15 juin 2009, 10:06
par lux
Salut. Au hasard, j'ai pas vérifié la ligne, mais déjà :

$adresse_facturation = $_POST['adresse_facturation']

il manque le ; !

Posté : 15 juin 2009, 10:10
par Cindy80s
Bien vu :D :D Je te remercie !!

Maintenant il me donne cette erreur :

Parse error: parse error in C:\wamp\www\ITservices\Configurateur_de_site\enregistrement_particuliers.php on line 87


Donc c'est sur cette ligne là ( celle en gras ) :

// On crée le message email
$msg1 = 'Merci '. $nom .' '. $prenom . pour votre inscription et bienvenue sur le site !;//Message pour le nouveau membre $msg2 = 'Un nouveau membre s\'est inscrit: '. $nom; //Message pour le webmaster

Je pense qu'il y a un problème de ponctuation encore un coup ( ma spécialité ) ...

EDIT :

Maintenant c'est sur cette ligne :
$msg2 = 'Un nouveau membre s\'est inscrit sur le site. Il s\'agit de : '. $nom .' Bienvenue!;'  //Message pour le webmaster
:lol:

Posté : 15 juin 2009, 10:16
par lux
Même chose le point virgule doit être en dehors des ' ' :P

Posté : 15 juin 2009, 10:18
par Cindy80s
Yessss :D

Quand y'en a plus, y'en a encore ...

"ERREUR SQL : INSERT INTO particuliers VALUES('t', 't', 1, 't', 't', 't', 't', 't', 't', '')Column count doesn't match value count at row 1"

Comprends pas bien :shock:

Posté : 15 juin 2009, 10:22
par lux
Tu écris :
$requete = "INSERT INTO formulaire VALUES('". $nom ."', '". $prenom ."', 1, '". $fonction ."', '". $telephone ."', '". $fax ."', '". $adresse ."', '". $code_postal ."', '". $ville ."', '". $adresse_facturation ."')";
Mais il faut :

Code : Tout sélectionner

INSERT INTO "nom de table" ("colonne 1", "colonne 2", ...) VALUES ("valeur 1", "valeur 2", ...)

Posté : 15 juin 2009, 10:40
par Cindy80s
J'ai fait :
if($nombre == 0) { // Si la variable renvoie 0 c'est que le nom d'utilisateur n'existe pas dans la table donc on peut l'enregistrer
	$requete = INSERT INTO "particuliers" ("nom_du_demandeur", "prenom_du_demandeur", "fonction_du_demandeur", "telephone", "fax", "adresse", "code_postal", "ville", "adresse_facturation")
			  VALUES ("nom", "prenom", "fonction", "telephone", "fax", "adresse", "code_postal", "ville", "adresse_facturation");
	$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
	echo 'Enregistrement effectué. Vous êtes maintenant inscrit. Merci !<br />';
Et ça me met :

Parse error: parse error in C:\wamp\www\ITservices\Configurateur_de_site\enregistrement_particuliers.php on line 82

Toujours une erreur dans la requête apparemment ...

Posté : 15 juin 2009, 10:46
par lux
Oui, il faut lui préciser dans quelle colonnes insérer quelles valeurs, sinon il ne saura pas le faire. :wink:

Posté : 15 juin 2009, 10:49
par Cindy80s
Ok Ok mais je comprends pas bien comment le faire ...
Je pensais qu'avec ce que tu m'avais donné, ça lui indiquait déjà tout ça ...

Posté : 15 juin 2009, 10:58
par lux
Non, ce que je disais c'était pour confirmer que c'était ça qu'il fallait faire.

Bon, je vois ou est le problème, ça ne va pas du tout niveau concaténation et écriture propre de la requête. Ce message te dit qu'il y a une erreur côté php :

Code : Tout sélectionner

Parse error: parse error ... etc..
Les messages :

Code : Tout sélectionner

ERREUR SQL : etc...
te disent plutôt qu'il y a une erreur du côté MYSQL.

Donc ici il y a un problème niveau php, tu n'as pas bien placé tes guillemets.

Pour mieux comprends, lis ce tuto : http://www.phpdebutant.org/article55.php

Et refais moi la requete Mysql en plaçant un peu mieux les guillemets. Si ça ne va pas toujours pas reposte ta nouvelle requête je regarderais. :wink:

Posté : 15 juin 2009, 11:14
par Cindy80s
Excuse moi de te re-re-re-redéranger mais le tuto m'éclaircit pas beaucoup :oops:

J'ai tout séparé par des points :
INSERT INTO "particuliers" ("nom_du_demandeur" . "prenom_du_demandeur" . "fonction_du_demandeur" . "telephone" . "fax" . "adresse" . "code_postal" . "ville" . "adresse_facturation")
VALUES ("nom" . "prenom" . "fonction" . "telephone" . "fax" . "adresse" . "code_postal" . "ville" . "adresse_facturation");

Mais je comprends pas bien l'histoire des quotes ... Simples ou doubles .
Pour moi c'est des doubles qu'il faut mais vu que ça marche pas c'est peut être des simples ...
J'imagine .

Tu veux pas m'aider encore un chouia ?

Posté : 15 juin 2009, 11:24
par lux
Pour faire simple et rapide je te donne un exemple que j'ai trouvé dans la FAQ du forum de phpfrance :

http://www.phpfrance.com/forums/voir_sujet-242539.php
$requete = "INSERT INTO membres(pseudo,pass,date_enregistrement) VALUES('".$nom."', '".$password."', NOW())";
Tu vois comment placer les guillemets, les points etc..
Il ne faut pas oublier que $requete doit contenir une chaîne au final. Donc déjà, double guillemets devant et derrière. Ensuite à l'intérieur, quand on veut intégrer des variables, il faut concaténer avec des points. Et les guillemets simples autour des VALUES sont pour Mysql. :wink:

Il suffit maintenant d'adapter à ton problème 8-)

Posté : 15 juin 2009, 11:54
par Cindy80s
Je te remercie, c'est beaucoup plus clair maintenant !!!
Je vais voir pour adapter ça à mon code et je te dis quoi :D


EDIT : Ca marche !!!! Merci beaucoup !!! Tu m'as vraiment beaucoup aidée !
J'ai juste un beug dans l'envoi des mails au webmaster + nouveau membre mais ce n'est rien

MERCI MERCI MERCI :D :D


EDIT 2 : J'ai refait un formulaire quasi identique ( il y a juste des champs en plus ) pour ma table "professionnels" mais il ne marche pas, peux tu me dire si tu vois l'erreur STP ?
<?php
session_start();
?>


<!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>Enregistrement professionnels</title>

<link href="../style/style.css" rel="stylesheet" type="text/css" />
<link href="../style/layout.css" rel="stylesheet" type="text/css" />

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

<script language="JavaScript">
//La fonction JavaScript vérifie si les champs obligatoires du formulaire ont été bien remplis 
function envoie(formulaire) {
if ( (document.getElementById('raison_sociale').value.length>0)
&&(document.getElementById('siret').value.length>0)
&&(document.getElementById('nom').value.length>0)
&&(document.getElementById('prenom').value.length>0)
&&(document.getElementById('fonction').value.length>0)
&&(document.getElementById('telephone').value.length>0)
&&(document.getElementById('fax').value.length>0)
&&(document.getElementById('adresse').value.length>0)
&&(document.getElementById('code_postal').value.length>0)
&&(document.getElementById('ville').value.length>0)
){
formulaire.submit();
} else
alert('Vous devez remplir tous les champs !');
}
</script>

</head>


<body id="page1">
<div class="min_width">
<div id="site_center">
<div id="main">

	<!-- Contenu -->
	<div id="content">
    <div class="line_1"></div>
        <p align="center" class="sstitre">Enregistrement professionnels</p>
        <div class="line_1"></div>
        <div class="indent">
        <p align="center">&nbsp;</p>
        
        
<?php

if(isset($_POST['nom'])) { // Si on envoie le formulaire

// Connexion à la base de données "configurateur_de_site"
mysql_connect("localhost", "root");
mysql_select_db("configurateur_de_site");

// On récupère les $_POST et on en fait des variables
$_POST = array_map('mysql_real_escape_string', $_POST); // on applique mysql_real_escape_string sur tout le tableau $_POST
$raison_sociale = $_POST['raison_sociale'];
$siret = $_POST['siret'];
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$fonction = $_POST['fonction'];
$telephone = $_POST['telephone'];
$fax = $_POST['fax'];
$adresse = $_POST['adresse'];
$code_postal = $_POST['code_postal'];
$ville = $_POST['ville'];
$adresse_facturation = $_POST['adresse_facturation'];

// On part du principe que le nom d'utilisateur est unique, on doit vérifier qu'il n'existe pas déjà ans la table
$requete = "SELECT COUNT(*) AS nb FROM professionnels WHERE nom_du_demandeur = '". $nom ."'"; // On crée la requête
$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // On exécute la requête
$donnees = mysql_fetch_array($resultat); // On crée un tableau pour récupérer la valeur que renvoie la requête
$nombre = $donnees['nb']; // On crée une variable qui contiendra le nombre de résultats renvoyé par la requête

	if($nombre == 0) { // Si la variable renvoie 0 c'est que le nom d'utilisateur n'existe pas dans la table donc on peut l'enregistrer
	$requete = $requete = "INSERT INTO professionnels (raison_sociale,siret,nom_du_demandeur,prenom_du_demandeur,fonction_du_demandeur,telephone,fax,adresse,code_postal,ville,adresse_facturation)
	VALUES('".$raison_sociale."', '".$siret."', '".$nom."', '".$prenom."', '".$fonction."', '".$telephone."', '".$fax."', '".$adresse."', '".$code_postal."', '".$ville."', '".$adresse_facturation."')"; 
	$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
	echo 'Enregistrement effectué. Vous êtes maintenant inscrit. Merci !<br />';
	
// On crée le message email
$msg1 = 'Merci '. $nom .' '. $prenom .' pour votre inscription et bienvenue sur le site !';//Message pour le nouveau membre 
$msg2 = 'Un nouveau membre s\'est inscrit sur le site.'; //Message pour le webmaster

$recipient = '[email protected]'; //Adresse mail du webmaster
ini_set("sendmail_from",$recipient);
$subject = 'Formulaire d\'inscription'; //On met le sujet du mail

$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$header .= "From:  ". $email ."";


	$mail1 = mail($recipient, $subject, $msg2, $header); //Mail envoyé au webmaster 
	$mail2 = mail($email, $subject, $msg1, $header); //Mail envoyé au nouveau membre
		if($mail1 && $mail2 == true) {
		echo 'Vous allez recevoir un mail avec vos informations.';
		} else {
		echo 'Erreur dans l\'envoi du mail .';
		}
	} else { // Sinon ce nom existe déjà, on insert aucune donnée
	echo 'L\'utilisateur '. $nom .' existe déjà. Veuillez vous réinscrire sous un autre nom d\' utilisateur.';
	}

mysql_close(); // On ferme la connexion
}

?>	

 
		</div>

        
	<div id="Layer1" style="position:absolute; left:381px; top:26px; width:48px; height:37px; z-index:1"><a href="./../index.php"><img src="../images/retour.jpg" alt="" width="19" height="23" /></a></div>
	</div>
	
	<!-- footer -->
</div>	
</div>
</div>
</body>
</html>
 

Posté : 16 juin 2009, 21:11
par lux
Mmh, dis moi quel est le message d'erreur, ou qu'est-ce qui ne marche pas :P

Je ne suis pas devin :wink: