Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Résolu] SQL : Lier mon formulaire d'inscription à ma BDD

Formulaire en PHP, BDD PHPMyAdmin

Sujet résolu
Anonyme
26 mai 2009 à 10:57:56

Bonjour tout le monde,

Je rencontre un petit problème avec mon formulaire d'inscription en pHp et ma BDD, je m'explique :

J'ai une première page (formulaire.php) qui permet d'avoir une page semblable à ça : http://img200.imageshack.us/my.php?image=formk.jpg et une deuxième page (envoi.php) qui est censé envoyé un mail au webmaster pour le prévenir de l'enregistrement d'un nouveau membre et un mail au nouveau membre avec ses informations (d'ailleurs ça ne marche pas non plus, cf : http://www.siteduzero.com/forum-83-403412-p1-erreur-dans-mon-formulaire-d-inscription.html).

Et je voudrais qu'une fois que l'utilisateur clique sur "valider" pour s'enregistrer sur le site, les informations qu'il a rentré s'inscrivent dans une BDD, ici je travaille avec PHPMyAdmin. Il faut donc que je lie mon formulaire d'inscription à ma BDD.
Je sais qu'il faut utiliser des variables de session, des requêtes SQL, connecter ma BDD, etc ... Mais étant donné que je suis débutante, tout ça est flou et je sais franchement pas par où commencer ...

Est ce que vous pourriez m'aider un peu ? Me donner les étapes dans le bon ordre ?

Merci d'avance !
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mai 2009 à 11:01:33

Tient ici y'a un petit truc pour apprendre a faire un espace membres !! y'en as surement des mieux !! faut chercher !! mais celui la tu vas comprendre comment faire !

http://www.phpdebutant.org/article47.php
  • Partager sur Facebook
  • Partager sur Twitter
26 mai 2009 à 11:04:37

As-tu potassé le cours pour apprendre les bases du PHP/SQL ?
Ce que tu veux faire est très simple (ça te rassure ?)
La première étape consiste à faire ton formulaire en HTML.
Puis récupérer les informations grâce à $_POST.
Il n'y a pas de session à utiliser (enfin si mais juste pour la connexion du membre) pour l'inscription.
Essaye déjà d'enregistrer les informations du formulaire en BDD et tu verras ensuite pour l'envoi des emails.

Je ne te donne pas volontairement la réponse pour que tu cherches un peu plus.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mai 2009 à 11:10:41

Merci Fecal-Matter mais ce qui me permet de me connecter à ma BDD je le met dans lequel de mes 2 fichiers : formulaire.php, envoi.php ou dans un nouveau carement ?

Desolation, oui j'ai les bases du PHP & SQL. Mon formulaire en HTML est déjà créé et j'ai mis des $_POST mais je ne vois vraiment pas comment faire pour qu'une fois qu'on valide, ça s'enregistre dans le BDD.

Si je connecte mon formulaire.php à ma BDD et que je me sers de ce tutorial là : http://www.siteduzero.com/tutoriel-3-1 [...] tml#ss_part_1 est ce que je vais dans le bon sens ?

Merci d'avance :-)
  • Partager sur Facebook
  • Partager sur Twitter
26 mai 2009 à 11:16:00

Oui tu vas dans le bon sens ;)
ce qui te permet de me connecter à ta BDD doit être avant toute requêtes, donc à toi de voir.
Personellement, je le met en tout début de page via une include, comme ça après plus besoin de m'occuper de ça ;)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mai 2009 à 11:23:01

Okkkk je l'ai donc mis dans mon "formulaire.php" tout en haut.

Dans les tutoriaux, j'ai vu ça :
<?php
mysql_connect("localhost", "mateo21", "mot_de_passe");
mysql_select_db("coursphp");

// On ajoute une entrée avec mysql_query
mysql_query("INSERT INTO jeux_video VALUES('', 'Battlefield 1942', 'Patrick', 'PC', '45', '50', '2nde guerre mondiale')");

mysql_close();
?>


Première question : Est ce que tout ça je peux le mettre en haut de mon formulaire.php ?
Deuxième question : Si je le mets en haut de mon formulaire.php est ce que quand je clique sur "valider" ça va se mettre dans ma BDD ?
Et dernière question : Dans l'exemple ci dessus les valeurs sont connues. Dans l'entrée qu'on veut ajouter on sait la valeur de l'ID, le nom du jeu, le possesseur, etc mais moi les futurs d'utilisateurs, mot de passe, email des gens je ne les connais pas donc comment je peux remédier à ça ?

