Essai maintenant avec le dernier code que j'ai posté dans ma réponse précédente.
Version imprimable
Essai maintenant avec le dernier code que j'ai posté dans ma réponse précédente.
mandrake_of_mandregas,le résultat à l'écran c'est ça :
"STEP 1 OK" "STEP 2 OK" "STEP 3 OK" "STEP 4 OK" "STEP 4 OK"
mais pas d'enregistrement toujours dans la BD.
OK, Essai donc ceci et tu auras la requête qui s'affiche, tu pourras donc l'exécuter sur ton phpmyadmin
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 <?php if(isset($_POST['submit'])) { echo "STEP 1 OK<br>"; $id = htmlentities(trim($_POST['id'])); $nom = htmlentities(trim($_POST['nom'])); $prenom = htmlentities(trim($_POST['prenom'])); $fonction = htmlentities(trim($_POST['fonction'])); $service = htmlentities(trim($_POST['service'])); $pseudo = htmlentities(trim($_POST['pseudo'])); $password = htmlentities(trim($_POST['password'])); $repassword = htmlentities(trim($_POST['repassword'])); if (($id<>'') AND ($nom<>'') AND ($prenom<>'') AND ($fonction<>'') AND ($service<>'') AND ($pseudo<>'') AND ($password<>'') AND ($repassword<>'')) { echo "STEP 2 OK<br>"; if($password==$repassword) { echo "STEP 3 OK<br>"; if (strlen($password)>4) { echo "STEP 4 OK<br>"; $pass_hache = sha1('gz'.$_POST['password']); $connect = mysql_connect('localhost', 'root', 'bnetd') or die ('Impossible de se connnecter à la Base de Données'); $mabd = mysql_select_db('biblio'); $reg = mysql_query ("SELECT * FROM agent WHERE pseudo='$pseudo' AND password='$password'"); $psan = mysql_num_rows($reg); if($psan==0) { echo "STEP 4 OK<br>"; mysql_query ("INSERT INTO agent (id,nom,prenom,fonction,service,pseudo,password) VALUES ('$id', '$nom', '$prenom', '$fonction', '$service', '$pseudo', '$password')"); echo "INSERT INTO agent (id,nom,prenom,fonction,service,pseudo,password) VALUES ('$id', '$nom', '$prenom', '$fonction', '$service', '$pseudo', '$password')"; // Tu peux recuperer cette requête et l'executer depuis phpmyadmin! die ("Les données saisies ont été bien enregistrées. <a href='enregistrement_.php'> <strong> Nouvel Enregistrement </strong> </a>"); } else echo "Ce pseudo est déjà utilisé."; }else echo "Le mot de passe est trop court. Veuillez saisir un mot de passe de plus de quatre (04) carartères. "; }else echo "Les deux mots de passe doivent être identiques."; }else echo "Veuillez renseigner tous les champs"; } ?>
j'ai testé le dernier code c'est toujours pareil. le resultat s'affiche à l'écran mais toujours rien dans la BD.
Peux tu nous mettre ce qui s'affiche à l'écran?
et comme te l'a demandé undead001, quelle est la clé primaire de ta table agent, et est ce qu'elle est autoincrément?
si c'est id alors, tu modifie ta requête insert en enlevant les id :
Au fait, la variable $pass_hache elle sert à quoi? ne devrais tu pas l'utiliser dans tes requêtes à la place de $password?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 <?php if(isset($_POST['submit'])) { echo "STEP 1 OK<br>"; $id = htmlentities(trim($_POST['id'])); $nom = htmlentities(trim($_POST['nom'])); $prenom = htmlentities(trim($_POST['prenom'])); $fonction = htmlentities(trim($_POST['fonction'])); $service = htmlentities(trim($_POST['service'])); $pseudo = htmlentities(trim($_POST['pseudo'])); $password = htmlentities(trim($_POST['password'])); $repassword = htmlentities(trim($_POST['repassword'])); if (($id<>'') AND ($nom<>'') AND ($prenom<>'') AND ($fonction<>'') AND ($service<>'') AND ($pseudo<>'') AND ($password<>'') AND ($repassword<>'')) { echo "STEP 2 OK<br>"; if($password==$repassword) { echo "STEP 3 OK<br>"; if (strlen($password)>4) { echo "STEP 4 OK<br>"; $pass_hache = sha1('gz'.$_POST['password']); $connect = mysql_connect('localhost', 'root', 'bnetd') or die ('Impossible de se connnecter à la Base de Données'); $mabd = mysql_select_db('biblio'); $reg = mysql_query ("SELECT * FROM agent WHERE pseudo='$pseudo' AND password='$password'"); $psan = mysql_num_rows($reg); if($psan==0) { echo "STEP 4 OK<br>"; mysql_query ("INSERT INTO agent (nom,prenom,fonction,service,pseudo,password) VALUES ( '$nom', '$prenom', '$fonction', '$service', '$pseudo', '$pass_hache')"); echo "INSERT INTO agent (nom,prenom,fonction,service,pseudo,password) VALUES ('$nom', '$prenom', '$fonction', '$service', '$pseudo', '$password')"; // Tu peux recuperer cette requête et l'executer depuis phpmyadmin! die ("Les données saisies ont été bien enregistrées. <a href='enregistrement_.php'> <strong> Nouvel Enregistrement </strong> </a>"); } else echo "Ce pseudo est déjà utilisé."; }else echo "Le mot de passe est trop court. Veuillez saisir un mot de passe de plus de quatre (04) carartères. "; }else echo "Les deux mots de passe doivent être identiques."; }else echo "Veuillez renseigner tous les champs"; } ?>
Alors voici le résultat à l'écran :
Effectivement c'est id la clé primaire mais il n'est autoincrementé.Citation:
STEP 1 OK
STEP 2 OK
STEP 3 OK
STEP 4 OK
STEP 4 OK
INSERT INTO agent (idprojeteur,nomprojeteur,prenomprojeteur,fonctionprojeteur,serviceprojeteur,pseudo,password) VALUES ('1000E', 'DIOMANSIE', 'MAMA', 'COMPTABLE', 'COMPTABILITE', 'diomansie1415mama', 'diomansie1415mama')
tu devrais passer par PhpMyadmin et executer :Code:INSERT INTO agent (idprojeteur,nomprojeteur,prenomprojeteur,fonctionprojeteur,serviceprojeteur,pseudo,password) VALUES ('1000E', 'DIOMANSIE', 'MAMA', 'COMPTABLE', 'COMPTABILITE', 'diomansie1415mama', 'diomansie1415mama')
Je te repose la question : Au fait, la variable $pass_hache elle sert à quoi? ne devrais tu pas l'utiliser dans tes requêtes à la place de $password?
La clé primaire id n'est auto-incrémentée parce qu'elle est de type VARCHAR
Elle devait de me servir à "hasher" le mot de passe. mais vue qu'elle ne fonctionne pas elle aussi, je l'ai supprimé. Le résultat est toujours identique.
as tu executer la requête sur phpmyadmin?
Tu devrais avoir soit une insertion soit une erreur, et là ça pourrait devenir plus clair.
L'exécution de cette requete sur phpmyadmin passe mais je souhaiterais le faire via un formulaire.
crypt
la fonction crypt est facile à utiliser...
dans ta base de données tu utilise crypt($mot_de_pass_utilisateur)
et pour vérifier si ton utilisateur à entré son mot de passe correctement tu as juste à faire:
Code:
1
2
3
4
5
6
7 if(crypt($mot_de_pass_entre,$mot_de_pass_bdd)==$mot_de_pass_bdd) { echo "mot de pass ok"; }else{ echo "mot de pass erroné"; }
De plus as tu essayé
Citation:
if (!mysql_query ("INSERT INTO VALUES ('$id', '$nom', '$prenom', '$fonction', '$service', '$pseudo', '$password')") {
echo mysql_error();
}
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 <?php if(isset($_POST['submit'])) { echo "STEP 1 OK<br>"; $id = htmlentities(trim($_POST['id'])); $nom = htmlentities(trim($_POST['nom'])); $prenom = htmlentities(trim($_POST['prenom'])); $fonction = htmlentities(trim($_POST['fonction'])); $service = htmlentities(trim($_POST['service'])); $pseudo = htmlentities(trim($_POST['pseudo'])); $password = htmlentities(trim($_POST['password'])); $repassword = htmlentities(trim($_POST['repassword'])); if (($id<>'') AND ($nom<>'') AND ($prenom<>'') AND ($fonction<>'') AND ($service<>'') AND ($pseudo<>'') AND ($password<>'') AND ($repassword<>'')) { echo "STEP 2 OK<br>"; if($password==$repassword) { echo "STEP 3 OK<br>"; if (strlen($password)>4) { echo "STEP 4 OK<br>"; $pass_hache = sha1('gz'.$_POST['password']); $connect = mysql_connect('localhost', 'root', 'bnetd') or die ('Impossible de se connnecter à la Base de Données'); $mabd = mysql_select_db('biblio'); $reg = mysql_query ("SELECT * FROM agent WHERE pseudo='$pseudo' AND password='$password'"); $psan = mysql_num_rows($reg); if($psan==0) { echo "STEP 4 OK<br>"; if (!mysql_query ("INSERT INTO agent (nom,prenom,fonction,service,pseudo,password) VALUES ( '$nom', '$prenom', '$fonction', '$service', '$pseudo', '$pass_hache')")) { echo mysql_error(); }else{ echo "INSERT INTO agent (nom,prenom,fonction,service,pseudo,password) VALUES ('$nom', '$prenom', '$fonction', '$service', '$pseudo', '$password')"; // Tu peux recuperer cette requête et l'executer depuis phpmyadmin! } die ("Les données saisies ont été bien enregistrées. <a href='enregistrement_.php'> <strong> Nouvel Enregistrement </strong> </a>"); } else echo "Ce pseudo est déjà utilisé."; }else echo "Le mot de passe est trop court. Veuillez saisir un mot de passe de plus de quatre (04) carartères. "; }else echo "Les deux mots de passe doivent être identiques."; }else echo "Veuillez renseigner tous les champs"; } ?>
Salut l'ami, ce code ne fonctionne pas malheureusement.
Message affiché?
Salut voici le message affiché :
STEP 1 OK STEP 2 OK STEP 3 OK STEP 4 OK STEP 5 OKCitation:
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 'COMPTABILITE', 'etudedetracesroutiers', 'dcheick', '061205314fefacf658f50204107343652f'
Comme le dit ouvertement le retour de l'erreur, c'est dans ta requète le problème :?
essaye ce code, et post moi la réponse que j'analyse...
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 <?php if(isset($_POST['submit'])) { echo "STEP 1 OK<br>"; $id = htmlentities(trim($_POST['id'])); $nom = htmlentities(trim($_POST['nom'])); $prenom = htmlentities(trim($_POST['prenom'])); $fonction = htmlentities(trim($_POST['fonction'])); $service = htmlentities(trim($_POST['service'])); $pseudo = htmlentities(trim($_POST['pseudo'])); $password = htmlentities(trim($_POST['password'])); $repassword = htmlentities(trim($_POST['repassword'])); if (($id<>'') AND ($nom<>'') AND ($prenom<>'') AND ($fonction<>'') AND ($service<>'') AND ($pseudo<>'') AND ($password<>'') AND ($repassword<>'')) { echo "STEP 2 OK<br>"; if($password==$repassword) { echo "STEP 3 OK<br>"; if (strlen($password)>4) { echo "STEP 4 OK<br>"; $pass_hache = sha1('gz'.$_POST['password']); $connect = mysql_connect('localhost', 'root', 'bnetd') or die ('Impossible de se connnecter à la Base de Données'); $mabd = mysql_select_db('biblio'); $reg = mysql_query ("SELECT * FROM agent WHERE pseudo='$pseudo' AND password='$password'"); $psan = mysql_num_rows($reg); if($psan==0) { echo "STEP 4 OK<br>"; if (!mysql_query ("INSERT INTO agent (nom,prenom,fonction,service,pseudo,password) VALUES ( '$nom', '$prenom', '$fonction', '$service', '$pseudo', '$pass_hache')")) { echo mysql_error()."<br />Avec la requete : INSERT INTO agent (nom,prenom,fonction,service,pseudo,password) VALUES ( '$nom', '$prenom', '$fonction', '$service', '$pseudo', '$pass_hache')"; }else{ echo "INSERT INTO agent (nom,prenom,fonction,service,pseudo,password) VALUES ( '$nom', '$prenom', '$fonction', '$service', '$pseudo', '$pass_hache')"; // Tu peux recuperer cette requête et l'executer depuis phpmyadmin! } die ("Les données saisies ont été bien enregistrées. <a href='enregistrement_.php'> <strong> Nouvel Enregistrement </strong> </a>"); } else echo "Ce pseudo est déjà utilisé."; }else echo "Le mot de passe est trop court. Veuillez saisir un mot de passe de plus de quatre (04) carartères. "; }else echo "Les deux mots de passe doivent être identiques."; }else echo "Veuillez renseigner tous les champs"; } ?>
Salut voici le message qui s'affiche à l'écran après exécution du code :
STEP 4 OK
Citation:
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 ';pseudo,password) VALUES ('DIALLO', 'CHEICK', 'Comptable',' at line 1
Avec la requete : INSERT INTO agent (idprojeteur, nomprojeteur,prenomprojeteur,fonctionprojeteur,serviceprojeteur,pseudo,password) VALUES ('DIALLO', 'CHEICK', 'Comptable', 'Scolarite', '2', 'dcheick', '061205314fefacf658f50204107343652fc57bb9')
Tu as copié collé?
Car je ne vois pas d'où sort le ";" dans
Je n'arrive pas à t'aiguiller plus... bovino, je vois que tu suis le post, tu pourrais m'éclairer stp?Citation:
near ';pseudo,password) VALUES ('DIALLO', 'CHEICK', 'Comptable',' at line 1
car apars le problème du ";" qui sort de nul part, je ne vois plus là...:cry::cry::cry::cry::cry::cry::cry::cry::cry:
Salut,
j'ai repris ton code en le commentant :
Rien testé alors croisage des doigts :)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 <?php if (isset($_POST['submit'])) { echo 'STEP 1 OK<br />'; $data = array_filter(array_map('trim', $_POST)); // on n'utilise pas htmlentities() pour échapper des données avant de les // enregistrer en base de données // htmlentities() ne doit servir que pour échapper les données HTML à l'affichage // pour MYSQL -> tu as mysql_real_escape_string() // on vérifie si toutes les clés sont présentes $diff = array_diff(array('id', 'nom', 'prenom', 'fonction', 'service', 'pseudo', 'password', 'repassword'), array_keys($data)); if (empty($diff)) { echo 'STEP 2 OK<br />'; if ($data['password'] === $data['repassword']) { echo 'STEP 3 OK<br />'; if (strlen($data['password']) > 4) { echo 'STEP 4 OK<br />'; $cnx = mysql_connect('localhost', 'root', 'bnetd') or die ('Impossible de se connnecter à la Base de Données'); mysql_select_db('biblio'); // on encode le mot de passe $data['password'] = sha1('gz'.$data['password']); // on échappe toutes les données pour MYSQL en une seule passe $escaped = array_map('mysql_real_escape_string', $data); // on vérifie si le pseudo et le mot de passe encodé n'existe pas // c'est étrange, normalement on ne s'assure de l'existence que du pseudo // et en plus, on utilise l'email à la place du pseudo $sql = <<<SQL SELECT COUNT(*) AS nb_rec FROM agent WHERE agent = '{$escaped['pseudo']}' AND password = '{$escaped['password']}' SQL; $qry = mysql_query($sql); $nb = mysql_result($qry, 0); if ($nb == 0) { echo 'STEP 5 OK<br />'; $sql = <<<SQL INSERT INTO agent ( nom, prenom, fonction, service, pseudo, password ) VALUES ( '{$escaped['nom']}', '{$escaped['prenom']}', '{$escaped['fonction']}', '{$escaped['service']}', '{$escaped['pseudo']}', '{$escaped['password']}' ) SQL; $msg = (mysql_query($sql)) ? 'Les données saisies ont été bien enregistrées. <a href="enregistrement_.php"><strong> Nouvel Enregistrement </strong></a>' : mysql_error(); } else { $msg = 'Ce pseudo est déjà utilisé.'; } } else { $msg = 'Le mot de passe est trop court. Veuillez saisir un mot de passe de plus de quatre (04) carartères.'; } } else { $msg = 'Les deux mots de passe doivent être identiques.'; } } else { $msg = 'Veuillez renseigner tous les champs'; } echo $msg; }
Salut les Amis, le problème que je vous ai soumis est maintenant résolu.
En fait, le dossier "data" (.../Easyphp/mysql/data) qui contient normalement toutes les base de données était vide. Je ne sais pour quelle raison la Base de données que j'ai créée n'y figurait pas.
J'ai donc désinstallé Easyphp puis l'ai réinstallé plus tard et comme par magie, mon code (celui que je vous ai soumis au départ) s'est mis à fonctionner normalement.
Le dernier code proposé par undead001 fonctionne également. Je n'ai testé toutes les autres propositions faites par les amis mais je parie qu'elles fonctionnent aussi.
Merci infiniment à undead001 et mandrake_of_mandregas pour leurs inestimables contributions.