Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2007, 12h40   #1
Invité de passage
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 2
Points : 2
Par défaut [SQL] Page d'enregistrement des membres

Voila, je me suis mis a la création d'une page d'enregistrement des membres.
Et maintenant, je l'ai terminée, mais celle-ci ne correspond pas à mes attentes.

Voici le code source de la page :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
<?php
 
	if ($_POST['login'] != NULL AND $_POST['pass'] != NULL AND $_POST['repass'] != NULL AND $_POST['mail'] != NULL AND $_POST['remail'] != NULL AND $_POST['jour'] != NULL AND $_POST['mois'] != NULL AND $_POST['année'] != NULL AND $_POST['pass'] == $_POST['repass'] AND $_POST['mail'] == $_POST['remail'] AND $_POST['rules'] == on)
	{
 
		include("../includes/mysql.conf.php");
 
		$login = htmlentities($_POST['login'], ENT_QUOTES);
		$pass = md5(htmlentities($_POST['pass'], ENT_QUOTES));
		$repass = md5(htmlentities($_POST['repass'], ENT_QUOTES));
		$mail = htmlentities($_POST['mail'], ENT_QUOTES);
		$remail = htmlentities($_POST['remail'], ENT_QUOTES);
		$jour = htmlentities($_POST['jour'], ENT_QUOTES);
		$mois = htmlentities($_POST['mois'], ENT_QUOTES);
		$annee = htmlentities($_POST['annee'], ENT_QUOTES);
		$rules = true;
		$date = date(d/m/Y);
 
		function get_ip(){ 
		if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
		{ 
		$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
		} 
		elseif(isset($_SERVER['HTTP_CLIENT_IP']))
		{ 
		$ip = $_SERVER['HTTP_CLIENT_IP'];
		} 
		else
		{ 
		$ip = $_SERVER['REMOTE_ADDR'];
		} 
		return $ip;
		}
		$ip = get_ip();
 
		mysql_query("INSERT INTO membres VALUES('', '" . $login . "', '" . $pass . "', '" . $mail . "', '" . $jour . "', '" . $mois . "', '" . $annee . "', '" . $rules . "', '" . $date . "', '" . $ip . "')");
 
		if ($_POST['newsletter'] == on)
		{
			$newsletter = true;
		}
 
		else
		{
			$newsletter = false;
		}
 
		mysql_query("INSERT INTO newsletter VALUES('', '" . $mail . "')");
 
		mysql_close();
 
		header("Location: reg_confirm.php");
 
	}
 
	else
	{
		echo "Veuillez vérifier que vos pass et vos mails sont bien identiques.";
	}
 
 
?>
 
 
 
<form type="post" action="register.php" name="register">
<table><tr><td>Login : </td><td><input type="text" name="login" /></td></tr>
<tr><td>Pass : </td><td><input type="password" name="pass" /></td></tr>
<tr><td>Pass (confirmez) : </td><td><input type="password" name="repass" /></td></tr>
<tr><td>Mail : </td><td><input type="text" name="mail" /></td></tr>
<tr><td>Mail (confirmez) : </td><td><input type="text" name="remail" /></td></tr>
<tr><td>Date de naissance : </td><td><select name="jour">
    <option value="01">01</option>
    <option value="02">02</option>
    <option value="03">03</option>
    <option value="04">04</option>
    <option value="05">05</option>
    <option value="06">06</option>
    <option value="07">07</option>
    <option value="08">08</option>
    <option value="09">09</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
</select> 
 
<select name="mois">
    <option value="Janvier">Janvier</option>
    <option value="Février">Février</option>
    <option value="Mars">Mars</option>
    <option value="Avril">Avril</option>
    <option value="Mai">Mai</option>
    <option value="Juin">Juin</option>
    <option value="Juillet">Juillet</option>
    <option value="Août">Août</option>
    <option value="Septembre">Septembre</option>
    <option value="Octobre">Octobre</option>
    <option value="Novembre">Novembre</option>
    <option value="Décembre">Décembre</option>
</select>
 
<input type="text" name="annee" value="Année" /></td></tr></table><br>
<center><input name="newsletter" checked="checked" type="checkbox">Je souhaite reçevoir la newsletter quotidiène. (Facultatif - sans spams)<br>
<input name="rules" type="checkbox"> J'ai lu et accepte les conditions d'utilisations.<br><br>
<input type="submit" name="reg" value="S'enregistrer" /></center>
</form>
Pouvez-vous me dire ce qui n'est pas correcte dans mon script aussi bien de l'ordre technique que de celui de la sécurité ?