Encore une fois merci à ceux & celles qui répondront à toutes mes questions
  • Partager sur Facebook
  • Partager sur Twitter
26 mai 2009 à 11:27:13

Voici un peu comment se compose le script :
<?php
// connexion à la base de données

// on récupère les $_POST et on en fait des variables et de préférence, on les protége avec mysql_real_escape_string()

// tu dois modifier la requête pour qu'elle s'adapte à ta table car je ne connais pas sa structure
$requete = "INSERT INTO table VALUES(...)";
$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
?>


Si tu bloques sur les conditions (récupération des $_POST) je peux t'aider.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mai 2009 à 13:29:51

Merci je vais essayer de me débrouiller avec ça et de chercher un peu par moi même et je reviendrai vers toi si je rame trop ...



EDIT :

Voilà ce que j'ai tenté, peux tu me dire s'il y a des erreurs et si c'est le cas où elles se trouvent STP ?


<?php

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


$nom = $_POST['nom'];
$mot_de_passe = $_POST['mot_de_passe'];
$email = $_POST['email'];
// On récupère les $_POST et on en fait des variables 


$requete = "INSERT INTO externalisation VALUES(", 'nom', 'mot_de_passe', 'email', ")";
$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // On exécute la requête

?>



Et aussi pourrais tu m'expliquer en gros à quoi sert : mysql_real_escape_string()

  • Partager sur Facebook
  • Partager sur Twitter
26 mai 2009 à 14:40:26

Essaye ce code :
<?php
mysql_connect("localhost", "root");
mysql_select_db("externalisation");
// Connexion à la base de données "externalisation"

$_POST = array_map('mysql_real_escape_string', $_POST); // on applique mysql_real_escape_string sur tout le tableau $_POST
$nom = $_POST['nom'];
$mot_de_passe = $_POST['mot_de_passe'];
$email = $_POST['email'];
// On récupère les $_POST et on en fait des variables 


$requete = "INSERT INTO externalisation VALUES('', '". $nom ."', '". $mot_de_passe ."', '". $email ."')";
$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // On exécute la requête
?>

En gros array_map te permet d'appliquer fonction sur tout un tableau. Et mysql_real_escape_string protège des injections SQL et failles XSS (il me semble) qui sont des types de failles...
Pourrais-tu me donner la structure de ta table externalisation s'il te plaît ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mai 2009 à 14:41:39

Tu entends quoi par "structure"? Rigole pas =D
Le nom des tables et tout ça?
  • Partager sur Facebook
  • Partager sur Twitter
26 mai 2009 à 14:45:11

Tu va dans phpMyAdmin, tu choisis ta table "externalisation" à gauche, tu cliques sur l'onglet "Exporter" puis en bas à droite "Exécuter". Tu copies le code généré dans les balises <.code type="sql">le code à copier</code>
La structure de ta table sert à connaître le nom des champs et leurs types.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mai 2009 à 16:57:38

-- phpMyAdmin SQL Dump
-- version 3.1.3.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Mar 26 Mai 2009 à 16:56
-- Version du serveur: 5.1.33
-- Version de PHP: 5.2.9-2

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Base de données: `externalisation`
--

-- --------------------------------------------------------

--
-- Structure de la table `formulaire`
--

