Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Non-Officiels > Site Web > PHP > Points particuliers > Lecture des commentaires

Vos commentaires sur :
Introduction aux opérateurs de bits

Retour au tutoriel

Vous devez être inscrit pour pouvoir poster des messages

Page : 1  2 
Pseudo Commentaire
Page : 1  2 
Hors ligne revan # Posté le 25/04/2006 23:02:47
Avatar
Groupe : Membres
Exellent ! Enfin, là, je ne trouve pas que tout soit très clair, mais je manque peut-être un peu de sommeil ^^ Je ne note donc pas pour l'instant, je relirais ce tuto demain :)
En tout cas, c'est vraiment interressant !

www.remuneurone.com: énigmes, paradoxes, illusions d'optique, cryptologie, débats scientifiques... etc...
Sciences : Le temps : existence infinie ?, débat sur la notion de temps, de l'âme et de l'origine de l'univers.
Illusion: Coca à plat, si si ! cette bouteille est peinte sur le sol !!!
Paradoxe: Le paradoxe du barbier, à en perdre la tête !
Jeu: La règle mystère, un jeu bien sympa !

Image utilisateur

Allez non de non
C'qu'boudiou j'hallucinions
Par les baloches du cornu
j'ai dû abusé du litron
Cette olive on dirait qu'c'est la couille de Godzilla
Va m'en falloir des endives
Pour contenter c'te bête là

Cryptologie : Le chiffrement par grille trouée, une cryptanalyse bien difficile !
 
Hors ligne danick # Posté le 26/04/2006 00:15:04
Groupe : Membres
Super tutoriel sa va être utile à plein de monde,

She Is Buying The Stairway To Heaven ...
To Be A Rock And Not To Roll ... you can make your life with these sentences....
 
Hors ligne SuprazZz # Posté le 26/04/2006 11:07:06
! Absent pendant 2 ans !
Avatar
Groupe : Membres
Une vraie merveille !
Très claire la plupart du temps, dans le pire des cas, on regarde l'exemple pour comprendre :p

Un tuto à mettre entre toutes les mains de ceux qui veulent améliorer leurs connaissances et leur esprit logique !
 
Hors ligne Anonyme # Posté le 26/04/2006 19:47:07
Groupe :
Une petite faute, tu as oublié de fermer le if dans l'exemple sur A, B, C ect (à la fin).
Hors ligne Loetheri # Posté le 26/04/2006 20:44:59
Sans question, pas de réponse
Groupe : Membres
L'idée y est et est, je trouve, importante.
Cependant, on ne fait que rarement des SELECT * FROM [...].
De plus, on ne joue que rarement avec des WHERE où la variable sera autre chose qu'un "simple" nombre. Question d'optimisation ;-)

Une autre idée est de remettre le binaire en nombre arabe à la fin. Cependant, je ne sais pas si c'est plus rapide ou léger.
Hors ligne alex.hitman # Posté le 27/04/2006 16:42:52
Groupe : Membres
Un tuto vraiment utile, et bien expliqué !

Un petit 19 ^^
 
Hors ligne Diti # Posté le 27/04/2006 17:58:41
Manchot empereur
Avatar
Groupe : Membres
Je mets 20, je ne savais pas que le binaire était si facile en PHP ! ^^

Image utilisateur
Jabber : Image utilisateur
 
Hors ligne infotoubib # Posté le 27/04/2006 20:36:50
Avatar
Groupe : Membres
Merci pour vos encouragements ! :)

J'ai corrigé quelques petites erreurs (excès de fermeture de parenthèses), mais avant de faire revalider, n'hésitez pas à me signaler celle que vous voyez....

Loetheri :
- Le SELECT * était pour ne pas écrire tous les champs de droits, mais j'ai bien précisé que ce premier exemple n'était pas une bonne solution...
- WHERE Pseudo='$Pseudo' : il est nécessaire lors de la connexion, dans la mesure où les formulaires de connexion (y compris dans le siteduzero) demande que l'on saisisse son pseudo et non son ID. C'est donc la seul information que l'on ait au moment de vérifier le mot de passe et les droits de l'utilisateur.
Cela-dit, ta remarque est bonne : une fois l'utilisateur identifié, il vaut mieux se servir de sont ID que de son Pseudo en cas de requète ultérieure. ;)

