PHP Création de compte // MaNGOS
Bonjour je vous présente un script d'inscription pour son local facile d'utilisation ! Vous devez juste modifier la partie ci-dessous en rentrant vos données .

Je tiens à dire que ce n'est pas mon script , je ne sais plus ou je l'ai pris il était sur mon PC depuis quelques mois .

Si la personne retrouve son script et ne souhaite pas sa publication qu'il me le signale en MP je l'enlèverais .

Vous ne devez modifier que cela
[code=php]
//---------------------------------------
// Titre du site, changez 'SERVEUR'
define('TITRE_SITE', 'Mon serveur WoW');
//--------------------------------------
// Configuration SQL
define('HOST', '127.0.0.1');
define('USER', 'VOTRE COMPTE WAMP');
define('PASSWORD', 'VOTRE PASSE WAMP');
define('REALM_DB', 'realmd');
//--------------------------------------
[/code]

[code=php]

<?php

// La classe qui gère l'inscription
include('class/inscription.class.php');
//---------------------------------------
// Titre du site, changez 'SERVEUR'
define('TITRE_SITE', 'Mon serveur WoW');
//--------------------------------------
// Configuration SQL
define('HOST', '127.0.0.1');
define('USER', 'VOTRE COMPTE WAMP');
define('PASSWORD', 'VOTRE PASSE WAMP');
define('REALM_DB', 'realmd');
//--------------------------------------

?>

<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />



<title>Inscription</title>
<link rel="stylesheet" media="screen" type="text/css" title="Woltk" href="design/style.css" />


<link rel="shortcut icon" type="image/x-icon" href="design/wow.ico" />
</head>



<body>


<div id="corps">

<h1> Mon Serveur</h1>

<?php if(isset($_POST['ok']))
{
// connexion sql
mysql_connect(HOST, USER, PASSWORD) or die(mysql_error());
mysql_select_db(REALM_DB);
// on a cliqué, on fait les opérations
$joueur = new Inscription();
// définition des composantes
$joueur->setUsername($_POST['username']);
$joueur->setPassword($_POST['password']);
$joueur->setPasswordRepeat($_POST['passwordRepeat']);
$joueur->setEmail($_POST['email']);
$joueur->setExtension($_POST['extension']);
// enregistrement ou pas
$joueur->verifyAll();


}
else
{
?>


<form method="post">

<p>
Votre inscription sera effective d&egrave;s que vous aurez rempli ce formulaire :<br />

<br />

<label for="label1">Nom de compte : </label><input name="username" id="label1" type="text" /><br />

<label for="label2">Adresse email : </label><input name="email" id="label2" type="text" /><br />

<label for="label3">Mot de passe : </label><input name="password" id="label3" type="password" /><br />

<label for="label4">R&eacute;p&eacute;tez le mot de passe : </label><input name="passwordRepeat" id="label4" type="password" /><br />

<label for="label5">Extension :</label>
<select name="extension" id="label5">
<option value="0">World of Warcraft</option>
<option value="1">Burning Crusade</option>
<option value="2" selected="selected">Wrath of the Lich King</option>
</select>

<br />

<br />

<input name="ok" value="" type="submit" />
</p>

</form>

<?php }
?>
</div>


</body>
</html>
[/code]
Et enfin inscription.class il vous faut créer un dossier class et mettre dedans le code , si vous n'êtes pas sûr de ce que vous faites , ne modifiez pas ce code .
[code=php]
<?php
/** Classe inscription
* Permet d'afficher une image antibot et de gérer l'inscription
*/

// Paramètres du script
//--------------------------------------
// la largeur minimale du nom d'utilisateur
define('USER_LENGHT', 3);

// la largeur minimale du mot de passe
define('PASSWORD_LENGHT', 3);
//---------------------------------------