CREATE TABLE IF NOT EXISTS `formulaire` (
`Utilisateur` varchar(200) NOT NULL,
`Mot_de_passe` varchar(200) NOT NULL,
`Autorisation` int(50) NOT NULL,
`Date_de_connexion` datetime NOT NULL,
`Email` varchar(100) NOT NULL,
PRIMARY KEY (`Utilisateur`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Contenu de la table `formulaire`
--
  • Partager sur Facebook
  • Partager sur Twitter
26 mai 2009 à 17:50:34

Ok merci alors je te propose de supprimer cette table car pas "bien faite". Alors je te propose le code suivant pour recréer ta table :

CREATE TABLE IF NOT EXISTS `formulaire` (
`id_utilisateur` int NOT NULL auto_increment,
`utilisateur` varchar(200) NOT NULL,
`mdp` varchar(200) NOT NULL,
`autorisation` int NOT NULL,
`date_connexion` int NOT NULL,
`email` varchar(100) NOT NULL,
PRIMARY KEY (`id_utilisateur`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

J'explique brièvement mes modifications :
- Les noms de champs en minuscules ;
- toujours mettre un id car unique (clé primaire) et en auto_increment afin de laisser la table gérer elle-même sa clé primaire ;
- la date en entier (nombre) car on y stockera le timestamp, si tu ne sais pas ce qu'est le timestamp je t'invite à jeter un coup d'œil ici.

Passons à la modification du script PHP :

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

$_POST = array_map('mysql_real_escape_string', $_POST); // on applique mysql_real_escape_string sur tout le tableau $_POST
$nom = $_POST['nom'];
$mot_de_passe = $_POST['mot_de_passe'];
$email = $_POST['email'];
// On récupère les $_POST et on en fait des variables
$date_actuelle = time(); // timestamp actuel


$requete = "INSERT INTO formulaire VALUES('', '". $nom ."', '". $mot_de_passe ."', 0, ". $date_actuelle .", '". $email ."')";
$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // On exécute la requête
echo 'Requête exécutée.';
?>


Essaye avec ça et dis-en moi des nouvelles.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mai 2009 à 9:13:08

Merci pour ton aide !

- J'ai bien modifié mes noms de champs en minuscules ;
- Je n'ai pas ajouté d'ID car la personne pour qui "je travaille" n'en veut pas, pour elle l'identifiant unique c'est le nom d'utilisateur ;
- Quant à la date je dois rester en "datetime"

Bon ensuite concernant le code PHP j'ai mis exactement celui que tu m'as donné et voici l'erreur :

Notice: Undefined index: nom in C:\wamp\www\ITservices\pages\envoi.php on line 7

Notice: Undefined index: mot_de_passe in C:\wamp\www\ITservices\pages\envoi.php on line 8

Notice: Undefined index: email in C:\wamp\www\ITservices\pages\envoi.php on line 9
ERREUR SQL : INSERT INTO formulaire VALUES('', '', '', 0, 1243408217, '')Column count doesn't match value count at row 1

Est ce que tu veux que je mette ici mon code tout entier ?
Au cas où l'erreur serait plus loin ...
  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2009 à 9:28:55

D'accord pour l'id. Si le nom d'utilisateur est unique, il faut alors faire la vérification qu'il n'existe pas déjà dans la table avant d'enregistrer les données.
Pourquoi préférer le DATETIME ? Je ne sais pas comment on l'enregistre, j'ai peut-être une idée mais pas bien pratique.
Au fait à quoi correspond le champ "autorisation ?".

Je te redonne le code PHP en fonction de ta table.

<?php
if(isset($_POST['nom'])) { // si on envoie le formulaire

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

// 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'];
$mot_de_passe = $_POST['mot_de_passe'];
$email = $_POST['email'];

// on part du principe que le nom d'utilisateur est unique, on doit vérifier que le nom passé dans le formulaire n'existe pas dans 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 ."', '". $mot_de_passe ."', '', '', '". $email ."')";
	$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
	echo 'Insertion effectuée.';
	} else { // sinon ce nom existe déjà on insert aucune donnée
	echo 'L\'utilisateur '. $nom .' existe déjà.';
	}

mysql_close(); // on a terminé on ferme la connexion
}
?>


Je n'ai entré aucune donnée pour le champ autorisation et date_connexion. J'espère qu'avec les commentaires tu comprendras.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mai 2009 à 9:34:12

D'accord je te remercie beaucoup, je vais essayer de m'en sortir.

Alors concernant la date de connexion : il faut que j'enregistre dans la BDD la date à chaque fois que l'utilisateur se connecte sur le site et je mets "datetime" parce que c'est ce que veut la personne pour qui je bosse ... Au pire s'il n'y a que ça qui bloque c'est rien
Pour le champs autorisation : on met 1 par défault et si on veut faire en sorte que l'utilisateur ne soit plus autorisé à accèder au site on met 0

Bon je vais voir pour le code php maintenant ;)


EDIT :

Voici la liste des erreurs ( elles sont inépuisables --' ) :

Notice: Undefined index: nom in C:\wamp\www\ITservices\pages\envoi.php on line 38

Notice: Undefined index: mot_de_passe in C:\wamp\www\ITservices\pages\envoi.php on line 39

Notice: Undefined index: email in C:\wamp\www\ITservices\pages\envoi.php on line 40

Warning: mail() [function.mail]: SMTP server response: 504 <you@yourdomain>: Sender address rejected: need fully-qualified address in C:\wamp\www\ITservices\pages\envoi.php on line 53

Warning: mail() [function.mail]: SMTP server response: 504 <you@yourdomain>: Sender address rejected: need fully-qualified address in C:\wamp\www\ITservices\pages\envoi.php on line 54

Merci.
Votre formulaire a bien été envoyé!


Je te joins tout mon code, étant donné que maintenant l'erreur est plus bas :

<?php
if(isset($_POST['nom'])) { // si on envoie le formulaire

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

// 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'];
$mot_de_passe = $_POST['mot_de_passe'];
$email = $_POST['email'];

// on part du principe que le nom d'utilisateur est unique, on doit vérifier que le nom passé dans le formulaire n'existe pas dans 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 ."', '". $mot_de_passe ."', '', '', '". $email ."')";
	$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
	echo 'Insertion effectuée.';
	} else { // sinon ce nom existe déjà on insert aucune donnée
	echo 'L\'utilisateur '. $nom .' existe déjà.';
	}

mysql_close(); // on a terminé on ferme la connexion
}
?>




<?php

//On récupère les valeurs du formulaire
$nom = $_POST['nom'];
$mot_de_passe = $_POST['mot_de_passe'];
$email = $_POST['email'];


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

$recipient = "blabla@blabla.fr"; //Adresse mail du webmaster
$subject = "Formulaire d'inscription"; //On met le sujet du mail

$mailheaders = "From: Mon site web<> \n"; //Depuis où il a été posté


mail($recipient, $subject, $msg2, $mailheaders); //Mail envoyé au webmaster 
mail($email, $subject, $msg1, $mailheaders); //Mail envoyé au nouveau membre


echo "<HTML><HEAD>";
echo "<TITLE>Formulaire envoyé!</TITLE></HEAD><BODY>";
echo "<H2 align=center>Merci.". htmlspecialchars($nom)." </H2>";
echo "<P align=center>";
echo "Votre formulaire a bien été envoyé!</P>";
echo "</BODY></HTML>";

?>

  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2009 à 10:25:39

Tu te mélanges un peu les pinceaux. Faudrait faire chaque chose en son temps, une fois que l'inscription s'est bien déroulée tu essayes l'envoi de mail. Tu te valides des étapes sinon tu vas te retrouver avec plein d'erreurs et c'est vite le bordel.

Pour que l'envoi de mail fonctionne, l'adresse doit être valide. Tu as mis $mailheaders = "From: Mon site web<> \n"; or pour le from il faut mettre une adresse.

Essaye avec ce code :

<?php
if(isset($_POST['nom'])) { // si on envoie le formulaire

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

// 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'];
$mot_de_passe = $_POST['mot_de_passe'];
$email = $_POST['email'];

// on part du principe que le nom d'utilisateur est unique, on doit vérifier que le nom passé dans le formulaire n'existe pas dans 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 ."', '". $mot_de_passe ."', '', '', '". $email ."')";
	$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
	echo 'Insertion effectuée.<br />';
	
	// on crée le message email:
	$msg1 = 'Merci pour votre inscription et bienvenue sur le site ! Votre identifiant est '. $nom .' et votre mot de passe est '. $mot_de_passe; //Message pour le nouveau membre 
	$msg2 = 'Un nouveau membre s\'est inscrit: '. $nom;  //Message pour le webmaster

	$recipient = 'blabla@blabla.fr'; //Adresse mail du webmaster
	$subject = 'Formulaire d\'inscription'; //On met le sujet du mail

	$mailheaders = 'From: '. $email; //Depuis où il a été posté


	$mail1 = mail($recipient, $subject, $msg2, $mailheaders); //Mail envoyé au webmaster 
	$mail2 = mail($email, $subject, $msg1, $mailheaders); //Mail envoyé au nouveau membre
		if($mail1 && $mail2 == true) {
		echo 'Mails envoyés.';
		} else {
		echo 'Mails non envoyés.';
		}
	} else { // sinon ce nom existe déjà on insert aucune donnée
	echo 'L\'utilisateur '. $nom .' existe déjà.';
	}

mysql_close(); // on a terminé on ferme la connexion
}
?>


Des questions : les mots de passe ne sont pas cryptés ? C'est moyen pour la sécurité là si quelqu'un arrive dans la base de données il a les mots de passe de tout le monde.
Tes paramètres SMTP pour l'envoi de mail sont configurés dans le php.ini ? Tu sais comment faire ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mai 2009 à 10:29:08

Oui je sais que je me mélange complètement les pinceaux --'
Mais y'a tellement d'erreurs qui sortent de partout que je m'en sors franchement pas

Alors pour les paramètres SMTP oui je les ai modifié dans php.ini, j'ai noté ça :
[mail function]
; For Win32 only.
SMTP = smtp-msa.orange.fr
smtp_port = 587
C'est ce que j'ai trouvé sur google ( ce sont ceux d'Orange, mon FAI )

Pour le cryptage des mots de passe, je vais devoir le faire aussi une fois que tout ça fonctionnera =D

Bon j'essaye à nouveau le code que tu viens de me donner, merci !!!


EDIT :
Il ne me met plus aucune erreur ! C'est déjà un bon point !
Ca prouve aussi que contrairement à moi le PHP ça te connait =D

Bon par contre je reçois pas d'email comme quoi il y a un nouveau membre d'inscrit et idem pour le nouveau membre, il ne reçoit rien
Et visiblement dans PHPMyAdmin il n'y a rien non plus ...
  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2009 à 10:49:45

Ok pour tes paramètres SMTP.

Ok il ne dit pas de message d'erreur mais est-ce qu'il donne des messages comme ceux indiqués dans le code ? Genre "Insertion effectuée." ? "Mails non envoyés" ? Faudrait que je sache pour savoir ce que fait PHP.
Pour les emails tu changes bien pour mettre de véritables adresses ? Et dans ton formulaire et dans ton code ? Parce que OK tu me caches l'email c'est normal mais pense à modifier pour pas laisser blabla@blabla.fr.
Dans la table formulaire (phpMyAdmin) il n'y a aucun enregistrement ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mai 2009 à 10:55:39

Alors oui à la place de "blabla" j'ai bien remis mon email et aussi dans "from" comme tu m'avais dit au dessus ...
Par contre ce qui est bizarre c'est qu'il ne dit plus "formulaire envoyé" ni quoi que ce soit quand je valide ...
Et dans PHPMyAdmin je ne vois pas de nouvel enregistrement non plus ... Il est écrit : "MySQL n'a retourné aucun enregistrement"
  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2009 à 11:07:12

Ok donc pourrais-tu me mettre le code HTML du formulaire s'il te plaît, il a y peut-être des erreurs dessus.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mai 2009 à 11:11:49

Oui le voici :

<?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>Formulaire d'inscription</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('mot_de_passe').value.length>0)
&&(document.getElementById('email').value.length>0)
 ){
formulaire.submit();
} else
alert('Il est impossible d\' envoyer votre formulaire tant que tous les champs n\'ont pas été remplis !');
}
</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">Formulaire d'inscription</p>
        <div class="line_1"></div>
        <div class="indent">
        <p align="center">&nbsp;</p>
        
        
			<form action="envoi.php" method="post" name="form_contacts" id="form_contacts">

	 		<label for="nom">Nom d'utilisateur :</label><input type="text" id="nom" /><br />
			<label for="mot_de_passe">Mot de passe :</label><input type="text" id="mot_de_passe" /><br />
			<label for="email">Email :</label><input type="text" id="email" /><br />