- On peut tout à fait utiliser le notation décimale avec les nombres binaire, et c'est ce que je fais souvent jusqu'à 2048, mais au-delà, c'est vraiment, vraiment plus simple d'utiliser la notation hexadécimale !

0x1000 | 0x2000 | 0x4000 | 0x8000 = 0xF000
Je suis incapable de calculer de tête la même opération en notation décimale !!

Diti :
Oui, le binaire n'est pas compliqué une fois que l'on a compris.
Un petit problème avec le binaire en PHP : les opérateurs de bits foncionnent non seulement sur les nombres mais aussi sur les chaînes de caractères, d'où l'obligation de s'assurer que les variables seront bien prises en compte comme nombre.
La première fois que je les ai utilisés, j'ai fait comme en C, et celà ne foncionnait pas... jusqu'à ce que je rajoute des (int)... (J'en met peut-être trop, mais c'est plus sûr...)

http://si2ra.ouvaton.org : Si2Ra, un CMS francophone pensé pour les intranets
 
Hors ligne alex.hitman # Posté le 27/04/2006 23:02:02
Groupe : Membres
J'ai une remarque, concernant la dernière réponse du QCM.

On a ceci :
Code : PHP
((int)$lDroits & (GER_MEMBRES|GER_BASE)) ^ (GER_MEMBRES|GER_BASE)


Imaginons GER_MEMBRES qui est 10 et GER_BASE qui est 01 (en binaire).
Si l'utilisateur à les 2 droits, $lDroits vaut 11.

Donc faisons :

Code : PHP
((int)$lDroits & (GER_MEMBRES|GER_BASE)) ^ (GER_MEMBRES|GER_BASE)


équivaut donc à :

Code : PHP
(11 & (10|01)) ^ (10|01) =
(11 & 11) ^ 11 =
11 ^ 11 =
00


Donc, si l'utilisateur a les droits, l'accès lui est refusé ??
Y a-t-il une erreur dans le tutorial, ou bien je me suis trompé ?
 
Hors ligne infotoubib # Posté le 28/04/2006 20:42:26
Avatar
Groupe : Membres
alex.hitman :
Très bonne remarque ! (Et tu as réussi à me déstabiliser pendant 30 secondes...) :lol:
Le résultat de $Mon_operation est bien = à 0 (FAUX) si l'on a tous les droits, et vrai dans le cas contraire.
Or la boucle est
Code : PHP
  // Vérification des droits de l'utilisateur connecté
        if ( $Mon_operation ) {
                // Accès refusé
                exit ('Désolé, mais je suis le seul à pouvoir accéder à cette page !');
        }

donc Si le $Mon_operation = 0, je n'entrerai pas dans la boucle. J'aurais donc accès à la page dont l'affichage ne commence qu'ensuite.
Si $Mon_operation est VRAI (tous les autres cas), j'entrerai dans la boucle et serait expulsé de la page....

Personnellement, j'utilise une routine similaire (un peu plus complexe) dans un fichier entete.php, que je require sur toutes mes pages d'un extranet. En l'absence des droits nécessaires, le script est interrompu (un peu plus proprement, mais il fallait faire court pour le cours).

http://si2ra.ouvaton.org : Si2Ra, un CMS francophone pensé pour les intranets
 
Hors ligne alex.hitman # Posté le 28/04/2006 21:07:45
Groupe : Membres
Citation : infotoubib
Si le $Mon_operation = 0, je n'entrerai pas dans la boucle


:lol: je suis vraiment étourdit !

Bien évidemment qu'il faut que $Mon_operation ne retourne pas 0 (FALSE) pour que la condition soit bonne !


edit : par contre, quel doit être le type du champ Mysql dans lequel on doit insérer les données en hexadécimal ? Parce que insérer du FF ou 0xFF dans de l'intéger, ça ne fonctionne pas chez moi...
VARCHAR ferait-il l'affaire ?
 
Hors ligne infotoubib # Posté le 29/04/2006 10:11:31
Avatar
Groupe : Membres
Citation : alex.hitman
quel doit être le type du champ Mysql dans lequel on doit insérer les données en hexadécimal ?

