Inscription/base de donné

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Inscription/base de donné

Re: Inscription/base de donné

par orenx22 » 08 déc. 2013, 19:28

Il serait intéressant d'utiliser des terme générique et pas des 'truc, launcher' ou autre nomination qui n'ont aucun sens en programmation. Le plus simple est d'exposer en français dans quoi vous vous lancez, les obligations, les problèmes que vous rencontrer, puis donner l'ensemble du code problématique.

Dans ton cas, nous comprenons bien que tu dois faire un formulaire d'enregistrement (1ère étape), puis dans la foulé, identifier le client (2ème étape), mais comme tu utilises des termes personnels, on se retrouve vite à plus rien comprendre.

Pour mois, j'exploiterai ce système :

<?php

// -- LIEN BASE DE DONNEES -----------------------------------------------------

$dsn = "mysql:dbname={mydb};host={127.0.0.1};port={3306};" ;

$basededonnees = new PDO( $dsn, 'root', '' );

// -- FONCTIONS UTILISATEUR -----------------------------------------------------

function is_mail( PDO $basededonnee, $mail )
{
    $result = false ;
    
    if( filter_var( $mail, FILTER_VALIDATE_EMAIL ) )
    {
        $sql = "SELECT * FROM auth WHERE mail = ?" ;
        
        $req = $basededonnee-> prepare( $sql );
        
        $req-> execute( array( $mail ) );
        
        $count = $req-> rowCount();
        
        if( $count == 0 ) $result = true ;
    }
    
    return $result ;
} 

function submit( PDO $basededonnee, $mail, $mdp )
{
    $sql = "INSERT INTO auth(mail,mdp) VALUES(?,?)" ;
    
    $req = $basededonnee-> prepare( $sql );
    
    $req-> execute( array( $mail, md5( $mdp ) ) );
    
    return $basededonnee-> lastInsertId();
}

function auth( PDO $basededonnee, $mail, $mdp )
{
    $sql = "SELECT * FROM auth WHERE mail = ? AND mdp = ?" ;
    
    $req = $basededonnee-> prepare( $sql );
    
    $req-> execute( array( $mail, $mdp ) );
    
    return $req-> rowCount();
}

// -- TRAITEMENT DU FORMULAIRE -------------------------------------------------

$erreur = array();

if( !empty( $_POST ) and isset( $_POST['mail'], $_POST['mdp1'], $_POST['mdp2'] ) )
{
    if( !is_mail( $basededonnees, $_POST['mail'] ) )
    {
        $erreur['mail'] = true ;
    }
    
    if( $_POST['mdp1'] != $_POST['mdp2'] or strlen( $_POST['mdp1'] ) < 8 )
    {
        $erreur['mdp'] = true ;
    }
    
    if( empty( $erreur ) )
    {
        $auth_id = submit( $basededonnees, $_POST['mail'], $_POST['mdp1'] );
        
        $_SESSION['auth'] = array(
            'id' => $auth_id,
            'mail' => $_POST['mail'],
            'mdp' => md5( $_POST['mdp1'] )
        );
        
        // redirection vers la page souhaite quand l'utilisateur est authentifié
        header( 'location:index.php' );
    }
}

?>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>S'enregistrer</title>
    </head>
    <body>
        <form method="post" action="inscription.php">
            <fieldset>
                <?php if( isset( $erreur['mail'] ) or isset( $erreur['mdp'] ) ): ?>
                <div class="helper">
                    <span>Votre mail ou mot de passe est invalide.</span>
                    <?php if( isset( $erreur['mail'] ) and $erreur['mail'] ): ?>
                    <span>L'email est déjà utilisé ou ne correspond pas au norme.</span>
                    <?php endif ?>
                    <?php if( isset( $erreur['mdp'] ) and $erreur['mdp'] ): ?>
                    <span>Les mots de passe ne sont pas similaire ou ne comportent pas au moins 8 caractères.</span>
                    <?php endif ?>
                </div>
                <?php endif ?>
                <input type="text" name="mail" placeholder="Mail" /><br />
                <input type="password" name="mdp1" placeholder="Mot de passe" /><br />
                <input type="password" name="mdp2" placeholder="Vérification mot de passe" /><br />
                <input type="submit" value="Envoyer" />
            </fieldset>
        </form>
    </body>
