JuTs

  • Signature
    JuTs
  • Site web
  • Nombre de sujets
    26
  • Nombre de messages
    150
  • Nombre de commentaires
    1
  • Nombre de news
    Aucune
  • Niveau en PHP
    Débutant

Ses derniers messages sur les forums

JuTs
le 27/12/2004 à 11:38
Acces page si login définit
Moogli, t'est mort ?

smiley

pour le $_POST['login'], si je fais
<?php
$req = mysql_query("SELECT login, droits FROM users WHERE login='".addslashes($_POST['login'])."' AND pass=MD5('".$_POST['password']."')");
?>

est-ce que c'est suffisant ?
tu remarqueras que j'ai supprimé le * smiley
JuTs
JuTs
le 27/12/2004 à 11:28
BETWEEN
Je crains que c'est ce que je vais devoir faire smiley
JuTs
JuTs
le 27/12/2004 à 11:12
BETWEEN
Si je pouvais éviter de devoir modifier ça, ça m'arrangerait
JuTs
JuTs
le 26/12/2004 à 21:03
Acces page si login définit
pour les droits, un chtit exemple :

Tu veux qu'une personne ait des droits pour accéder aux pages "webmaster" et "membres" mais pas "visiteur" (complétement absurde puisque le formulaire qui permet d'accéder aux pages "webmaster" et "membres" se trouve sur une page "visiteur"). Dans ce cas ces droits seront 110.

Dans le cas le plus simple (avec 1, 11, 111) tu compare tous les bits. et dans le mien seulement celui correspondant au droit de la page, d'où le décalage à droite pour éliminer les bits qui ne nous intéressent pas.

Pour le $_POST['login'], j'y avais pas pensé, tu fais comment toa smiley
JuTs
JuTs
le 26/12/2004 à 20:01
Acces page si login définit

y a juste un truc qui me soucis => droits nécessaire pour accéder à la page : 10 (010)


Attention, ne pas confondre :

les droits nécessaire pour accéder à la page (1, 10, 100);
les droits des utilisateurs (1, 11, 111).

d'accord, en utilisant seulement 1, 11, 111, ça serait plus simple, un petit & et hop, fini smiley

Mais dans ce cas c'est plus facile si tu veux "moduler" les différents droits (ce droit là, celui-là, mais pas çuilà... smiley).



tu devrait éviter d'utiliser le select *


Je sais, c'est une mauvaise habitude... que j'évite. En fait c'est un script de login écrit il y très très très très longtemps alors que je débutais en php.