En fait, nous travaillons avec des entiers non signés. La notation hexadécimal est seulement un moyen plus pratique d'écrire pour nous. Peut importe le fait que le nombre soit restitué en décimal lorsque nous regardons la tables dans PHPmyadmin...
Dans ma requète pour créer la table, j'utilise :
`Droits` INT UNSIGNED NOT NULL DEFAULT 0

Pour travailler en notation hexadécimale dans une requète, en dehors du cadre d'un champ de table, avec MySql:
Citation : Manuel MySql 4
In MySQL 4.1 (and in MySQL 4.0 when using the --new option), the default type of a hexadecimal value is a string. If you want to ensure that the value is treated as a number, you can use CAST(... AS UNSIGNED):

mysql> SELECT 0x41, CAST(0x41 AS UNSIGNED);
-> 'A', 65

Mais ceci dépasse probablement ta question...

http://si2ra.ouvaton.org : Si2Ra, un CMS francophone pensé pour les intranets
 
Hors ligne alex.hitman # Posté le 29/04/2006 16:20:50
Groupe : Membres
Merci, cela répond tout à fait à ma question.

Mais je pense que je vais tout de même insérer les données dans un champs VARCHAR. En effet, peut m'importe que Mysql traite ces données comme des string, tant que PHP lui les traite en tant qu'integer.
Il me suffit donc de convertir les données récupérées depuis Mysql en integer.

Et le tour est (normalment) joué !
 
Hors ligne Awaken # Posté le 03/05/2006 19:24:26
Avatar
Groupe : Membres
Excellent tuto :)

The greatest trick the Devil ever pulled was convincing the world he didn't exist.
 
Hors ligne Chahine # Posté le 07/05/2006 20:43:50
Avatar
Groupe : Membres
Très instructif ! Avec un excellent exemple d'application pour les droits d'utilisateurs que je compte bien exploiter quand j'aurai créé un espace membre !
20/20 >> des tutos comme celui-ci, on aimerait en voir (encore) plus souvent !
Hors ligne DHKold # Posté le 08/05/2006 17:16:56
Ex-Admin
Avatar
Groupe : Membres
Très bien, mais j'ai une ou deux remarques:

Il serait très interressant, je pense, de parler aussi des opérateur de décalage à gauche et à droite (<< et >>) qui peuvent se trouver utiles :)

Pour le type de champs, un entier non signé me semble plus adpaté qu'un VARCHAR, puisqu'on doit y stocker un nombre. On pourrait aussi utiliser BLOB, ou CHAR en BINARY, mais alors il faudrait utiliser pack et unpack, à moins d'enregistrer un nombre en texte ^^ (Ce qui est un peu stupide :p )

Une erreur avec votre code? Déboguez avec GDB!
----------
Pack DHemoticons (Utilisation Libre)
Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur Image utilisateur
 
Hors ligne finalbob # Posté le 11/05/2006 12:44:20
youplaboum!
Avatar
Groupe : Membres
excellent...
je suis en TSSI, et je me suis régalé à lire ce tuto!

bravo!
 
Hors ligne Piwaï # Posté le 19/05/2006 09:56:03
Why can't we be friend ?
Avatar
Groupe : Membres
Interessante la mise à jour...

Mais... Ya quelque chose de pas logique dans ton dernier code :

Regarde bien la variable $Options. Elle ne sert strictement à rien !! Bizarre... En effet, tu la modifie, mais tu ne t'en sers pas... Il doit y avoir une erreur quelque part...

Je pense que c'est ici :

Code : PHP

                        if ($i & 1) {
                                echo '<td>OUI</td>';
                        }
                        else {
                                echo '<td>non</td>';
                        }


Il faudrait transformer ca en :

Code : PHP

                        if ($Options & 1) {
                                echo '<td>OUI</td>';
                        }
                        else {
                                echo '<td>non</td>';
                        }


Voila !!

C'est bien sinon :)

@++

Piwaï

http://www.piwai.info
"La violence est le dernier refuge de l'incompétence". Isaac Asimov, Fondation.
Créateur de 2H4U : Too Hard For You et découvrez aussi BisouLand.
 
