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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
| <?php
// Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1)
header('Content-type: text/html; charset=UTF-8');
// Initialisation de la variable du message de réponse
$message = null;
// Récupération des variables issues du formulaire par la méthode post
$pseudo = filter_input(INPUT_POST, 'pseudo');
$pass = filter_input(INPUT_POST, 'pass');
// Si le formulaire est envoyé
if (isset($pseudo,$pass))
{
// Teste que les valeurs ne sont pas vides ou composées uniquement d'espaces
$pseudo = trim($pseudo) != '' ? $pseudo : null;
$pass = trim($pass) != '' ? $pass : null;
// Si $pseudo et $pass différents de null
if(isset($pseudo,$pass))
{
/* Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
A MODIFIER avec vos valeurs */
$hostname = "localhost";
$database = "membre";
$username = "root";
$password = "";
// Configuration des options de connexion
// Désactive l'éumlateur de requêtes préparées (hautement recommandé)
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
// Active le mode exception
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
// Indique le charset
$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
// Connexion
try
{
$connect = new PDO('mysql:host='.$hostname.';dbname='.$database, $username, $password, $pdo_options);
}
catch (PDOException $e)
{
exit('problème de connexion à la base');
}
// Requête pour compter le nombre d'enregistrements répondant à la clause : champ du pseudo de la table = pseudo posté dans le formulaire
$requete = "SELECT count(*) FROM users WHERE pseudo = ?";
try
{
// préparation de la requête
$req_prep = $connect->prepare($requete);
// Exécution de la requête en passant la position du marqueur et sa variable associée dans un tableau
$req_prep->execute(array(0=>$pseudo));
// Récupération du résultat
$resultat = $req_prep->fetchColumn();
if ($resultat == 0)
// Résultat du comptage = 0 pour ce pseudo, on peut donc l'enregistrer
{
// Pour enregistrer la date actuelle (date/heure/minutes/secondes) on peut utiliser directement la fonction mysql : NOW()
$insertion = "INSERT INTO users(pseudo,pass,date_enregistrement) VALUES(:nom, :password, NOW())";
// préparation de l'insertion
$insert_prep = $connect->prepare($insertion);
// Exécution de la requête en passant les marqueurs et leur variables associées dans un tableau
$inser_exec = $insert_prep->execute(array(':nom'=>$pseudo,':password'=>$pass));
/* Si l'insertion s'est faite correctement...*/
if ($inser_exec === true)
{
/* Démarre une session si aucune n'est déjà existante et enregistre le pseudo dans la variable de session $_SESSION['login'] qui donne au visiteur la possibilité de se connecter. */
if (!session_id()) session_start();
$_SESSION['login'] = $pseudo;
// A MODIFIER Remplacer le '#' par l'adresse de votre page de destination, sinon ce lien indique la page actuelle.
$message = 'Votre inscription est enregistrée.';
//ou redirection vers une page en cas de succès ex : menu.php
//header("Location: menu.php");
//exit();
}
}
else
{ // Le pseudo est déjà utilisé
$message = 'Ce pseudo est déjà utilisé, changez-le.';
}
}
catch (PDOException $e)
{
$message = 'Problème dans la requête d\'insertion';
}
}
else
{ // Au moins un des deux champs "pseudo" ou "mot de passe" n'a pas été rempli
$message = 'Les champs Pseudo et Mot de passe doivent être remplis.';
}
}
?>
<!doctype html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Formulaire d'inscription - tutoriel PHP France</title>
<style type="text/css">
<!--
body, p, h1,form, input, fieldset
{
margin:0;
padding:0;
}
body
{
background-color: #F4F4F4;
}
#inscription
{
width:400px;
background:#FFFFFF;
margin:20px auto;
font-family: Arial, Helvetica, sans-serif;
font-size:1em;
border:1px solid #ccc;
border-radius:10px;
}
#inscription fieldset
{
text-align:center;
font-size:1.2em;
background:#333333;
padding-bottom:5px;
margin-bottom:15px;
color:#FFFFFF;
letter-spacing:0.05em;
border-top-left-radius:10px;
border-top-right-radius:10px;
}
#inscription p
{
padding-top:15px;
padding-right:50px;
text-align:right;
}
#inscription input
{
margin-left:30px;
width:150px;
}
#inscription #valider
{
width:155px;
font-size:0.8em;
}
#inscription #message
{
height:27px;
color:#F00;
font-size:0.8em;
font-weight:bold;
text-align:center;
padding:10px 0 0 0;
}
-->
</style>
</head>
<body>
<div id = "inscription">
<form action = "#" method = "post">
<fieldset>Inscription</fieldset>
<p><label for = "pseudo">Pseudo : </label><input type = "text" name = "pseudo" id = "pseudo" /></p>
<p><label for = "pass">Mot de passe : </label><input type = "password" name = "pass" id = "pass" /></p>
<p><input type = "submit" value = "Envoyer" id = "valider" /></p>
</form>
<p id = "message"><?= $message?:'' ?></p>
</div>
</body>
</html> |