</html>

Les fonctions utilisateurs sont bien sûr à externaliser. L'exploitation de la fonction auth() à l'ouverture de chaque nouvelle page doit être fait pour valider l'authentification pour les pages qui nécessitent un identification qu'on s'entend bien.

exemple :

<?php

// -- LIEN BASE DE DONNEES -----------------------------------------------------

$dsn = "mysql:dbname={mydb};host={127.0.0.1};port={3306};" ;

$basededonnees = new PDO( $dsn, 'root', '' );

// -- AUTHENTIFICATION ---------------------------------------------------------

if( !auth( $basededonnees, $_SESSION['auth']['mail'], $_SESSION['auth']['mdp'] ) )
{
    // redirection vers la page d'identification
    header( 'location:login.php' );
}

// le traitement de la page.
Ciao

Re: Inscription/base de donné

par antoinewin » 08 déc. 2013, 19:04

Merci problème regler.

Re: Inscription/base de donné

par antoinewin » 08 déc. 2013, 16:58

En faite mon launcher utilise le fichier launcher.php pour se connecter a la base de donné mais le probleme les mots de passes ne sont pas bien crypté si j'ai bien compris? 1 est en sha1 et l'autre md5? (je voudrais supprimer l'inscription2.php pour mettre a la place l'inscription1.php)

Re: Inscription/base de donné

par moogli » 08 déc. 2013, 13:11

Salut,

Cg que tu appel "launcher" c'est ton formulaire de connection ?

Si oui :
  • le formulaire html serait pratique pour que l'on puisse voir si tu ne te trompe pas dans les noms de champs.
  • les deux premiers scripts concernent l'inscription cela n'a rien a voir voir. Si les données sont correctement insérées dans la table users c'est bon.
  • on ne passe pas le mot de passe en clair dans les requêtes sql
  • parce que l'on ne stock pas en clair les mots de passe dans une table (on les haches avec par exemple sha1, md5 ou la bien nommée password_hash
  • tu récupère le mot de passe de la base et compare avec le hash que tu recré avec la saisie du formulaire ;)
  • le coup sha1(md5(.....)) ne sert strictement à rien :). A la limite utilise uniqid() au besoin mais session_id() est suffisant si tu as besoin de quelque chose d'unique (sinon l'id en base de l'utilisateur est lui aussi unique).
@+

Re: Inscription/base de donné

par guillaume97 » 08 déc. 2013, 11:44

Alors la je sais pas.

Re: Inscription/base de donné

par antoinewin » 07 déc. 2013, 23:54

Erf je ne peut pas modifier mon premier message
1er code: inscription1.php
2eme code: inscription2.php
3eme code: launcher.php

Re: Inscription/base de donné

par antoinewin » 07 déc. 2013, 23:51

Comment modifier le formulaire launcher.php qui relie un launcher a la base de donné pour qu'il récupère le mot de passe et l'identifiant de la base de donné remplie depuis inscription1.php . Ces formulaires m'ont été donné et j'ai de très faible connaissance en php. Le launcher.php etais avec inscription2.php. Mais j'aimerai remplacer l'inscription2.php par l'inscription1.php qui est sur mon site.

Re: Inscription/base de donné

par xTG » 07 déc. 2013, 23:00

Euh oui c'est pas clair.
Quelle est ta question ?

Inscription/base de donné

par antoinewin » 07 déc. 2013, 22:21

J'ai besoin d'aide pour modifier un formulaire de connection d'un launcheur, voici mon formulaire d'inscription de mon site (si possible ne pas modifier)
<?php include('include/header.php'); ?>
 <div id="contenu">