Hors ligne infotoubib # Posté le 19/05/2006 13:27:22
Avatar
Groupe : Membres
Merci Piwaï pour le repérrage de mon erreur. :)
J'ai corrigé et demandé la revalidation.
Et pourtant je l'avais relu ! (mais plus à la recherches des fautes d'orthographe (mon point faible, donc il doit en rester) que des erreurs logiques... :euh:

http://si2ra.ouvaton.org : Si2Ra, un CMS francophone pensé pour les intranets
 
Hors ligne lapras123 # Posté le 20/05/2006 20:11:45
Avatar
Groupe : Membres
j'ai meme pas lu le tuto en entier, c'est trop compliqué pour moi :(
 
Hors ligne NarTy # Posté le 21/05/2006 18:54:24
Je t'aime amèrement !
Avatar
Groupe : Bannis
Franchement , c'est super, j'ai decouvert plein de chose merci !

Venez jouer
Mon blog => JuLeS’ ProGs
Programmeur xHTML/CSS,PHP/SQL,Javascript,C à votre service

 
Hors ligne Chahine # Posté le 05/06/2006 11:17:00
Avatar
Groupe : Membres
Excellent ce petit complément sur les décalages de bits !

Pour aller plus loin, pourquoi ne pas proposer l'exercice corrigé suivant :

On souhaite réaliser un tableau comportant pour chaque membre sa situation par rapport à toutes les options possibles ; en plus d'afficher les droits actuels, ce tableau devra permettre de les modifier directement (on utilisera pour cela des checkboxes au lieu des mentions oui/non).

Voici ce que j'ai réalisé par exemple :

editer_membre.php


Code : PHP
<form action = "liste_membres.php" method = "post">
    <tr>
        <?php
            $i = 0;
            while ($i < NOMBRE_DROITS)                                                           
            {
        ?>

        <td>
            <input type = "checkbox" name = "DroitNumero<?php echo $i + 1; ?>"
            <?php
                if ((int)$membres['Droits'] & 1)
                {
                    echo 'checked = "checked"';
                }

                (int)$membres['Droits'] >>= 1;
                $i++;
            ?>/>
                                       
            </td>
                                                   
        <?php
            }
        ?>
                                                       
        <input type = "hidden" name = "IDMembreAModifier" value = "<?php echo $_POST['IDMembre']; ?>"/>

        <td><input type = "submit" value = "Modifier"/></td>
    </tr>
</form>

liste_membres.php


Code : PHP
if (isset($_POST['IDMembreAModifier']))
{
    $droits = 0;
    $i = $j = 1;
                                       
    while ($i <= NOMBRE_DROITS)
    {
        if ($_POST['DroitNumero'.$i] == 'on')
        {
            $droit_actuel = 1;
                               
            while ($j < $i)
            {
                (int)$droit_actuel <<= 1;
                $j++;
            }
                         
            $j = 1;
            $droits += (int)$droit_actuel;
        }
        $i++;
    }
                                       
    $requete = mysql_query('UPDATE Membres SET Droits = \''.$droits.'\' WHERE ID = \''.$_POST['IDMembre'].'\'');
                                                 
}
Hors ligne Bill Gates 2 # Posté le 02/07/2006 12:09:17
Linuxien a son heure
Avatar
Groupe : Membres
Je connaissait déjà le principe mais ce tuto m'a permis de débuguer mon code de gestion des grade ! :)
Merci beaucoup, tout est clair et facile ! ;)

Vive Linux :-°
 
En ligne Quadehar # Posté le 15/11/2006 22:46:44
Avatar
Groupe : Membres
Excellent tuto, vraiment bien expliqué et clair :) Je l'avais déjà survolé sans vraiment y accorder de l'importance, comme je n'en avais à l'époque pas besoin, mais aujourd'hui, je l'ai lu d'un boût à l'autre pour pouvoir gérer facilement les consoles de jeu possédées par chaque membre (un bit par console :p ).

Merci encore, je ne savais même pas que les opérateurs de bit existaient, la première fois que je suis tombé sur ce tutorial :)

Wii Motion - Site sur la Wii proposant de nombreuses news, des dossiers, des previews, des tests et un forum.
 