class Inscription
{
private $inscriptionId;
private $username;
private $password;
private $passwordRepeat;
private $cryptedPassword;
private $email;
private $inscriptionDate;
private $extension;
private $errorMsg;
private $error;
private $injection;

private function construct()
{
$this->inscriptionDate = date('Y-m-d H:i:s');
$this->error = false;
$this->errorMsg = '';
$this->injection = false;
$this->cryptedPassword = '';
}

//-------------------------
// MÉTHODES
//-------------------------

/** Vérifie le nom d'utilisateur */
private function verifyUsername()
{
// la taille.
if(strlen($this->username) <= USER_LENGHT)
{
$this->error = true;
$this->errorMsg .= ' - Le nom d\'utilisateur choisi est trop court.<br />';
}

// le nom d'utilisateur est déjà pris
$sqlUsername = mysql_query('SELECT COUNT(*) AS nombre FROM account WHERE username=\'' . $this->username.'\'') or die('Comparaison des noms d\'utilisateur : '.mysql_error());
$datasUsername = mysql_fetch_assoc($sqlUsername);

if($datasUsername['nombre'] == 1)
{
$this->error = true;
$this->errorMsg .= ' - Ce nom d\'utilisateur est déjà pris.<br />';
}

// la chaine n'est pas une injection
$this->sqlDetect($this->username);
}

/** Vérifie le mot de passe */
private function verifyPassword()
{
// la taille
if(strlen($this->password) <= PASSWORD_LENGHT)
{
$this->error = true;
$this->errorMsg .= ' - Le mot de passe choisi est trop court.<br />';
}

// les mots de passe sont identiques
if($this->password !== $this->passwordRepeat)
{
$this->error = true;
$this->errorMsg .= ' - Les mots de passe ne sont pas identiques.<br />';
}
// la chaine n'est pas une injection
$this->sqlDetect($this->password);
}

/** Vérifie l'email */
private function verifyEmail()
{
// l'email est correct
if(!preg_match('#^[a-z0-9.-_]+@[a-z0-9.-_]{2,}\.[a-z]{2,4}$#', $this->email))
{
$this->error = true;
$this->errorMsg .= ' - L\'email n\'est pas correct.<br />';
}

// l'email est déjà pris
// (>= 1 si jamais un admin à plusieurs comptes avec le même email)
$sqlEmail = mysql_query('SELECT COUNT(*) AS nombre FROM account WHERE email=\''.$this->email.'\'') or die('Comparaison des emails : '.mysql_error());;
$datasEmail = mysql_fetch_assoc($sqlEmail);

if($datasEmail['nombre'] != 0)
{
$this->error = true;
$this->errorMsg .= ' - L\'email est déjà utilisé.<br />';
}

// si la chaine n'est pas une injection
$this->sqlDetect($this->email);
}

public function verifyAll()
{
// vérification des données
$this->verifyUsername();
// $this->verifyEmail();
$this->verifyPassword();

if(!$this->error)
{
$this->cryptedPassword = sha1(strtoupper($this->username).':'.strtoupper($this->password));
mysql_query('INSERT INTO account(username,
sha_pass_hash,
gmlevel,
email,
joindate,
last_ip,
expansion)
VALUES(\''.$this->username.'\',
\''.$this->cryptedPassword.'\',
0,
\''.$this->email.'\',
\''.$this->inscriptionDate.'\',
\''.$_SERVER['REMOTE_ADDR'].'\',
\''.$this->extension.'\')') or die('Enregistrement du compte : '.mysql_error());
echo '<p class="info"><br /><br /><br />Votre enregistrement à été effectué avec succès !<br /><a href="index.php">Retour à l\'index</a></p>';
}
else
{
if($this->injection)
{
echo '<p class="info"><br /><br />On ne fait pas ça !</p>';
}
else
{
echo '<p class="info">Des erreurs ont été trouvée durant l\'enregistrement :<br /><br />',$this->errorMsg,'<br /><a href="index.php">Réessayer</a></p>';
}
}
}

/** Détecte les injections sql */
private function sqlDetect($string)
{
if (preg_match('#INSERT|SELECT|UNION|FROM|WHERE|DELETE#', $string))
{
$this->error = true;
$this->errorMsg .= ' - Injection sql detéctée !<br />';
$this->injection = true;
}
}

//-------------------------
// SETTERS
//-------------------------
public function setUsername($username)
{
$this->username = mysql_real_escape_string($username);
}

public function setPassword($password)
{
$this->password = mysql_real_escape_string($password);
}

public function setPasswordRepeat($password)
{
$this->passwordRepeat = mysql_real_escape_string($password);
}

public function setEmail($email)
{
$this->email = mysql_real_escape_string($email);
}


public function setExtension($extension)
{
$this->extension = mysql_real_escape_string($extension);
}
}
?>
[/code]