<div class="news">
<?php
if(isset($_POST['submit'])) 
{
include("include/config.php");
$db = mysql_connect($dbhost,$dbuser,$dbpass); 
mysql_select_db($dbname,$db); 
 $pseudo = strip_tags(mysql_real_escape_string(stripslashes($pseudo = ($_POST['pseudo']))));  
 $pass = strip_tags(mysql_real_escape_string(stripslashes($pass = ($_POST['pass']))));
 $mail = strip_tags(mysql_real_escape_string(stripslashes($mail = ($_POST['mail']))));
 $sql = 'SELECT count(*) FROM users WHERE pseudo="'.$pseudo.'"'; 
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req); 
if ($data[0] == 0) { 
$pass = md5($pass);
$sql = "INSERT INTO users VALUES('','$pseudo','$pass','$mail','0','steve','0')";
mysql_query($sql) 
or die('Erreur SQL !'.$sql.'
'.mysql_error()); 
echo"Inscription validée ! Merci !";
echo'
<script type="text/javascript"> 
setTimeout("parent.document.location.href = index.php ;",2000); 
</script> ';
}else echo"Erreur, un membre du meme pseudo existe deja";
mysql_close(); 
}else {

?>
<h1> Inscription au site <?php include("include/config.php");
$db = mysql_connect($dbhost,$dbuser,$dbpass); 
mysql_select_db($dbname,$db); 
$sql = ("SELECT * FROM config ORDER BY id DESC LIMIT 0,1"); 
$req = mysql_query($sql) or die('Erreur SQL ! Avez vous fait l installation ?
'.$sql.'
'.mysql_error()); 
while($data = mysql_fetch_array($req)) 
{  echo $data['nom'];} ?></h1>
	<form method="post" action="/inscription.php" name="submit" >
    <p>Pseudo Minecraft</p><input type="text" name="pseudo";> </input>
    <p>Mot de passe</p><input type="password" name="pass";> </input>
    <p>E-mail</p><input type="text" name="mail";> </input>
<br><input type="submit" value="Valider" name="submit"> 
</form>
<?php } ?>
</div>
<?php include('include/sidebar.php'); ?>
<?php include('include/footer.php'); ?>
Ancien formulaire d'inscription (il marchait avec le formulaire qui va suivre)
<?php
	if(!isset($_POST['pseudo']) OR !isset($_POST['password1']) OR !isset($_POST['password2']))
	{
		// SI un des champs n'est pas rempli...
	}
	else
	{
		if($_POST['password1'] === $_POST['password2'])
		{
			$username = $_POST['pseudo'];
			$password = sha1($_POST['password1']);

			// Base de données
			try
			{
				$bdd = new PDO('mysql:host=localhost;dbname=launcher;charset=UTF-8', 'root', '');
				$sql = 'INSERT INTO auth(username, password) VALUES (:username, :password)';
				$req= $bdd->prepare($sql);
				$req->execute(array(
					'username' => $username,
					'password' => $password
					)
				);
				$data = $req->fetch();
			}
			catch(Exception $e)
			{
				echo 'Erreur dans la base de données.';
			}
		}
		else
		{
			$message = 'Les champs "Pseudo" et "Mot de passe" doivent être remplis.';
		}
	}
?>


<html>
	<head>
		<meta charset="UTF-8" />
		<title>Inscription</title>
	</head>
	<body>
		<form method="post" action="inscription.php">
			<fieldset>
				<input type="text" name="pseudo" placeholder="Pseudo" /><br />
				<input type="password" name="password1" placeholder="Mot de passe" /><br />
				<input type="password" name="password2" placeholder="Mot de passe" /><br />
				<input type="submit" value="Envoyer" />
			</fieldset>
		</form>
	</body>
</html>
Et je veux que mon formuaire de connection du launcher prenne les infos de la base de donné enregistrer dans le 1er inscription
<?php
	
	$username = isset($_POST['username']) ? $_POST['username'] : "";
	$password = isset($_POST['password']) ? $_POST['password'] : "";
	$session = sha1(md5($username . 'legitimfight' . rand()) . rand());
	
	$result = "";
	
	try
	{
		$bdd = new PDO('mysql:host=localhost;dbname=launcher;charset=UTF-8', 'root', '');
		$sql = 'SELECT username FROM auth WHERE username = :username AND password = :password';
		$req = $bdd->prepare($sql);
		$req->execute(array(
			'username' => $username,
			'password' => $password
			)
		);
		$data = $req->fetch();
	}
	catch(Exception $e)
	{
		echo 'Erreur de la base de données.';
	}
	if(empty($data))
	{
		echo 'Identifiants incorrects !';
	}
	else
	{
		$result = '1.5.2:' . $username . ':' . $session . ':' . $session;
		echo $result;
	}
?>
Désolé ce n'est pas du tout claire, Merci d'avance pour vos aides.