En ligne Dutiona # Posté le 05/01/2007 21:15:11
Vie pour être heureux !
Avatar
Groupe : Membres
19.
J'ai tout compris, c'est le principal.
Merci pour ce tuto ^^ !


Bisous, Nyu

Toutes mes sources !
Eclipse user | Ubuntu (KDE) user | php/sql/xhtml/css/xml/xsl/javascript/java/python/perl/c/scheme coder.
Framework in use: Seraframework (my own one).
In Microeisti staff.
 
Hors ligne Zimm i48 # Posté le 16/01/2007 13:04:34
Parés à virer ?
Avatar
Groupe : Membres
Excellent ! Jamais vu un tuto aussi clair (sauf peut-être ceux de M@teo :p )
Ca mérite bien son 20/20.
Tu m'as permis par la même occasion de comprendre (grâce à la question 4 du QCM) comment faisaient les fonctions (de la SDL notamment dans le cours de C de Mateo) pour savoir quels flags on leur avait envoyé :
Code : C
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER);

Rendez-vous sur Test-Pedago.fr, le site d'un projet libre de logiciels pour s'entraîner sur les tables de multiplication et les conjugaisons.


Wikiversité
 
Hors ligne WildKiller # Posté le 04/02/2007 15:30:13
Ya un truc
Avatar
Groupe : Membres
Vraiment super 20/20!!

J'ai appliqué ce principe à mon site pour les gestions des admins et modos.

Le problème c'est quand je veux modifier un grade, pour le mettre en admin:
Code : PHP
$new_add['droits'] |= 0x4000; // Modification des droits, on donne le droit d'admin

// Ensuite on affiche et il me retourne 16384

Je ne comprends vraiment pas pourquoi j'ai peut-etre loupé un truc

Encore merci pour ce tuto :)
 
Hors ligne infotoubib # Posté le 04/02/2007 17:37:24
Avatar
Groupe : Membres
Citation : WildKiller
Le problème c'est quand je veux modifier un grade, pour le mettre en admin:
Code : PHP
$new_add['droits'] |= 0x4000; // Modification des droits, on donne le droit d'admin

// Ensuite on affiche et il me retourne 16384

Je ne comprends vraiment pas pourquoi j'ai peut-etre loupé un truc

C'est tout à fait normal, puisque 0x4000 (notation hexadécimal) équivaut à 16384 (notation décimale, qui est affichée par défaut).
Pour afficher la valeur d'une variable en hexadécimal, il faut utiliser la fonction dechex()
ou si tu veux un affichage précédé de 0x, la fonction maison suivante :
Code : PHP
        // fonction pour afficher en hexadécimal:
        function hexadec ($Nombre) {
                echo '0x', dechex($Nombre);
        }

http://si2ra.ouvaton.org : Si2Ra, un CMS francophone pensé pour les intranets
 
Hors ligne Torajio Bangani # Posté le 12/02/2007 23:42:37
Avatar
Groupe : Membres
Franchement, j'ai rarement vu un aussi bon tuto que celui-ci :)
Il a l'avantage d'être clair avec de bons exemples, et il a une réelle utilité (j'ai vu pas mal de tutos qui ne font que d'expliquer comment en appliquer un autre :-° )


PS : Je mets 18/20 puisque je trouve que les exemples, bien que bien choisis, manquent pour les opérations comme celle que je veux faire et quelqu'autres.

a creative world. - Be creative to be different.
WIP Session 3D - Scène d'intérieur d'un autre temps...
 
Hors ligne GuGus963 # Posté le 25/03/2007 21:08:57
Utilisez du libre !
Avatar
Groupe : Membres
Ce tuto est excellentissime :p Je donne 20 ^^

Benjamin Franklit a dit : “ Ceux qui sont prêts à sacrifier une liberté essentielle pour acheter une sûreté passagère, ne méritent ni l'une ni l'autre.”
Il n'a pas connu OpenBSD.
 

Vous devez être inscrit pour pouvoir poster des messages

Retour au tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 773 Zéros connectés | Requêtes SQL 6 requêtes | Temps de génération de la page : Total (SQL) 0.0656s (0.0519s)