Merci d'avance.
NeO666Linux
NeO666Linux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 12h44   #2
Membre chevronné
 
Avatar de LeXo
 
Inscription : janvier 2004
Messages : 1 147
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2004
Messages : 1 147
Points : 782
Points : 782
prkoi?? ya une erreur ?? ou tu cherches a améliorer ton code ?
LeXo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 12h58   #3
Invité de passage
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 2
Points : 2
En fait oui, j'ai le message d'erreur, en cas de différence des mdp ou des mails, qui s'affiche

ensuite quand je replis le formulaire et que j'essaye de m'enregistrer, toutes les variables s'inscrivent dans l'url de la page et les données ne sont pas enregistrées dans la bdd

je précise que je suis un débutant en php...
NeO666Linux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 14h15   #4
Membre chevronné
 
Avatar de LeXo
 
Inscription : janvier 2004
Messages : 1 147
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2004
Messages : 1 147
Points : 782
Points : 782
ah bah poste ton message d'erreur ça sera plus simple pour comprendre d'ou vient le probleme
LeXo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 14h16   #5
Invité de passage
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 2
Points : 2
En fait mon message d'erreur n'était qu'une bête erreur de ma part mais maintenant c'est réglé.

J'ai modifié mon script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
 
	if ($_POST['login'] != NULL AND $_POST['pass'] != NULL AND $_POST['repass'] != NULL AND $_POST['mail'] != NULL AND $_POST['remail'] != NULL AND $_POST['jour'] != NULL AND $_POST['mois'] != NULL AND $_POST['année'] != NULL AND $_POST['pass'] == $_POST['repass'] AND $_POST['mail'] == $_POST['remail'] AND $_POST['rules'] == on)
	{
 
		include("../includes/mysql.conf.php");
 
		$login = htmlentities($_POST['login'], ENT_QUOTES);
		$pass = md5(htmlentities($_POST['pass'], ENT_QUOTES));
		$mail = htmlentities($_POST['mail'], ENT_QUOTES);
		$jour = htmlentities($_POST['jour'], ENT_QUOTES);
		$mois = htmlentities($_POST['mois'], ENT_QUOTES);
		$annee = htmlentities($_POST['annee'], ENT_QUOTES);
		$date = date(d/m/Y);
 
		function get_ip(){ 
		if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
		{ 
		$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
		} 
		elseif(isset($_SERVER['HTTP_CLIENT_IP']))
		{ 
		$ip = $_SERVER['HTTP_CLIENT_IP'];
		} 
		else
		{ 
		$ip = $_SERVER['REMOTE_ADDR'];
		} 
		return $ip;
		}
		$ip = get_ip();
 
		mysql_query("INSERT INTO membres VALUES('', '" . $login . "', '" . $pass . "', '" . $mail . "', '" . $jour . "', '" . $mois . "', '" . $annee . "', '" . $date . "', '" . $ip . "')");
 
		if ($_POST['newsletter'] == on)
		{
			mysql_query("INSERT INTO newsletter VALUES('', '" . $mail . "')");
 
		}
 
		mysql_close();
 
		header("Location: reg_confirm.php");
	}
 
?>
 
 
<form type="post" action="register.php" name="register">
<table><tr><td>Login : </td><td><input type="text" name="login" /></td></tr>
<tr><td>Pass : </td><td><input type="password" name="pass" /></td></tr>
<tr><td>Pass (confirmez) : </td><td><input type="password" name="repass" /></td></tr>
<tr><td>Mail : </td><td><input type="text" name="mail" /></td></tr>
<tr><td>Mail (confirmez) : </td><td><input type="text" name="remail" /></td></tr>
<tr><td>Date de naissance : </td><td><select name="jour">
    <option value="01">01</option>
    <option value="02">02</option>
    <option value="03">03</option>
    <option value="04">04</option>
    <option value="05">05</option>
    <option value="06">06</option>
    <option value="07">07</option>
    <option value="08">08</option>
    <option value="09">09</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
</select> 
 
<select name="mois">
    <option value="Janvier">Janvier</option>
    <option value="Février">Février</option>
    <option value="Mars">Mars</option>
    <option value="Avril">Avril</option>
    <option value="Mai">Mai</option>
    <option value="Juin">Juin</option>
    <option value="Juillet">Juillet</option>
    <option value="Août">Août</option>
    <option value="Septembre">Septembre</option>
    <option value="Octobre">Octobre</option>
    <option value="Novembre">Novembre</option>
    <option value="Décembre">Décembre</option>
