Inscription/base de donné

antoinewin
Invité n'ayant pas de compte PHPfrance

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.

ViPHP
xTG
ViPHP | 7331 Messages

07 déc. 2013, 23:00

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

antoinewin
Invité n'ayant pas de compte PHPfrance

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.

antoinewin
Invité n'ayant pas de compte PHPfrance

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

guillaume97
Invité n'ayant pas de compte PHPfrance

08 déc. 2013, 11:44

Alors la je sais pas.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

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).
@+
Il en faut peu pour être heureux ......

antoinewin
Invité n'ayant pas de compte PHPfrance

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)

antoinewin
Invité n'ayant pas de compte PHPfrance

08 déc. 2013, 19:04

Merci problème regler.

Eléphant du PHP | 79 Messages

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