éviter d'utiliser directement $_POST['login'] dans une requete SQL c'est une faille de sécurite assez importante (injection sql assez facile


Heu... Tu peux être plus précis (exemple) stp.
C'est déjà mieux qu'un $_GET['login'] smiley



http://frederic.bouchery.free.fr


Hop, dans les favoris
JuTs
JuTs
le 26/12/2004 à 19:33
BETWEEN
Please...
JuTs
JuTs
le 26/12/2004 à 16:27
Acces page si login définit
Pour ce qui est des droits droit d'accès j'ai cette fonction

<?php
function VerifDroits($r_user, $r_page)
{
//calcul du décalage à appliquer sur la valeur binaire
$decalage = strlen(decbin($r_page))-1;

//décalge
$test_user = $r_user >> $decalage;
$test_page = $r_page >> $decalage;

//ET binaire
return $test_user & $test_page;
}
?>


Explications :

Les droits sont "stockés" dans une valeure binaire :

webmaster : 100 (4 en décimal)
membre : 010 (2 en décimal)
visiteur : 001 (1 en décimal)

Le premier bit (à droite) indique le droit d'accès aux page de catégorie visiteur (1:oui, 0:non), le deuxième aux pages des membres et le troisième celles du webmaster.

Le utilisateur sont stockés dans une base de donnée :

CREATE TABLE users (
login VARCHAR(100) NOT NULL,
pass CHAR(32) NOT NULL,
droits TINYINT UNSIGNED NOT NULL,
PRIMARY KEY(login)
);

le champ droit contient une valeur binaire (stockée en décimal) indiquant les droit de l'utilisateur.

exemples :

webmaster : 111 (7 en décimal)(un webmaster à un droit d'accès à toutes les pages)
membre :011 (3 en décimal)
visiteur : 001 (1 en décimal)

Exemples du fonctionnement de la fonction :

droits nécessaire pour accéder à la page : 10 (010)
droits de l'utilisateur : 011


//calcul du décalage à appliquer sur la valeur binaire
la longueur (2) - 1 = 1

décalage vers la droite

010 >> 1 = 001
011 >> 1 = 001

//ET binaire
001 & 001 = 1 --> la personne a les droits


exemple 2 :

droits nécessaire pour accéder à la page : 10 (010)
droits de l'utilisateur : 001

décalage vers la droite

010 >> 1 = 001
001 >> 1 = 000

//ET binaire
001 & 000 = 0 --> la personne n'a pas les droits

Remarque : les paramètres de la fonction sont passés en décimal.


Ensuite en haut de chaque page je place cette fonction
<?php
//$r_page : droits nécessaire pour accéder à la page (en décimal)
function SetSession($r_page)
{
session_start();

//si la variable contenant les droits n'est pas définie (personnes non logguée)
//on lui indique les droit d'un visiteur
if(!isset($_SESSION['droits']))
$_SESSION['droits'] = 1;

//si les droits ne sont pas corrects, redirection vers une page d'erreur
if(!VerifDroits($_SESSION['droits'], $r_page))
header("location: page_erreur.php");
}
?>



login.php
<?php
include_once("inc/config.inc.php");
include_once("inc/function.inc.php");
SetSession(1);

$db = mysql_connect("$host","$user","$pass");
mysql_select_db("$bdd", $db);

$req = mysql_query("SELECT * FROM users WHERE login='".$_POST['login']."' AND pass=MD5('".$_POST['password']."')") or die(mysql_error());

if(mysql_num_rows($req) == 0)
{
header("location: page_erreur.php");
}
else
{
$sortie = mysql_fetch_array($req);
$_SESSION['droits'] = $sortie['droits'];
$_SESSION['login'] = $sortie['login'];
header("location: page.php");
}
?>



En espérant que tout ce blabla puisse être utile à qqn

a++
JuTs
JuTs
le 26/12/2004 à 12:05
BETWEEN
Salut

J'ai une table avec un champ datetime. Je voudrais pouvoir récupérer les données dont l'heure se situe entre deux heures données (comment ça j'suis pas clair ? smiley)

exemple :

la requête

SELECT champ_datetime FROM ma_table
WHERE champ_datetime BETWEEN '2005-05-14 06:00:00' AND '2005-05-14 12:00:00'

permet de récupérer les champs_datetime dont la valeur se trouve entre 2005-05-14 06:00:00 et 2005-05-14 12:00:00.

Ce que je veux c'est pouvoir récupérer ces champs sans tenir compte de la date mais uniquement de l'heure. Comme on le ferait avec LIKE '____-__-__ 06:00:00. Seulement BETWEEN n'aime pas LIKE smiley
JuTs
JuTs
le 14/12/2004 à 00:55
Formulaire à 2 bouton
Tu peux aussi le faire avec des boutons avec des noms différents et ensuite tu contrôle

if($_POST['bouton1'])
{
...
}
elseif($_POST['bouton2'])
{
...
}
JuTs
JuTs
le 04/11/2004 à 14:54
problème avec mktime
Je viens de remarquer que j'ai indiquer une mauvaise date dans mon exemple mais même en corrigeant ça j'obtiens des valeurs bizarre. Je vais essayé le script sur un autre serveur pour voir
JuTs
LoadingChargement en cours