Aller au contenu

TheRec

Hubmaster
  • Compteur de contenus

    1 777
  • Inscrit(e) le

  • Dernière visite

Tout ce qui a été posté par TheRec

  1. TheRec

    expreg email

    Bonsoir, J'aime bien cette fonction : function is_valid_email_address($email){ $qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'; $dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'; $atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'; $quoted_pair = '\\x5c[\\x00-\\x7f]'; $domain_literal = "\\x5b($dtext|$quoted_pair)*\\x5d"; $quoted_string = "\\x22($qtext|$quoted_pair)*\\x22"; $domain_ref = $atom; $sub_domain = "($domain_ref|$domain_literal)"; $word = "($atom|$quoted_string)"; $domain = "$sub_domain(\\x2e$sub_domain)*"; $local_part = "$word(\\x2e$word)*"; $addr_spec = "$local_part\\x40$domain"; return preg_match("!^$addr_spec$!", $email) ? 1 : 0; } Source: http://iamcal.com/publish/articles/php/parsing_email Certes elle n'est pas très "lisible", mais elle a l'avantage d'avoir été crée en fonction de la RFC 822 qui définit entre autres les spécificités et limites de la composition d'une adresse e-mail. Bonne continuation.
  2. Bonsoir, Je ne suis pas partisan des expressions rationnelles dans des cas "simples" comme celui-ci, je ferai ça ainsi... le résultat est sensiblement le même, donc à toi de faire ton choix $url = 'http://www.domaine.fr/sousrep/4/10/page.php'; $dirpath = substr($url,0,strrpos($url,'/')+1); Note toutefois que ce code (et celui de dièse) ne fonctionne pas pour une URL ou le dernier répertoire n'est pas suivi d'un "/" (trailing-slash), par exemple : [i]http://www.domaine.fr/sousrep/4/10'>]http://www.domaine.fr/sousrep/4/10 devient [i]http://www.domaine.fr/sousrep/4/ Je mentionne cela car les URL omettant le trailing-slash sont courantes (et fondamentalement pas valide, sans le trailing-slash ce qui vient après le dernier slash devrait être considéré comme un fichier, m). Bonne continuation.
  3. TheRec

    pb pop up avec php

    Bonjour, Pour ouvrir un popup tu as besoin de Javascript, hors dans le code que tu présentes il n'y a pas réellement du Javascript, tu as juste mis les paramètres de la fenêtre dans faire l'appel à la fonction window.open. Le passage de l'ID de l'article n'est pas trop compliqué, comme tu le dis il suffit de le faire en PHP avec un "echo" dans l'URL qui sera ouverte lors de l'appel à "window.open". Voici un exemple : <?php echo '<a href="commentaire.php?var='.$id.'" onClick="java script:window.open(this.href, \'_blank\', \'toolbar=yes,status=yes,menubar=yes,width=500,height=300\'); return false;">Ajouter un commentaire</a>'; ?> Le "return false;" sert à ne pas suivre le lien si la fenêtre popup a été ouverte avec succès, cela permet de rester accessible pour les utilisateurs n'ayant pas Javascript "activé". P.S.: Au passage, dans ton code HTML, ce n'est pas correct d'utiliser un "id" identique (par exemple tu utilise id="main" à plusieurs reprises). Les ID en HTML/xHTML doivent rester uniques. Tu dois utiliser des classes CSS lorsque des éléments vont se répéter. Donc dans ton code HTML class="main" à la place de id="main" et dans la CSS : .main { } à la place de #main. Bonne continuation.
  4. Bonjour, Non pas à ma connaissance... seule la propriété background-position (et son équivalent avec la porpriété background) permettent de gérer la position de ce qui correspond à ta "puce". Je ne trouve pas cela "bourrin"... tu utilises des propriétés qui sont valides, rien de plus. Enfin c'est une question de point de vue... l'essentiel pour moi étant la sémantique de la page et dans ce cas elle est conservée **EDIT** list-style-position permet de définir si le texte de la puce est indenté (variation de l'indentation avec text-indent si je me souviens bien) vers l'intérieur ou l'extérieur de la puce.
  5. TheRec

    Group by, or not ?

    Bonsoir, Pour schématiser, la clause GROUP BY ne permet pas directement d'obtenir les résultats que tu souhaites. Elle est utilisée pour permettre au fonction d'agrégation (SUM, AVG, etc.) d'être exécutée individuellement chaque valeur d'une certaine colonne. Cette partie de ce cours sur SQL t'expliquera mieux (et par l'exemple) ce dont il est question. Pour réaliser ce que tu veux, tu peux effectivement utiliser GROUP BY pour récupérer tous les libellés (Libellé_1, Libellé_2, etc.) et éventuellement des "statistiques" qui y sont liées (Nombre de titres, etc.) et ensuite avec le langage de programmation que tu utilises (PHP) parcourir les résultats et obtenir les titres pour chaque libellé. C'est une solution assez coûteuse au niveau des ressources MySQL (une requête pour les libellés... puis une requête par libellé... pour une utilisation à petite échelle pourquoi pas :S). Sinon la solution du ORDER BY semble la plus appropriée... ensuite à toi de réaliser la partie logique qui en parcourant les résultats "séparera" les libellés (il suffit de stocker le dernier libellé et le comparer au libellé courant de le boucle... s'il est différent tu effectue une séparation). Cette solution est très peu coûteuse au niveau des ressources. Bonne continuation. P.S. : Le ORDER BY serait : ORDER BY libelle ASC, date DESC Étant donnée que tu souhaite trier les éléments également par date.
  6. Sois le Bienvenu dragonpeer ! J'espère que tu pourras partager tes connaissances avec nous également. Bravo et bonne continuation pour ton site tout neuf (enfin d'après les dates des news), il a ouvert le jour de mon anniversaire (ça devrait lui porter chance... enfin à moi ça m'en a porté ). Au plaisir de te relire.
  7. Non c'est bien à toi que je m'adresse, bien que tu ne soit pas la personne ayant commencé ce sujet Je te réponds au sujet des performances du "SELECT *" car tu semblais te poser des questions... je t'expliquais comment prouver ce que tu avançais (sans vraiment être sûr de toi), mais j'ai utilisé les informations qu'avait donné davidc1 uniquement à titre d'exemple Et effectivement cela permet d'effectuer des mesures sur des données... il faut le coupler à un générateur de données bien entendu.
  8. baboon> C'est assez "facile" de tester ce que tu avances plus haut, en utilisant le benchmark fourni par MySQL : BENCHMARK(nombre_de_fois,expression) Dans notre cas il suffit de comparer les résultats de temps obtenus avec une fois : SELECT BENCHMARK(10000000,'SELECT * FROM osc'); et SELECT BENCHMARK(10000000,'SELECT le_champ_id FROM osc'); J'ai fait exprès d'exagérer le nombre d'exécution, le teste peut prendre plusieurs secondes mais c'est un bon moyen de voir une différence significative entre les deux solutions... et en définitive on s'aperçoit qu'effectivement les deux solutions obtiennent sensiblement les même résultats. La différence se verra à mon avis lors du traitement des données, moins de données a récupérer, moins de temps processeur et de mémoire à utiliser.
  9. Bonjour, Et si tu n'as pas défini d'INDEX (simple... pas FULLTEXT) sur le champ BHSELLER, il faut le faire. Je ne peux pas garantir un impact sur le performance, mais il faut également éviter (par pure logique de typage) de donner une valeur sous forme de chaîne de caractère (p.e. BHSELLER = '237') alors que le champ est un entier (enfin selon toute logique... si c'est un id )... MySQL fait le transtypage sans problème mais je suppose que cela consomme tout de même plus de ressource (enfin pas énormément non plus) Si tu peux nous présenter la structure de ta table (que tu obtiens en exportant ta table avec un outil comme PHPMyAdmin ou même mysql_dump), cela nous aidera dans la résolution de ton problème.
  10. TheRec

    Bug de PHP/GD ?

    Il serait intéressant (pas pour moi uniquement) de partager cela avec la communauté, pourrais-tu poster le code en question s'il te plaît ? Merci d'avance.
  11. De rien, ça vaut toujours la peine de se pencher sur le manuel, mais avant il faut le trouver
  12. Bonjour, Cest une peu la discussion que nous avions eu dans ce sujet (il y a quelques temps), la pérennité du code d'une site n'est pas à prendre à la légère... les navigateurs modernes sont mis à jour à une cadence plus élevée que tous les 6-7 ans (temps écoulé entre IE6 et IE7). L'utilisation de hacks, par leur nature (ils exploitent des défauts, des bugs d'un ou plusieurs navigateurs), se verront corrigé tôt ou tard et le code caché à l'aide d'un hack se trouvera alors visible et certainement interprété... Karnabal a tout à fait raison, les commentaires conditionnels sont la bonne alternative aux hacks... le seul problème est qu'il ne fonctionnent que sous Internet Explorer... donc si tu but est de masquer du code (HTML, CSS, ...) aux autres navigateur tu n'as pas vraiment de solution viable, sachant que la détection de navigateur (que ce soit en Javascript, avec un langage interprété côté serveur tel PHP, etc.) ne sont pas non plus pérennes). Personnellement les commentaires conditionnels m'ont toujours suffit et je ne vois pas vraiment ce que je voudrait cacher à Firefox ou aux autres navigateur qui généralement interprètent bien les pages
  13. Bonjour, Voici une possibilité : UPDATE ja_book SET description = REPLACE(description,'http://www.domaine.tld/images/site/image.gif', '/images/image.gif') WHERE description LIKE '%http://www.domaine.tld/images/site/image.gif%' Concernant la syntaxe et les fonctions sur les chaînes de caractères sous MySQL, rien ne vaut le manuel MySQL (depuis la version 5 il est traduit entièrement en français, si tu utilises une version précédente fais attention, mais généralement les auteurs mentionnent la version qui fût la première à intégrer telle ou telle fonctionnalité) Bonne continuation.
  14. TheRec

    Bug de PHP/GD ?

    De rien. À mon avis le temps d'évaluer quel pixels sont manquants tu auras déjà fini de faire ton dégradé avec imagefilledellipse, mais ce n'est qu'à vue de nez que je te dis ça (as-tu fait des mesures entre imageellipse et imagefilledellipse ?), il faudrait coder cette fonction et comparer les deux méthodes. D'ailleurs tu n'es pas le premier à te pencher sur ce problème et tous semblent avoir optés pour imagefilledellipse : Sans support Alpha (dans les commentaires du manuel PHP) Avec support Alpha (dans les commentaires du manuel PHP) Classe permettant divers type de dégradés Bonne chance et si tu réussis à coder la fonction corrigeant les pixels manquants à cause des arrondis cela serait sympathique de la partager avec nous
  15. TheRec

    Bug de PHP/GD ?

    Bonsoir, Petite question avant de vraiment chercher à résoudre ce problème, pourquoi ne pas utiliser imagefilledellipse qui fait le travail dont tu semble avoir besoin. Deuxièmement je ne vois pas ce que tu cherches à faire avec le "0.1" les pixels sur un écran ne peuvent être qu'entier (c'est pour cela que tous les paramètre concernant les pixels de l'image dans les fonctions de GD/GD2 sont des entiers) donc décaler de 0.1 ou 1 ne changera rien. Ces "points noir" sont en fait simplement les point théorique où l'ellipse que tu dessines ont une valeur "médiane" (.5) et l'algorithme utilisé pour suivre cette "ligne" (courbe) est prévu pour utiliser des entier donc il arrondi soit vers le haut soit vers le bas pour trouver le point le plus proche. Bref ce n'est pas un bug, simplement une limitation due à l'affichage par "pixels" (maintenant si tu connais un autre moyen pour afficher une image sous forme digitale dépêche toi de la breveter ) Tu pourrais t'amuser à coder une fonction qui retrouve ces points noire à chaque fois qu'une ellipse est dessinée dans ta boucle (il suffit d'analyser la façon d'arrondir utilisée par l'algorithme de imageellipse et d'utiliser une matrice correspondante), mais franchement ça parait inutile, autant utiliser un seul appel (sans boucle) de la fonction imagefilledellipse Bonne continuation ! P.S. : N'oublie pas de supprimer les "image ressources" (imagedestroy) que tu crée à la fin de ton script... ce n'est pas primordial en PHP, mais comme pratique de programmation en général c'est très important (surtout lorsqu'il n'y a pas de garbage collector... heureusement PHP en a un bon).
  16. Bonjour, Merci beaucoup pour ce lien, c'est effectivement plus pratique que les versions "standalone".
  17. Bonjour, Le script fonctionne très bien à mon avis, du moins lorsque je l'ai testé (avec un serveur Windows et un serveur Linux, sans avoir de droits particulier à part ceux de lecture sur le dossier où se trouvaient les images) je n'ai eu aucune erreur :S Lorsque tu obtiens ce message d'erreur avec la fonction getimagesize, est-ce que la boucle continue à afficher les images ? Si ce n'est pas le cas c'est que les chemins vers ces images sont effectivement erronés. Regarde la source HTML que génère ton script et vérifie que le chemin vers les images sont corrects. Le message d'erreur est assez clair, la fonction getimagesize n'a pas trouvé le fichier que tu lui demande d'ouvrir... vérifie que le chemin que tu fourni à cette fonction est valide (fait un "echo $chem_img."/".$listef[$i];"), si c'est un chemin relatif essaie d'utiliser un chemin absolu (essaie peut-être d'utiliser realpath). Bonne continuation
  18. Bonsoir, C'est effectivement un point qui ne me convainc pas actuellement avec BlogoText :S Pluxml est plus cohérent de ce côté. Et après avoir parcouru le code source, il en ressort que l'auteur n'a pas opté pour une programmation orientée objet... pas que cela soit essentiel (surtout dans le cadre d'une "petite" application) mais c'est tout de même un paradigme qui permettrai une évolution collaborative facilitée et beaucoup d'autres avantages que je ne citerai pas ici. Dans tous les cas, en l'état (Bêta) et pour l'utilisation qui est prévue ce n'est pas un problème et après quelques tests je trouve que BlogoText s'en sort très bien ! Merci davidm pour cette découverte, c'est un outil de blog à surveiller !
  19. TheRec

    a:link

    Bonsoir, As-tu défini la a couleur de pseudo-classe :visited pour ton lien ? Par exemple: a:visited { color: #666;}
  20. Bonsoir, Rien que pour rester dans la ligne qualitative du Webmaster Hub, il faut que je précise que le trafic est traîté en fonction des adresses MAC et non des adresses IP sur un switch (commutateur), mais ce n'est qu'un détail. C'est effectivement exactement l'idée que je me fais du Hub, une concentration et un partage complet de connaissances. À la différence près qu'un hub (l'équipement réseau) sera bien plus vite surchargé que la "machine de guerre" mise en place et entretenue par Dan pour héberger Webmaster Hub
  21. C'est justement le problème qu'on résoud avec les assertion dans l'expression régulière... l'assertion sert à vérifier que les caractères avant ou après (selon la syntaxe) correspondent au sous-masque avec lequel elle est liée En l'occurence on vérifie que ce qui se trouve après "&" ne correspondent pas à "amp;". Mais effectivement si il y a d'autre autres entités HTML qui se trouvent dans le document, elles verront leur "&" remplacée par "&amp"... et c'est selon le premier message de captain_torche ce dont il avait besoin. S'il faut prendre en compte toutes les entités ça va devenir plus difficile
  22. Il n'existe pas de solution de sauvegardes universelle, il faut tout d'abord définir tes besoins : tailles des sauvegardes, périodicité, moyens, sécurité, etc. À titre personnel, j'ai un deux disque en RAID1 pour mes données et deux autres disque dans un boîtier externe en RAID1 également qui est utilisé quotidiennement pour des sauvegardes automatisées (certaines données sont sauvegardées chaque heure, d'autres chaque jour et certaines "archives" sont sauvegardées plus rarement) de disque à disque. Ainsi la défaillance d'un ou deux disques simultanément n'occasionne pas de pertes de données majeures (selon mes critères bien entendu). Le cas le plus limite serait que les deux disques pour les données soient hors service en même temps, mais même dans ce cas les sauvegardes restent disponibles. Maintenant ça ne me protège pas de certains problèmes : feu, inondations, etc. car toute stratégie de sauvegarde doit prévoir la sécurisation physique des sauvegardes après leur exécution (placer les médias en lieu sûr). Cela laisse tout de même la possibilité de rapidement (grâce au boîtier externe) emporter les données sil y a un problème. Les sauvegarde s'effectuent grâce à Cobian Backup 8 qui ne paie pas de mine mais qui permet d'effectuer ces sauvegarde facilement. Et surtout il est gratuit ce qui nest pas négligeable lorsquon regarde le prix démesuré de certain logiciel de sauvegardes. Si tu as les moyens financiers, la place et la tolérance au bruit, tu peux t'équiper d'un lecteur de bandes (DLT, DAT, Travan (berk!), ...) avec chargeur (car on sait bien que personne n'a la volonté de changer en permanence manuellement les bandes) mais c'est très onéreux à mon avis pour un usage privé. Il existe aussi des solution comme le Iomega REV35 ou REV70 qui permettent de sauvegarder sur un média amovible de respectivement 35GB et 75GB, mais je ne me suis pas orienté cers cette solution car c'est un format propriétaire (très important si tu archives des médias), c'est onéreux et je n'ai jamais été convaincu par les solutions Iomega (Zip, Jazz, etc.). Une dernière solutions que j'utilise pour certaines données moins sensible mais nécessitant tout même d'être sauvegardée et sécurisée physiquement, c'est d'envoyer ces fichiers sur un serveur FTP (qui lui-même aura généralement sera protégé contre les défaillances et sera sauvegardé). OVH propose un solution de ce genre, mais personnellement j'utilise l'espace sécurisé mis à disposition par Infomaniak avec chaque hébergement mutualisé (Cobian Backup 8 permet également le transfert de données vers ou à partir dun FTP). Bonne continuation.
  23. Bonjour, En mettant le code que tu as déjà réalisé tu auras certainement une réponse qui collera plus à ce que tu attends Maintenant tu peux éventuellement convertir tous les & en simple & avant de commencer le remplacement des autres &... ce n'est peut-être pas la solution la plus optimisée, mais c'est une solution tout de même (du moins si j'ai bien compris ce que tu souhaites). Sinon il faut peut être regarder du côté des "Assertions", tu as une explication complète sur la syntaxe dans le manuel PHP. Bonne chance. *EDIT* Ben grillé quoi
  24. TheRec

    Format TIMESTAMP

    Bonjour, Si tu tiens à le faire en PHP tu peux faire ainsi : $timestamp = date("Y-m-d h:m:n",strtotime($timestamp) - 1)); strtotime converti un timestamp de format quelconque (avec certaines limitation, voir manuel) en timestamp Unix. Le timestamp Unix étant le nombre de secondes depuis le premier janvier 1970 à minuit (GMT) tu peux soustraire un nombre de secondes et revenir au format désiré avec la fonction date et le format que tu souhaites (voir manuel). Ce n'est pas très "académique", ni très fiable car si tu dois traiter des dates avant 1970, ces fonctions PHP ne fonctionnent plus. Sinon en SQL, du moins en MySQL, tu peux utiliser la fonction SUBTIME (MySQL >= 4.1.1) : SELECT SUBTIME(champ_avec_ton_timestamp,'1' FROM ta_table) Bonne continuation.
  25. Bonjour, Si tu souhaites faire ceci directement avec MySQL tu peux utiliser la fonction SUBSTRING_INDEX (MySQL >= 3.23). L'usage de cette fonction se fera ainsi dans ton cas : SELECT SUBSTRING_INDEX(champ_avec_tes_mots,',',10) FROM ta_table Et tu peux tout à fait récupérer les autres champs en même temps Bonne continuation. P.S.: La solution PHP est tout à fait valable et bien entendu si tu ne veux pas charger inutilement ton serveur de base de donnée (si toutefois c'est un autre serveur que celui s'occupant de l'interprétation du PHP), utilise la solution PHP. Enfin, j'ai quand même l'impression que la charge générée par cette fonction est minime
×
×
  • Créer...