Screen de la page d'inscription :
[Image: 100225121301690143.png]

Pour le télécharger
Script_PHP_création_de_compte.rar - 3.0 Kb

Source : Cat121 (Félix) pour WoWDB.


J'espère que ce script vous a aidé !

Merci du partage, +rep Smile
Code :
public function setExtension($extension)
        {
                $this->extension = $extension;
        }

Faille ?
(08-03-2011 07:51)blackdown a écrit :  
Code :
public function setExtension($extension)
        {
                $this->extension = $extension;
        }

Faille ?

Peut-être qu'au lieu d'essayer de taunt l'auteur du partage. Il serait mieux de contribuer à son amélioration non ?

Effectivement injection SQL :
"$this->extension = $extension;" à remplacer par "$this->extension = mysql_real_escape_string($extension);"
(08-03-2011 14:25)et65 a écrit :  
(08-03-2011 07:51)blackdown a écrit :  
Code :
public function setExtension($extension)
        {
                $this->extension = $extension;
        }

Faille ?

Peut-être qu'au lieu d'essayer de taunt l'auteur du partage. Il serait mieux de contribuer à son amélioration non ?

Effectivement injection SQL :
"$this->extension = $extension;" à remplacer par "$this->extension = mysql_real_escape_string($extension);"

Tu le prends peut-être un peu trop au pieds de la lettre...
Je ne voie pas en quoi il a taunt, il a juste signalé une possible faille.

Cordialement,
MacWarrior.
(08-03-2011 16:31)MacWarrior a écrit :  Tu le prends peut-être un peu trop au pieds de la lettre...
Je ne voie pas en quoi il a taunt, il a juste signalé une possible faille.

Cordialement,
MacWarrior.

Je connais blackdown Langue. De toutes manières c'était pas méchant sinon j'aurai mis un avertissement Clin
(08-03-2011 14:25)et65 a écrit :  
(08-03-2011 07:51)blackdown a écrit :  
Code :
public function setExtension($extension)
        {
                $this->extension = $extension;
        }

Faille ?

Peut-être qu'au lieu d'essayer de taunt l'auteur du partage. Il serait mieux de contribuer à son amélioration non ?

Effectivement injection SQL :
"$this->extension = $extension;" à remplacer par "$this->extension = mysql_real_escape_string($extension);"

Code :
public function setExtension($extension) {
       if(ctype_digit($extension)) {
              $this->extension = $extension;
       } else {
              $this->extension = 1;
       }
}

...
Je signale juste une petite erreur qui est surement dû au copier/coller du script ou un problème de forum.

Dans le fichier class on trouve ceci :
Code PHP :
$this->inscriptionDate date('Y-m-d H:i<img class="postimage" src="images/smilies/erf.gif" style="vertical-align: middle;" border="0" alt="Erf" title="Erf" />'); 

En faite c'est :
Code PHP :
$this->inscriptionDate date('Y-m-d H:i:s'); 

Le "Erf" avait été remplacer par le code HTML qui donnait le chemin vers l'image du Smiley ... Heureux

Amicalement Allan,
(03-04-2011 01:20)Allan a écrit :  Je signale juste une petite erreur qui est surement dû au copier/coller du script ou un problème de forum.

Dans le fichier class on trouve ceci :
Code PHP :
$this->inscriptionDate date('Y-m-d H:i<img class="postimage" src="images/smilies/erf.gif" style="vertical-align: middle;" border="0" alt="Erf" title="Erf" />'); 

En faite c'est :
Code PHP :
$this->inscriptionDate date('Y-m-d H:i:s'); 

Le "Erf" avait été remplacer par le code HTML qui donnait le chemin vers l'image du Smiley ... Heureux

Amicalement Allan,

Non, en fait pour utiliser la balise [code] il faut désactiver les smileys sinon ça créé des erreurs de ce genre Hihi
Il y a des failles dans ce script !

Retourner en haut Accueil