<br>
<br>
			<p align="left"> <input name="envoyer" type="button" id="envoyer" value="Envoyer" onClick="envoie(this.form)"> </p>
	   
			</form>
  
            </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>


En tout cas merci beaucoup pour ton aide, une fois qu'il n'y aura plus d'erreurs nul part je me pencherai à fond sur le code pour améliorer mes pauvres connaissances PHPiennes
  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2009 à 11:20:28

J'ai trouvé d'où vient l'erreur, elle est fondamentale dans le fonctionnement. Tu oublies le plus important, l'attribut name pour chaque input qui correspond au $_POST par la suite.

Exemple pour le champs nom :
<input type="text" name="nom" id="nom" />
Tu fais pareil pour mot de passe et email.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mai 2009 à 11:23:42

Bien je vais voir pour corriger ça, je te remercie =D



EDIT :

Insertion effectuée.

Warning: mail() [function.mail]: SMTP server response: 504 <you@yourdomain>: Sender address rejected: need fully-qualified address in C:\wamp\www\ITservices\pages\envoi.php on line 36

Warning: mail() [function.mail]: SMTP server response: 504 <you@yourdomain>: Sender address rejected: need fully-qualified address in C:\wamp\www\ITservices\pages\envoi.php on line 37
Mails non envoyés.