</select>
 
<input type="text" name="annee" value="Année" /></td></tr></table><br>
<center><input name="newsletter" checked="checked" type="checkbox">Je souhaite reçevoir la newsletter quotidiène. (Facultatif - sans spams)<br>
<input name="rules" type="checkbox"> J'ai lu et accepte les conditions d'utilisations.<br><br>
<input type="submit" name="reg" value="S'enregistrer" /></center>
</form>
et maintenant, j'aimerais juste comprendre pourquoi les variables s'inscrivent dans l'url et pourquoi les variables ne s'enregistrent pas dans ma base de donnée.

Merci d'avance
NeO666Linux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 14h31   #6
Membre actif
 
Avatar de bigltnt
 
Inscription : mars 2007
Messages : 221
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 221
Points : 155
Points : 155
Salut !

Je crois que l'erreur vient d'ici:

Code :
<form type="post" action="register.php" name="register">
Ca n'est pas "type", mais "method" qu'il faut utiliser:

Code :
<form method="post" action="register.php" name="register">
Et donc je pense que c'est pour ca que ca ne s'enregistre pas dans ta base, puisque par défault, ca passe dans $_GET, et toi tu appelles $_POST.

Essaye avec ca pour voir ^^

++
bigltnt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 14h41   #7
Invité de passage
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 2
Points : 2
oui autant pour moi je ne sais pas ce qui m'a pris de mettre "type", voila je l'ai modifié, je n'ai plus les variables dans l'url, merci bigltnt

mais cela n'enregistre toujours pas dans la bdd

en fait je n'ai pas bien compris le passage avec $_GET et $_POST
pourrais-tu m'éclairer un peu plus ?

EDIT : arf c'est bon j'ai compris ce que tu voulais me dire
mais cela ne s'enregistre toujours pas.. T_T
pitier aidez-moi ! ^^
NeO666Linux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 15h37   #8
Membre actif
 
Avatar de bigltnt
 
Inscription : mars 2007
Messages : 221
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 221
Points : 155
Points : 155
Tu vas voir c'est pas très compliqué (enfin si j'explique pas bien je conçois c'est dur lol ):

$_GET et $_POST sont la pour transmettre des variables d'une page à l'autre.
---------
$_GET fait passer les variables par l'URL, elles seront donc visibles. C'est le cas d'un formulaire avec:
Code :
1
2
3
4
<form action="tralala.php" method="get">
<input type="text" name="variable" value="123"/>
<input type="submit"/>
</form>
... ou tu peux également le faire manuellement en composant l'url avec:
Code :
<a href="tralala.php?variable=123">Mon lien</a>
Ces deux exemple sont identiques; tu pourras récuperer sur ta page "tralala.php" la variable $_GET['variable'], et ici elle aura la valeur "123" (si l'utilisateur ne la change pas dans le formulaire, ou dans l'url).

---------
$_POST quant à lui n'affiche pas les variables transmises dans l'url. Mais je ne crois pas que l'on puisse l'utiliser avec autre chose qu'un formulaire. Ce qui veut dire que tu devras obligatoirement appuyer sur un bouton de type <input type="submit">. Pour l'utiliser, tu dois donc déclarer le formulaire comme ceci:
Code :
1
2
3
4
<form action="tralala.php" method="post">
<input type="hidden" name="variable" value="123"/>
<input type="submit"/>
</form>
Maintenant, dans "tralala.php", tu récupereras la valeur de ta variable avec $_POST['variable'], et elle vaudra 123. Ici j'ai utilisé un champ de type "hidden" (ou caché), pour te montrer comment stocker des valeurs que l'utilisateur n'est pas censé modifier (je n'ai pas dit qu'il ne pouvait pas, mais qu'il n'était pas censé ).

-------

Voila voila. L'idéal pour tester sur l'arrivée de tes variables (comme ici sur "tralala.php"), c'est de faire un petit print_r($_POST), ou print_r($_GET) lors du développement.



Donc pour ton problème d'enregistrement:

