Aller au contenu

ZeBrian

Webmaster Régulier
  • Compteur de contenus

    77
  • Inscrit(e) le

  • Dernière visite

Tout ce qui a été posté par ZeBrian

  1. A vrai dire d'après les différents tests que j'ai fait, c'est tout de même très rapide (de l'ordre de 5 ms sur mon PC qui n'est pas un foudre de guerre). Mais j'en parle à la toute fin de l'article : pour un environnement de production, il vaut mieux sauvegarder toutes les images générées et les utiliser directement, sans passer par le script.
  2. Bonjour, Je voudrais mettre en commun l'article que je viens de finir, et qui je l'espère pourrait se révéler utile pour certaines personnes qui n'arrivent qu'à faire des sites moches comme moi Ce sont les étapes de conception d'un générateur de dégradés avec PHP/GD, qui permet d'éviter d'ouvrir Photoshop à chaque fois qu'on veut créer un dégradé pour mettre en fond d'un bloc HTML, et croyez-moi les dégradés c'est très utile pour faire un joli site sans se casser la tête Je vous renvoie à mon article pour plus d'infos : http://www.web2master.com/graphic/ A noter que j'ai aussi inclus un petit script qui permet de s'entraîner à créer des couleurs directement à partir de leur syntaxe en hexadécimal, vous vous rendrez compte que ce n'est pas tellement sorcier au final ! Bonne lecture
  3. Salut, Essaie de remplacer "setInterval" par "window.setInterval" ! Bonne journée
  4. Salut, Ton explication me semble très valable en effet ! JavaScript est décidément un langage très bien foutu quand on le connaît bien
  5. Bonjour tout le monde, J'utilise souvent dans mes codes JavaScript la syntaxe suivante, qui fait que a vaut b, sauf s'il n'est pas défini ou est de valeur nulle (quel que soit son type) et dans ce cas on recommence avec c et, à défaut, on stocke la valeur de d : var a = b || c || d; Cela me permet de réduire considérablement la taille des codes destinés à la compatibilité entre navigateurs, par exemple pour obtenir le style d'un objet : var computedStyle = this.currentStyle || window.getComputedStyle(this, ''); Seulement, je ne vois jamais cette syntaxe utilisée sur tous les bouts de code que j'ai pu voir sur le net ! Est-elle déconseillée et si oui pourquoi ? Merci
  6. C'est pas pour moi alors Enfin je regarderai quand même Merci ! Edit : Ca m'a l'air bien compliqué tout cela, et nécessiter des tonnes de paperasse ! Je crois que je vais plutôt me porter vers le portage salarial :-)
  7. Merci, en effet ça a l'air intéressant comme système ! Même s'ils ont l'air de prendre une bonne petite marge, mais c'est un peu normal... A ton avis, je peux m'y inscrire en étant mineur ?
  8. Bonjour, Ayant acquis un bon lot de connaissances en PHP/JS, j'aimerais occasionnellement développer et vendre des sites web en tant qu'indépendant. Seulement, je n'ai aucune idée des déclarations que je dois faire, ainsi que de la manière dont on délivre une facture, etc... Petit hic : je n'ai que 17 ans (mais au pire, je peux attendre mes 18 ans qui arrivent dans quelques mois) Voilà, si certains d'entre vous pouvaient m'aiguiller sur les démarches à suivre, je vous en serais reconnaissant ! Merci
  9. Si ce n'est que ça, c'est possible de reconstituer également la réactivité aux touches du clavier ! Je reposterai un message quand j'aurai rajouté toutes les fonctionnalités dont tu me parles
  10. Petite correction fingolfin : ce serait plutôt "+=" que ".=" en JavaScript
  11. Bonsoir tout le monde, Un peu exaspéré par la (presque) impossibilité de styler en CSS les balises <select> et <option>, j'ai décidé d'y créer une alternative à peu près équivalent en JavaScript. Le principe est simple : au chargement de la page, si l'utilisateur a JavaScript, on remplace tous ses <select> par des <div> qui se comportent de la même manière, et qui sont donc par nature skinnables. Cela donne ceci : http://88.167.224.84/project_select/ Au niveau de la structure HTML de ce que j'ai appelé les "fakeSelect", on a un <div class="fSelect"> qui contient principalement un <div class="fContainer"> qui lui-même contient toutes les options (qui sont des <div class="fOption">), mais aussi, si l'on n'utilise pas un select multiple, un <div class="fSelectHead"> qui correspond à l'option sélectionnée actuellement. Il est à noter que la classe de certains de ces objets peut changer : par exemple, une option sélectionnée sera de classe "fOption_selected". De plus, si la souris passe dessus, ce sera "fOption_selected_hover" (car le hover CSS n'est pas supporté par IE6 sur des <div>, et je trouvais assez sale de mettre des <a>). De même pour les autres classes (à part fSelect et fContainer bien sûr), pour mieux comprendre voyez le fichier CSS ! Si jamais ce gadget vous semble utile, merci de me le faire savoir, je prendrai la peine de le publier pour que vous ne soyez pas les seuls à en profiter
  12. Non, je ne lis pas que la dernière ligne bien sûr ! En fait je lis toutes les lignes qui ont été écrites moins de $intervalle secondes auparavant... Et étant donné que le fichier ne dépassera que rarement les 20 lignes (il est convenablement vidé à chaque fois), je ne pense pas qu'il soit trop long à exécuter ! Je vais faire un petit bench pour tester EDIT : Après quelques benchs, j'ai fait une nouvelle version un peu plus "intelligente" dirons-nous, qui parse beaucoup moins de chaînes que la précédente et se révèle donc plus rapide. Lors de plus d'une centaine d'accès en moins d'une seconde, le calcul reste de l'ordre de 0.5 à 1 millisecondes sur un serveur mutualisé de 1&1 $intervalle = 3; $max_acces = 10; if (!file_exists('cache')) $cache = ''; else { $cache = false; while ($cache === false) $cache = _AT_file_get_contents('cache'); } $good = false; $current = time(); for ($i = $intervalle; $i >= 0; $i--) { $pos = strpos($cache, "\n".($current - $i).' '); if ($pos !== false) { $good = true; $last = substr($cache, $pos); break; } } if (!$good) $last = ''; $f = false; while ($f === false) $f = _AT_fopen('cache', 'w'); fputs($f, $last."\n".$current.' '.str_replace("\n", null, $_SERVER['REMOTE_ADDR'])); fclose($f); str_replace(' '.$_SERVER['REMOTE_ADDR']."\n", null, $last, &$nb); if ($nb > $max_acces) die('Trop d\'accès en peu de temps ! Seriez-vous un méchant ? Ou pire ? Une méchante ???');
  13. ZeBrian

    Besoin d'avis d'experts

    Bonjour, Dans le cadre de la programmation d'un forum, se pose à moi le problème du flood : en effet, j'aimerais empêcher les petits hackers de faire trop de requêtes à la fois, et ce sans utiliser MySQL dans mon script antiflood puisqu'un serveur MySQL est vite saturé J'aimerais donc votre avis sur un petit script que j'ai écrit : y a-t-il des failles possibles, si oui lesquelles, et quels seraient les éléments à améliorer pour m'en sortir sans base MySQL ? Le principe est simple : à partir des variables $intervalle et $max_acces, le script empêche un visiteur de charger plus de $max_acces fois une page pendant $intervalle secondes. Voici donc le code ! <?php $intervalle = 3; $max_acces = 10; if (!file_exists('cache')) $cache = ''; else $cache = file_get_contents('cache'); $good = false; $current = time(); $temp = $cache; while (true) { $pos = strrpos($temp, "\n"); $time = substr($temp, $pos + 1, 10); if ($time < $current - $intervalle) break; $temp = substr($temp, 0, $pos); } $last = substr($cache, $pos)."\n"; $f = fopen('cache', 'w'); fputs($f, $last.$current.' '.str_replace("\n", null, $_SERVER['REMOTE_ADDR'])); fclose($f); str_replace(' '.$_SERVER['REMOTE_ADDR']."\n", null, $last, &$nb); if ($nb > $max_acces) die('Trop d\'accès en peu de temps ! Seriez-vous un méchant ? Ou pire ? Une méchante ???'); /* A partir d'ici, on écrit le reste du code (ou bien sûr, on utilise un include) */ ?> Auriez-vous des conseils à me donner pour améliorer le script ? Peut-être que je ne devrais surtout pas faire comme cela, qui sait Bonne soirée et merci d'avance ! EDIT : Voir plus bas (post #3) pour la nouvelle version
  14. Excuse-moi de ne pas avoir été clair, en fait le problème est que je ne peux pas avec ce code connaître le numéro de la page à laquelle on se situe actuellement ! En tout cas merci des tes réponses EDIT : Ehm excuse du dérangement, je viens de penser que cela fonctionnera à merveille : SELECT COUNT(*) FROM `messages` WHERE parent='3' AND id < $n Encore désolé d'avoir posé une question aussi bête :S
  15. Merci sarc, mais ta réponse ne me convient pas parfaitement ' En fait, ma table est bien numérotée par auto_increment, sauf qu'il peut y avoir des messages supprimés qui fausseraient donc le décompte. D'autre part, je suis parfaitement d'accord qu'utiliser le numéro de page est infiniment plus logique, c'est d'ailleurs ce que je fais généralement ! Seulement ici, le problème est différent : en fait, c'est la situation où l'utilisateur vient d'éditer son message. Après avoir validé le formulaire de modification, il semble logique qu'il soit redirigé vers la page contenant son message ! Or je ne vois aucun moyen de connaître la page exacte par une simple requête MySQL... Une solution parfaitement fonctionnelle serait, lorsque l'utilisateur clique sur le bouton "éditer", de passer en paramètre le numéro de la page où il se trouve actuellement... Seulement, j'aimerais par simple curiosité savoir s'il y a une alternative avec MySQL
  16. Bonjour, Je fais appel à vos savoirs pour répondre à une problématique relativement simple qui se pose à moi dans le cadre d'une application PHP/MySQL. Pour un système de pagination, j'aimerais pouvoir, avec pour seule donnée la clef primaire désignant un élément, connaître d'avance sa position dans le tableau de résultats retourné par MySQL après une certaine requête. Exemple : Admettons que j'ai une table "messages" avec pour clef primaire "id". Chaque message appartient à un topic : ainsi, sa colonne "parent" comporte la valeur de la colonne "id" du topic. J'aimerais donc pouvoir savoir à quelle ligne correspondra le message que je veux sélectionner lorsque je ferai une requête MySQL du type : SELECT * FROM `messages` WHERE parent=3 ORDER BY `id` ASC Tout cela dans le but d'écrire à la place : SELECT * FROM `messages` WHERE parent=3 ORDER BY `id` ASC LIMIT n, 10 où "n" représente le numéro du message que je veux sélectionner. Pour l'instant, je ne vois d'autre solution que faire la requête globale et parcourir le tableau jusqu'à trouver le message, et afficher les 10 messages qui suivent, ce qui représente à mon avis un gros gâchis ! Auriez-vous des informations pouvant m'aider ? Merci !
  17. OK je pense que je vais faire comme ça Merci à toi ! EDIT : J'ai trouvé une autre manière de faire, avec un petit appel à la fonction eval qui permet d'éviter de recopier la fonction class Papa { protected static $variable_genante = 'abc'; public static function affiche ($name = 'self') { eval('echo '.$name.'::$variable_genante;'); } } class Fiston extends Papa { protected static $variable_genante = 'def'; public static function affiche () { parent::affiche('Fiston'); } } Fiston::affiche();
  18. En effet j'ai un peu exagéré, elle fait 20 lignes bien aérées Sinon, qu'est-ce qu'un "assesseur" ?
  19. En réalité, la fonction affiche() fait plus de 50 lignes et j'ai 4-5 classes qui doivent l'inclure avec pour chacune des variables statiques de valeurs différentes... S'il me faut un jour modifier légèrement la fonction affiche() - ce que je devrai forcément faire - j'aurai 5 classes à modifier !
  20. L'autre solution, que je trouve un peu plus rapide, c'est de regarder le code source de ta page dans ton navigateur, où les sauts de ligne apparaîtront. Sous Firefox, le raccourci clavier est CTRL + U
  21. Bonjour, Ne m'étant lancé que récemment dans les fonctionnalités objet de PHP5, j'y découvre de nombreux atouts mais forcément, je me vois confronté à quelques hics... En voici donc un qui m'importune particulièrement ! Tout d'abord, le code : class Papa { protected static $variable_genante = 'Papa'; public function affiche () { echo self::$variable_genante; } } class Fiston extends Papa { protected static $variable_genante = 'Fiston'; } $t = new Fiston; $t -> affiche(); Ce code affiche "Papa" alors que j'aurais beaucoup apprécié qu'il m'affiche poliment "Fiston"... Bien sûr, je me doute que l'erreur est due à l'utilisation du mot clef "self" dans la classe Papa, qui n'est pas réinterprété lors de l'héritage et qui désigne donc toujours la classe "Papa" lors de l'appel à la fonction affiche() depuis une instance de Fiston ! Je pourrais parfaitement contourner ce problème en utilisant des variables non statiques, sauf qu'éthiquement parlant, ça me fait mal au coeur : en effet, ces variables ont pour vocation de ne pas être instanciées puisqu'elles dépendent uniquement de la classe ! L'autre solution serait de réécrire la fonction affiche() mot pour mot dans Fiston, mais là aussi ce serait bien moche... J'en viens donc à ma question : comment faire ? Merci d'avance pour vos réactions !
  22. Bonjour, Je suis novice en Java, et je dois dire que j'ai un peu du mal à faire la différence entre les différents types d'images : Graphics, Graphics2D, Image, BufferedImage... Tout d'abord, j'aimerais savoir comment faire pour manipuler une image pixel par pixel et l'afficher à l'écran. Ensuite, étant donné que l'applet en question sera intégré dans une page web, j'aimerais pouvoir proposer aux utilisateurs d'enregistrer l'image en question sur le disque dur... Pour la manipulation d'images, j'utilise actuellement une classe héritée de JPanel où j'ai surchargé la fonction "paint", et où pour créer chaque pixel je dessine un rectangle de dimension 1x1... Autant dire que c'est assez bourrin ! Merci d'avance pour vos réponses !
  23. L'utilisation oui, mais la publication d'outils, c'est un peu moins vrai... J'ai réussi à obtenir le numéro d'un responsable au ministère de la Défense, reste plus qu'à l'appeler ! Je vous donnerai plus d'infos quand il sera revenu de week-end
  24. Ah tiens ? Merci de l'info A vrai dire, je ne sais pas vraiment où me renseigner à ce sujet... Aurais-tu des sources plus précises ? Edit : En plus, maintenant que l'algorithme est capable de crypter n'importe quel fichier dans une image (on peut par exemple dissimuler une image de 800x600 pixels sans problème dans une image de 500x360), il faut que je trouve un moyen d'empêcher les utilisations malsaines (pédophilie...) de mon outil
×
×
  • Créer...