Les enregistrements s'effectuent dans la BDD !!! ENFIN !!

Pour la date, ça s'affiche comme ça : 0000-00-00 00:00:00
Mais je règlerai ce petit détail par la suite

Il reste juste le problème de l'envoi des mails (sur le fichier envoi.php pas sur le formulaire)

Merci encore pour ton aide !
  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2009 à 12:49:11

Ok bon je te redonne le code qui va te mettre ton datetime, ton champ autorisation à 1 puis j'ai modifié pour l'envoi de mails faut que tu essayes :

<?php
if(isset($_POST['nom'])) { // si on envoie le formulaire

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

// 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'];
$mot_de_passe = $_POST['mot_de_passe'];
$email = $_POST['email'];
$datetime = date('Y-m-d') .' '. date('H:i:s');

// on part du principe que le nom d'utilisateur est unique, on doit vérifier que le nom passé dans le formulaire n'existe pas dans 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 ."', '". $mot_de_passe ."', 1, '". $datetime ."', '". $email ."')";
	$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
	echo 'Insertion effectuée.<br />';
	
	// on crée le message email:
	$msg1 = 'Merci pour votre inscription et bienvenue sur le site ! Votre identifiant est '. $nom .' et votre mot de passe est '. $mot_de_passe; //Message pour le nouveau membre 
	$msg2 = 'Un nouveau membre s\'est inscrit: '. $nom;  //Message pour le webmaster

	$recipient = 'blabla@blabla.fr'; //Adresse mail du webmaster
	$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 'Mails envoyés.';
		} else {
		echo 'Mails non envoyés.';
		}
	} else { // sinon ce nom existe déjà on insert aucune donnée
	echo 'L\'utilisateur '. $nom .' existe déjà.';
	}

