Je vous propose un script d'inscription (1er Parti) et un de connexion (2eme Parti).
Parti 1 :
Je vais commencé par la fin ! Pourquoi ? Car je pense que c'est la meilleur façon pour vous de décomposé et de comprendre le code. En effet la 1er partie est un Partage de jeutie's et de Chocochaos La seconde partie en revanche est du fait mains, il s'agit d'un script de connexion
<?php // ce que vous avez besoins require_once("config.php"); require_once("SOAPRegistration.php"); // Initialisé les sessions et variables $messages = Array(); $showForm = true; // Quand il soumet ses identifiants.... if(!empty($_POST["submit"])) { $reg = new SOAPRegistration(); $messages = $reg -> getMessages(); $showForm = $reg -> showForm(); } $messagesDisplay = ''; foreach($messages as $msg) { $messagesDisplay .= '<div class="errors">'.$msg.'</div>'; } ?> <!DOCTYPE html> //le formulaire d’enregistrement libre à vous de l’amélioré <html> <head> // Vos métas <title>Votre TITLE</title> </head> <body> <table class="reg"> <tr> <td> <?php echo $messagesDisplay; if ($showForm) { ?> <form action="" method="post" name="reg"> <table class="form"> <tr> <td align="right"> Account name: </td> <td align="left"> <input name="accountname" type="text" maxlength="32" /> </td> </tr> <tr> <td align="right"> Password: </td> <td align="left"> <input name="password" type="password" maxlength="16" /> </td> </tr> <tr> <td align="right"> Confirm password: </td> <td align="left"> <input name="password2" type="password" maxlength="16" /> </td> </tr> <tr> <td align="right"> E-mail address: </td> <td align="left"> <input name="email" type="text" maxlength="254" /> </td> </tr> <tr> <td align="right"> Expansion: </td> <td align="left"> <select name="expansion"> <option value="0">Vanilla</option> <option value="1">The Burning Crusade</option> <option selected value="2">Wrath Of The Lich King</option> </select> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" class="sbm" value="Register" name='submit' /> </td> </tr> </table> </form> <?php } ?> </td> </tr> </table> </body> </html>
Maintenant passons au choses sérieuse ! Les fichiers indispensables à l'enregistrement, SOAPRegistration.php.
<?php class SOAPRegistration { protected $messages = Array(); protected $db; protected $soap; protected $showForm = true; public function __construct() { try { $this -> dbConnect(); if ($this -> validateInput()) { $this -> soapConnect(); $this -> showForm = false; $this -> soapCommand('account create '.$_POST["accountname"].' '.$_POST["password"]); $this -> soapCommand('account set gmlevel '.$_POST["accountname"].' 0 -1'); $stmt = $this -> db -> prepare("UPDATE `account` SET `email` = ?, `expansion` = ? WHERE `username` = ?;"); $stmt -> bind_param('sis', $_POST["email"], $_POST["expansion"], $_POST["accountname"]); $stmt -> execute(); //je pensé ajouté une redirection une fois l'enregistrement fini } } catch (Exception $e) { $this -> addMessage($e -> getMessage()); } } protected function validateInput() { if (empty($_POST["accountname"])) { $this -> addMessage('Please fill in an account name.'); } elseif (!preg_match('/^[a-z0-9]{5,32}$/i', $_POST["accountname"])) { $this -> addMessage('Your account name must be between 5 and 32 characters long and may only contain letters and numbers.'); } else { $stmt = $this -> db -> prepare("SELECT `username` FROM `account` WHERE `username` = ?;"); $stmt -> bind_param('s', $_POST["accountname"]); $stmt -> execute(); $stmt -> store_result(); if ($stmt->num_rows > 0) { $this -> addMessage('Un autre compte utilise ce pseudo, merci de choisir un autre pseudo'); } } if (empty($_POST["password"])) { $this -> addMessage('Please fill in a password.'); } else { if (!preg_match('/^[a-z0-9!"#$%]{8,16}$/i', $_POST["password"])) { $this -> addMessage('Le mot de passe doit contenir entre 8 et 16 caractères et ne peut contenir que des lettres, des chiffres et les caractères spéciaux suivants:! "# $%'); } if (empty($_POST["password2"])) { $this -> addMessage('Please confirm your password.'); } elseif ($_POST["password"] !== $_POST["password2"]) { $this -> addMessage('The two passwords do not match.'); } } if (empty($_POST["email"])) { $this -> addMessage('Please fill in an e-mail address.'); } elseif (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL)) { $this -> addMessage('You have entered an invalid e-mail address.'); } elseif (strlen($_POST["email"]) > 254) { $this -> addMessage('The e-mail address can not be longer than 254 characters long.'); } elseif (CHECK_FOR_DUPLICATE_EMAIL) { $stmt = $this -> db -> prepare("SELECT `email` FROM `account` WHERE `email` = ?;"); $stmt -> bind_param('s', $_POST["email"]); $stmt -> execute(); $stmt -> store_result(); if ($stmt->num_rows > 0) { $this -> addMessage('There is already an account with that e-mail address. Please use a different e-mail.'); } } if (!isset($_POST["expansion"]) || $_POST["expansion"] != intval($_POST["expansion"]) || intval($_POST["expansion"]) < 0 || intval($_POST["expansion"]) > 2) { $this -> addMessage('Please select your expansion.'); } return empty($this -> messages); } protected function dbConnect() { $this -> db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME); if (mysqli_connect_errno()) { throw new Exception("Database connection failed: ". mysqli_connect_error()); } return true; } protected function soapConnect() { $this -> soap = new SoapClient(NULL, Array( 'location'=> 'http://'. SOAP_IP .':'. SOAP_PORT .'/', 'uri' => 'urn:TC', 'style' => SOAP_RPC, 'login' => SOAP_USER, 'password' => SOAP_PASS, 'keep_alive' => false //keep_alive only works in php 5.4. )); } protected function soapCommand($command) { $result = $this -> soap -> executeCommand(new SoapParam($command, 'command')); $this -> addMessage($result); return true; } protected function addMessage($message) { $this -> messages[] = $message; return true; } public function getMessages() { return $this -> messages; } public function showForm() { return $this -> showForm; } public function __destruct() { $this -> db -> close(); } }
Enfin le fichier de configuration, bien évidement libre à vous de le modifié et de l'utilisé comme bon vous semble. Config.php
<?php // Database settings define('DB_HOST', '127.0.0.1'); define('DB_USER', 'username'); //compte de la base de donnée MySQL define('DB_PASS', 'password'); //Mots de passe correspondant define('DB_NAME', 'auth'); // Soap settings define('SOAP_IP', '127.0.0.1'); define('SOAP_PORT', '7878'); define('SOAP_USER', 'username'); //compte admin lvl 4 à 5 define('SOAP_PASS', 'Password'); //mots de passe correspondant // Misc settings define('CHECK_FOR_DUPLICATE_EMAIL', true); define('REALMLIST', "Votre Realmlist");
Parti 2
Maintenant il ne vous restent plus qu'à vous connectez à votre serveur.
Je précise que j'ai crée ce code à l'aide de JustyDark, totomakers, Crisou. J'ai amélioré mon code depuis MAIS IL RESTE ENCORE DES RETOUCHE A FAIRE, donc considéré ces codes comme des aides pour débuté.
<?php session_start(); ?> <?php if (isset($_SESSION['active'])){ // Le visiteur est connecté, il n'as pas besoin de ce connecté il retourne en enfer ... à l'accueil. header('Location: ../index.php'); } else { echo '<h1>Login</h1> <form method="post" action="connexion.php"> <p><input type="text" name="login" value="pseudo" placeholder="Pseudo"></p> <p><input type="password" name="password" value="password" placeholder="Password"></p> <p class="remember_me"> <label> <label> <input type="checkbox" name="remember_me" id="remember_me"> Remember me on this computer </label> </label> </p> <p class="submit"><input type="submit" name="commit" value="Login"></p> </form>'; } /* Connexion a la base de données */ // il est néanmoins possible d'utilisé le config.php fourni plus tôt ! $serveur = 'IP'; $user = 'Username'; $pass = 'Password'; $bdd = 'auth'; $port = '3306'; try { $pdo_option[PDO::ATTR_ERRMODE]=PDO::ERRMODE_EXCEPTION; $bdd_auth=new PDO('mysql:host='.$serveur.';port='.$port.';dbname='.$bdd, $user, $pass, $pdo_option); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } //hachage ! $sql = sha1(strtoupper($pseudo).':'.strtoupper($password)); //connection, prepare la bdd, deffinie pass + pseudo $req = $bdd_auth -> prepare('SELECT * FROM account WHERE username = username AND sha_pass_hash = sha_pass_hash'); $req->execute(array( "username" => $pseudo, "sha_pass_hash" => $password, )); //utilise les valeurs récuperé pour la connexion $resultat = $req -> rowCount(); //stock tout les valeur dans un tableu de façon à recurer les infos plustard $informations = $req -> fetch(); $req->closeCursor(); // Déconnexion de la BDD unset( $bdd_auth ); if (!$resultat) { echo '<p>Les identifiants sont incorects<p>'; } else session_start(); $_SESSION['active'] = true; ?>
Voilà ! Vous avez dès à présent de quoi commencé votre site/travail. J’espère que mon partage vous plairas il n'as pas la meilleur conception mais il est fonctionnel, c'est déjà ça ^^.