8791 sujets

Développement web côté serveur, CMS

Bonjours a vous ,en esperant ne pas m'etre trompé de forum.
Je vous explique,je suis en train de cree une boutique avec l'aide de prestashop mais comme il n'existe pas de module pour mettre la boutique en mode privé je suis en train de bidouillé pour qu'elle le soit.Donc j'ai cree mon index comme ceci.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Vente Privee</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<style type="text/css" media="screen">
@import url(niceforms-default.css);body {
    margin-left: 500px;
    margin-top: 200px;
    margin-right: 200px;
    margin-bottom: 150px;
}

</style>
	</head>
<?php
$hostname_db = "localhost"; // nom ou ip de votre serveur
$database_db = "prestashop"; // nom de votre base de données
$username_db = "root"; // nom d'utilisateur (root par défaut) !!! ATTENTION, en utilisant root, vos visiteurs on tout les droits sur la base
$password_db = ""; // mot de passe (aucun par défaut mais il est fortement recommandé d'en mettre un ... sinon, à quoi bon la sécurité ?)
$db = mysql_pconnect($hostname_db, $username_db, $password_db) or trigger_error(mysql_error(),E_USER_ERROR); 
/*
--------------------------------------------
--------- Prestashop en Private ----------
---- By SmartiesKiller For Prestashop ----
--------------------------------------------
*/

session_start(); // début de session

if (isset($_POST['email'])){ // execution uniquement apres envoi du formulaire (test si la variable POST existe)
	$email = addslashes($_POST['email']); // mise en variable du nom d'utilisateur
	$passwd = addslashes(md5($_POST['pass'])); // mise en variable du mot de passe chiffré à l'aide de md5 (I love md5)
	
// requete sur la table administrateurs (on récupère les infos de la personne)
mysql_select_db($database_db, $db);
$verif_query=sprintf("SELECT * FROM presta_customer WHERE email='$email' AND passwd='$passwd'"); // requête sur la base customer
$verif = mysql_query($verif_query, $db) or die(mysql_error());
$row_verif = mysql_fetch_assoc($verif);
$utilisateur = mysql_num_rows($verif);

	
	if ($utilisateur) {	// On test s'il y a un utilisateur correspondant
	
	    session_register("authentification"); // enregistrement de la session
		
		// déclaration des variables de session
		$_SESSION['email'] = $row_verif['email']; // Son email
		$_SESSION['pass'] = $row_verif['pass']; // Son mot de passe (à éviter)
		
		header("Location:index4.php"); // redirection si OK
	}
	else {
		header("Location:index.php?erreur=email"); // redirection si utilisateur non reconnu
	}
}

?>
	<body>
	
<div id="header" class="block myaccount">

        <table border="0" width="35%">
            <tr>
                <td style="padding: 7px">        
<form action="" method="post" name="connect">
  <p align="center" class="title">
    <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "email")) { // Affiche l'erreur  ?>
    <strong class="erreur">Echec d'authentification !!! &gt; login ou mot de passe incorrect</strong>
    <?php } ?>
    <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "delog")) { // Affiche l'erreur ?>
    <strong class="reussite">D&eacute;connexion r&eacute;ussie... A bient&ocirc;t <?php echo $_GET['prenom'];?> !</strong>
    <?php } ?>
    <?php if(isset($_GET['erreur']) && ($_GET['erreur'] == "intru")) { // Affiche l'erreur ?>
    <strong class="erreur">Echec d'authentification !!! &gt; Aucune session n'est ouverte ou vous n'avez pas les droits pour afficher cette page</strong>
    <?php } ?>
  </p>

  <table width="300"  border="0" align="center" cellpadding="10" cellspacing="0" ><br/>
    <tr>
      <td width="50%""><div align="right">Email&nbsp;:&nbsp;</div></td>
      <td width="50%"><input name="email" type="text" id="email"></td>
    </tr>
    <tr>
      <td width="50%""><div align="right">Mot de Passe&nbsp;:&nbsp;</div></td>
      <td width="50%"><input name="passwd" type="password" id="passwd"></td>
    </tr>
    <tr>
      <td height="34" colspan="2"><div align="center">
          <input type="submit" name="Submit" value="Se connecter">
      </div></td>
    </tr>
  </table>
</form>
					<br />
                    <p align="center"><a href="password.php">Mot De Passe Oublie ??</a></p>
                <td>
            </tr>
        </table>

</div>
	


</body>
</html>


la base de donnée est la suivante ,du moins la partie qui nous interresse.


id_customer 	id_gender 	secure_key 	email 	passwd 	last_passwd_gen 	birthday 	lastname 	newsletter 	ip_registration_newsletter 	optin 	firstname 	active 	date_add 	date_upd

7 	1 	67db456cf6e263c3b169f024b200cd51 	adresse@gmail.com 	2e45947723122db270ff85da7c47fdf4 	0000-00-00 00:00:00 	1940-01-01 	TESTE 	0 	NULL 	0 	teste 	1 	2008-11-08 13:25:17 	2008-11-08 13:25:17


donc quand je lance mon index.php il me demande le l'amail et le password que j'ai cree mais il ne le trouve pas.

Quelqu'un a une idée ?? je pense que je dois mal verifier le mot de passe d'ou l'erreur qu'il me renvoie.
Merci de toute l'aide apporté.
deux trois remarques:

Un addslashes sur un md5 ne sert à rien, puisque ce dernier renvoit une chaîne ne contenant que les caractères [0-9a-zA-Z], il n'y a donc aucun caractère à échapper.