1) Fait le print_r($_POST) pour voir si tu as bien les variables
2) Plutot que ca:
Code :
mysql_query("INSERT INTO membres VALUES('', '" . $login . "', '" . $pass . "', '" . $mail . "', '" . $jour . "', '" . $mois . "', '" . $annee . "', '" . $date . "', '" . $ip . "')");
...pour tester fait ca:^
Code :
1
2
3
$sql="INSERT INTO membres VALUES('', '" . $login . "', '" . $pass . "', '" . $mail . "', '" . $jour . "', '" . $mois . "', '" . $annee . "', '" . $date . "', '" . $ip . "')";
echo $sql;
mysql_query($sql);
... ca permettra de voir la requete complete avant l'envoi.

3)Et puis, teste le resultat de "echo $sql;" directement dans phpMyAdmin pour voir (ou l'equivalent, selon ce que tu utilises) si elle marche, avec un copier/coller


Voila j'espère t'avoir aidé, ++
bigltnt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 16h18   #9
Invité de passage
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 2
Points : 2
Voila j'ai tester avec ce que tu m'a conseillé mais je n'arrive pas a récupérer la valeur de $sql, a mon avis le code doit planter avant d'y arriver

la récupération des variables me semble corrècte

le seul endroit où cela pourrait planter est la condition (if) en début de code
j'ai vérifier que la valeur du champs "rules" coché soit bien "on" et en effet c'est bien le cas.

enfin maintenant on a écarter beaucoup de possibilités, ion ne devrais plus tarder a tomber la où ça coince.

En tout cas merci de tes réponse, maintenant j'ai mieux compris les conceptes de $_GET et $_POST. ^^

EDIT :
Maintenant, je me panche sur les type de champs dans ma table membres.
Voici la requète sql pour créer la table membres :

Code SQL :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `membres` (
  `id` mediumint(9) NOT NULL AUTO_INCREMENT,
  `login` varchar(20) NOT NULL DEFAULT '',
  `pass` blob NOT NULL,
  `mail` varchar(50) NOT NULL DEFAULT '',
  `jour` tinyint(2) NOT NULL DEFAULT '0',
  `mois` tinytext NOT NULL,
  `annee` smallint(4) NOT NULL DEFAULT '0',
  `date` varchar(10) NOT NULL DEFAULT '',
  `ip` varchar(15) NOT NULL DEFAULT '',
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Y a t'il quelque chose a changer dans les valeurs ou les types de champs ?
NeO666Linux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 16h33   #10
Membre actif
 
Avatar de bigltnt
 
Inscription : mars 2007
Messages : 221
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 221
Points : 155
Points : 155
De rien pour les explications ^^

Bon alors à mon avis, si tu as bien fait le echo "$sql" et que tu n'a rien du tout, c'est que tu ne dois pas rentrer dans la boucle. Car meme avec les champs vides, tu aurais du avoir affiché un truc du genre:
Code :
INSERT INTO membres VALUES('', '', '', '', '', '', '', '', '')
Donc test un echo tout bete juste après ton if, pour voir si la condition est bien verifiée:
Code :
1
2
3
4
if ($_POST['login'] != NULL AND $_POST['pass'] != NULL AND $_POST['repass'] != NULL AND $_POST['mail'] != NULL AND $_POST['remail'] != NULL AND $_POST['jour'] != NULL AND $_POST['mois'] != NULL AND $_POST['année'] != NULL AND $_POST['pass'] == $_POST['repass'] AND $_POST['mail'] == $_POST['remail'] AND $_POST['rules'] == on)
	{       echo 'blablablablablabla ceci est un test';
 
		include("../includes/mysql.conf.php");
Et une dernière chose, si tu peux remplace tes "$_POST['login'] != null" par
Code :
if(!empty($_POST['login'])&&!empty($_POST['pass'])&&etc...)
Voila si après tout ca ca ne marche pas, ben ... heu ... lol

bigltnt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2007, 16h50   #11
Invité de passage
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 2
Points : 2
enfin voila j'ai trouvé, je commencais a désepéré
j'ai trouver une magnique fonction :
Code :
error_reporting(E_ALL | E_STRICT);
elle m'a indiqué que j'avais fait plein d'erreurs et où...
nottamment dans le "if" j'avais parlé d'un $_POST['année'] alors que le "input" avait comme nom "annee".

enfin bref je vais essayer de continuer comme sa en modifiant les erreurs que m'aura indiqué la fonction "error_reporting"

merci pour ton dernier conseil avec les "!empty", je vais changer ça tout de suite.

Encore merci pour tout et à bientôt.
NeO666Linux
NeO666Linux est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h59.


 
 
 
 
Partenaires

Hébergement Web