mysql_close(); // on a terminé on ferme la connexion
}
?>
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mai 2009 à 13:32:33

Insertion effectuée.

Warning: mail() [function.mail]: SMTP server response: 504 <you@yourdomain>: Sender address rejected: need fully-qualified address in C:\wamp\www\ITservices\pages\envoi.php on line 38

Warning: mail() [function.mail]: SMTP server response: 504 <you@yourdomain>: Sender address rejected: need fully-qualified address in C:\wamp\www\ITservices\pages\envoi.php on line 39
Mails non envoyés.


Yesssss l'heure ça marche !!!
Il reste juste le problème des mails ...
Le pb ne viendrait-il pas de php.ini ? J'ai mis les infos de cette page : http://assistance.orange.fr/1354.php?dub=2&
Ca avance tout doucement en tout cas, merci !
  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2009 à 13:43:58

Raaah ! Essaye ça :
<?php
if(isset($_POST['nom'])) { // si on envoie le formulaire

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

// 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'];
$mot_de_passe = $_POST['mot_de_passe'];
$email = $_POST['email'];
$datetime = date('Y-m-d') .' '. date('H:i:s');

// on part du principe que le nom d'utilisateur est unique, on doit vérifier que le nom passé dans le formulaire n'existe pas dans 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 ."', '". $mot_de_passe ."', 1, '". $datetime ."', '". $email ."')";
	$resultat = mysql_query($requete) or die('ERREUR SQL : '. $requete . mysql_error()); // on exécute la requête
	echo 'Insertion effectuée.<br />';
	
	// on crée le message email:
	$msg1 = 'Merci pour votre inscription et bienvenue sur le site ! Votre identifiant est '. $nom .' et votre mot de passe est '. $mot_de_passe; //Message pour le nouveau membre 
	$msg2 = 'Un nouveau membre s\'est inscrit: '. $nom;  //Message pour le webmaster

	$recipient = 'blabla@blabla.fr'; //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 'Mails envoyés.';
		} else {
		echo 'Mails non envoyés.';
		}
	} else { // sinon ce nom existe déjà on insert aucune donnée
	echo 'L\'utilisateur '. $nom .' existe déjà.';
	}

mysql_close(); // on a terminé on ferme la connexion
}
?>
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mai 2009 à 13:52:21

Toujours pas ...

Dans php.ini à cet endroit là :
[mail function]
; For Win32 only.
SMTP = smtp-msa.orange.fr
smtp_port = 587

; For Win32 only.
sendmail_from = blabla@orange.fr

J'ai mis l'email du webmaster, c'est bon ou pas ?
  • Partager sur Facebook
  • Partager sur Twitter
27 mai 2009 à 13:55:49

Moui mais c'est pas normal de le changer ici, ça veut dire que chaque email sera envoyé à cette adresse, or ce n'est pas ce qu'on veut. Moi ça marche et je ne mets pas mes adresses mail là-dedans.

Savais-tu qu'à chaque modification du php.ini il fallait redémarrer WAMP ? Clic gauche sur l'icône > Redémarrer les services.
Sinon les modifications ne sont pas prises en compte.
  • Partager sur Facebook
  • Partager sur Twitter