Bonsoir,

Dans ce code :

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
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
<?php
include "BDD/identifiant.php"; 
require ("class/class.phpmailer.php");
 
if(isset($_POST['submit']))
{
	include "connexionBD.php";
 
	//Les différents input.
 	$pseudo = utf8_decode($_POST['pseudo']);
	$mdp = sha1($_POST['mdp']);
	$rmdp = sha1($_POST['rmdp']);
	$email = utf8_decode($_POST['email']);
	$nom = utf8_decode($_POST['nom']);
	$prenom = utf8_decode($_POST['prenom']);
	$annee = ($_POST['annee']);
	$sexe = utf8_decode($_POST['sexe']);
	$adresse = utf8_decode($_POST['adresse']);
	$cp = utf8_decode($_POST['cp']);
	$ville = utf8_decode($_POST['ville']);
	$telephone = utf8_decode($_POST['telephone']);
	$categorie = utf8_decode($_POST['categorie']);
	$type_licence = utf8_decode($_POST['type_licence']);
	$club = ( isset($_POST['club']) )? utf8_decode($_POST['club']) : '';					//on appelle une condition ternaire : var = ( condition )? [valeur si vrai] : [valeur si faux] 
	$licence = ( isset($_POST['licence']) )? utf8_decode($_POST['licence']) : '';
	$compte = utf8_decode($_POST['compte']);
 
	// Vérification si deux pseudo sont identiques dans la bade de données.
	$req = 'SELECT pseudo FROM `bdd`.`inscription` WHERE pseudo = ?';
 
    $prepa = mysqli_prepare($connexion, $req);				//Prépare la requète.
 
    mysqli_stmt_bind_param($prepa ,'s', $pseudo);			//Lie les variables à la requête précédement inscrite.
 
    $prepa->execute();										//Execute la requête.
 
    $resultat = mysqli_stmt_fetch($prepa);					//Retourne le résultat de la requête.
 
	if ($resultat)											//Vérifie si le pseudo existe.
	{
	    echo '<p id="mauvais">Pseudo déjà existant, veuillez en entrer un autre.</p><br>';
	}
 
	// Vérification si deux emails sont identiques dans la bade de données.
	$req = 'SELECT email FROM `bdd`.`inscription` WHERE email = ?';
 
    $prepa = mysqli_prepare($connexion, $req);				//Prépare la requète.
 
    mysqli_stmt_bind_param($prepa ,'s', $email);			//Lie les variables à la requête précédement inscrite.
 
    $prepa->execute();										//Execute la requête.
 
    $resultat = mysqli_stmt_fetch($prepa);					//Retourne le résultat de la requête.
 
	if ($resultat)										//Vérifie si le mail existe.
	{
	    echo '<p id="mauvais">Email déjà éxistante, veuillez en entrer une autre.</p><br>';
	}
 
	else if ($mdp == $rmdp)
	{
		//Si tout est correct, on rentre les valeurs dans la base.
	 	$sql = "INSERT INTO `bdd`.`inscription` (`id`, `pseudo`, `mdp`, `email`, `nom`, `prenom`, `annee`, `sexe`, `adresse`, `cp`, `ville`, `telephone`, `categorie`, `type_licence`, `club`, `licence`, `compte`)
	 			VALUES ('', ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; //Chaque ? représente une variable dans l'ordre indiquer dans la requete sql. ? pour dire que tu vas checker puis va rentrer dans la bdd
 
	 	$stmt = mysqli_prepare($connexion, $sql);
 
		//Paramètres : chaines de caractères dans l'ordre - Permet de renseigner les paramètres repéré par les "?" dans l'ordre.
		mysqli_stmt_bind_param($stmt, 'ssssssssssssssss', $pseudo , $mdp, $email, $nom, $prenom, $annee, $sexe, $adresse, $cp, $ville, $telephone, $categorie, $type_licence, $club, $licence, $compte);
 
		//Exécution
		mysqli_stmt_execute($stmt);	//Execute la requête.
		echo "<p>Inscription réussi.</p><br>";
 
	}else echo '<p id="mauvais">Les mots de passes ne sont pas identiques.</p><br>';
}
?>

Malgré mes recherches je me pose toujours certaines questions.
J'aimerais savoir comment marche la partie comprise entre les lignes 60 et 75.

Je sais que j'insère dans la base de donnée les informations de mon formulaire mais ce que je ne comprends pas :

- Pourquoi les "?" à la place de ":pseudo" ou "$pseudo" ?
- On m'a dit que j'ai réalisé une requête sécurisé, comment puis-je le constater ?
- Quelle ligne dois-je enlever pour réaliser une injection Mysql ? Ou pour que ma requête ne soit plus sécurisé ?
- Je sais qu'il faut mettre autant de "s" qu'il y a de variable (i pour entier, d pour decimal et s pour chaine de caractères) mais à part ça, quel rôle ses "s" joues t-il ?

J'ai aussi une erreur dans la vérification du pseudo, si il existe dans la bdd ou non :

L'erreur, c'est soit je vérifie si le pseudo existe ou soit je vérifie si l'adresse mail existe, si j'insère les deux tâches en même temps j'ai des erreurs :

Pour le pseudo déjà existant ça m'affiche ces erreurs mais l'inscription ne s’exécute pas :

http://www.noelshack.com/2015-02-1420470843-capture.png

Pour le mail déjà existant tout est correct :

http://www.noelshack.com/2015-02-1420470714-capture.png

Merci pour vos réponses.