Avant d'échapper l'email, vérifie également la directive magic_quotes_gpc.

Au lieu d'utiliser addslashes, utilise plutôt mysql_real_escape_string

Tant qu'a utiliser "sprintf", autant l'utiliser correctement:
$verif_query=sprintf("SELECT * FROM presta_customer WHERE email='%' AND passwd='%s'", $email, $passwd);

(note que tu peux insérer le "mysql_real_escape_string" ici)

A quoi te sert ton
$row_verif = mysql_fetch_assoc($verif)
sinon à récupérer des valeurs que tu as déjà? (email et mdp). C'est une requête inutile.

Tu utilise header() alors que du contenu a déjà été envoyé (le doctype et la partie <head> de ta page. C'est une erreur.
Si tu avais affiché le rapport d'erreur, tu le saurais. Place donc un error_reporting(E_ALL|E_STRICT); en haut de ta page.

Tu utilise dans ton message deux mots en forte contradiction:
"Bidouiller" et "Boutique"... Essaye de faire du code plus structuré, plus solide en construsant en plusieurs fichiers par exemple:

index.php
<?php
    error_reporting(E_ALL|E_STRICT);
    session_start();

    require_once('lib/hash.class.php');
    $error_messages = array();

    /*
    * - Database Connexion & Selection    
    */

    if ( isset($_SESSION['hash']) && isset($_SESSION['id_customer']) ) {
        /*
        * $query = sprintf('SELECT email, passwd, secure_key WHERE id_customer = %d', $_SESSION['id_customer']);
        * $result = mysql_query($query);
        * $user = mysql_fetch_assoc($result);
        */
        /* Here, a test value, Password = 'test'*/
        $sql_data = array('id_customer'=>7, 'email'=>'adresse@gmail.com','secure_key'=>'67db456cf6e263c3b169f024b200cd51','passwd'=>'098f6bcd4621d373cade4e832627b4f6');
        $user = ($_SESSION['id_customer'] == $sql_data['id_customer']) ? $sql_data : false;
        /* End of false sql statement */
            
        if ( $user ) {
            require_once 'lib/hash.class.php';
            $hash = new Hash(session_id(), $user['email'], $user['secure_key'], $user['passwd']);
            
            if ( $hash->compare($_SESSION['hash']) ) {
                include('index.secure.php');
            }
            else {
                $error_messages[] = 'Invalid session. Please reconnect.';
                var_dump($hash->compare($_SESSION['hash']));
                var_dump($hash->get());
                var_dump($_SESSION['hash']);
                require 'index.login.php';
            }
        }
        else {
            $error_messages[] = 'Invalid User. Please reconnect.';
            require 'index.login.php';
        }
    }

    else {
         include('index.login.php');
    }
?>


lib/hash.class.php
<?php
    class Hash {
        const SECURE_SALT = 'Some random string.';

        private $hash = null;
        
        public function __construct( /*...*/ ) {
            $hash = hash_init('sha256');

            hash_update($hash, self::SECURE_SALT);

            $args = func_get_args();
            foreach ($args as $part) {
                hash_update($hash, $part);
            }
            $this->hash = hash_final($hash);

        }
        
        public function get () {
            return $this->hash;
        }
        
        public function compare( $hash ) {
            return ($hash === $this->hash);            
        }
    }    
    
?>


index.secure.php
Here, you're logged!


index.login.php
<?php
    if ( isset($_POST['email']) || isset($_POST['passwd']) ) {
 
        if ( !empty($_POST['email']) && !empty($_POST['passwd']) ) {
            $email = trim($_POST['email']);
            $passwd = md5(trim($_POST['passwd']));
            /*
            * $query = sprintf("SELECT id_customer, secure_key WHERE email = '%s' AND passwd = '%s'", mysql_real_escape_string($email), $passwd);
            * $user = mysql_fetch_assoc($result);
            */
            
            /* Here, a test value, Password = 'test'*/
            $sql_data = array('id_customer'=>7, 'email'=>'adresse@gmail.com','secure_key'=>'67db456cf6e263c3b169f024b200cd51','passwd'=>'098f6bcd4621d373cade4e832627b4f6');
            $user = ($email == $sql_data['email'] && $passwd == $sql_data['passwd']) ? $sql_data : false;
            /* End of false sql statement */


            if ( $user ) {
                $hash = new Hash(session_id(), $email, $user['secure_key'], $passwd);
                
                $_SESSION['hash'] = $hash->get();
                $_SESSION['id_customer'] = $user['id_customer'];
                
                if (! headers_sent() ) {
                    header('location:'.$_SERVER['PHP_SELF']);
                }
                else {
                    echo '<a href="'.$_SERVER['PHP_SELF'].'">You are Logged! Click here to return into the site</a>';
                    exit();
                }
            }
            else {
                $error_messages[] = 'Invalid Email or Password!';
            }
        }
        else {
            $error_messages[] = 'You must specify an Email and a Password!';
        }
    }
    foreach ($error_messages as $msg) {
        echo "<p>$msg</p>";
    }
?>
    <form action="" method="post">
        <input type="text" name="email" id="email" value="email" />
        <input type="password" name="passwd" id="passwd" value="password" />
        <input type="submit" name="loggin" value="Connect!" />
    </form>


J'ai volontairement simplifié le html au possible, pour que tu ne sois pas perdu pour comprendre le code php Smiley cligne
merci de mp'avoir eclairé

c'est vrai que je debute en php donc les erreurs seront legions jusqu'a ce que j'arrive a bien tout cerner.

je vais tester ca.

Merci d'avance.