Aller au contenu

MarvinLeRouge

Hubmaster
  • Compteur de contenus

    800
  • Inscrit(e) le

  • Dernière visite

Messages postés par MarvinLeRouge

  1. Bonjour,

    Voilà, j'ai une requète du type :

    SELECT id_categorie, nom
    FROM categories
    WHERE id_categorie IN (valeurA, valeur B, valeurC)

    Je ne vois pas comment faire pour être sûr que les résultats me soient restitués dans l'ordre des valeurs fournies. Je m'explique : si valeurA vaut 23, valeurB 2 et valeur3 158, je veux que mon résultat récupéré soit

    23 - nomdu23

    2 - nomdu2

    158 - nomdu158

    Est-ce le cas par défaut avec un IN, ou sinon quelqu'un connaîtrait-il le truc pour obtenir ça ?

    Merci

  2. Hip hip hip hourra ! :D

    Bon, j'ai constaté que quand j'insérais des données dans ma table, même depuis phpmyadmin, ça foirait à l'affichage dans phpmyadmin.

    J'ai donc suivant tes conseils recréé une table, en choisissant à la création un interclassement utf8_unicode_ci. Et là, pour peu que je mette le SET CHARACTER SET UTF8 à la connexion, ça marche, en écriture et en lecture, aussi bien depuis mon script que dans phpmyadmin.

    Bon, je ne peux pas légalement t'épouser en France (je suis déjà marié), donc disons que je te dois un coup à boire la prochaine fois que je passe sur Lyon ou que tu passes sur Toulon. Parce que là, tu m'as enlevé un baobab du pied, honnêtement :thumbup:

  3. Salut,

    J'y comprends rien : quoi que je fasse sur le character set de la table ou son interclassement, rien n'y fait : si je touche au character_set au niveau de la connexion, j'ai du pâté partout; si je n'y touche pas, c'est incorrect dans la bdd, mais correct à la récupération des données.

    J'ai essayé diverses options :

    mysql_query ("SET CHARACTER SET UTF8");
    mysql_set_charset ("utf8");
    mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'");
    mysql_query("SET NAMES 'utf8'");

    J'ai remarqué un truc dans les variables du serveur MySql :

    character_set_client utf8

    character_set_connection utf8

    character_set_database utf8

    character_set_filesystem binary

    character_set_results utf8

    character_set_server latin1

    character_set_system utf8

    J'ai beau essayer, je ne peux pas passer le character_set_server à utf8. Est-ce que ça ne viendrait pas de là ?

  4. Et bien comment dois-je faire pour "passer ma table en utf-8" ? Ma bdd étant en utf-8 au départ, je pensais que les tables l'étaient elles aussi, et je ne trouve sous phpMyAdmin aucune indication là-dessus.

    Pour info, j'ai trouvé une page sous phpMyAdmin affichant un certain nombre de variables de la bdd, voici celles qui me semblaient le plus pertinentes :

    character set client utf8

    (Valeur globale) latin1

    character set connection utf8

    (Valeur globale) latin1

    character set database latin1

    character set filesystem binary

    character set results utf8

    (Valeur globale) latin1

    character set server latin1

    character set system utf8

    character sets dir /usr/share/mysql/charsets/

    collation connection utf8_unicode_ci

    (Valeur globale) latin1_swedish_ci

    collation database latin1_swedish_ci

    collation server latin1_swedish_ci

  5. Bon ben c'est pas simple cette histoire :

    SET CHARACTER SET UTF8 semble marcher, mais uniquement pour les caractères d'europe de l'ouest.

    Si je mets du français ou de l'allemand, ça passe, et le contenuu en bdd est correct.

    Si je mets du russe, tout est faux (alors que la représentation bdd était mauvaise avant, mais corrigée à la récupération).

  6. Indice supplémentaire : j'ai inséré, avec phpmyadmin, la valeur 'adélaïde'. Si je veux la récupérer depuis ma page de lectyure d'info, il faut que je mette

    WHERE titre = '" . utf8_decode ("adélaïde") . "' dans la requète dans ma page.

    Comment dois-je faire pour indiquer à mon script de se connecter à la bdd en utf-8, en lecture comme en écriture ?

  7. Bon alors :

    • Pour la connexion à la bdd en utf-8, j'ai cru comprendre qu'il fallait utiliser set names, mais quand je l'ai fait ça m'a tout pété, dans la bdd comme à l'affichage
    • Bdd : Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
    • Bdd : Interclassement pour la connexion MySQL: utf8_unicode_ci
    • Table de test : format Compact, Interclassement latin1_swedish_ci

    J'ignore si la table peut avoir un encodage différent de la bdd.

    Existe-t-il une marche à suivre, pas à pas, pour être bien sûr de la chaîne d'encodage ?

    N.B. : On parle ici d'un site en création, donc les données qui sont actuellement en bdd n'ont aucune importance, je peux les brûler 100 fois si je veux.

  8. Salut,

    J'ai un pb d'encodage : je dois faire un site en utf-8 (internationalisation, alphabets divers), et je n'y suis pas habitué.

    • J'ai enregistré mes fichiers php en UTF8 sans BOM (quand je mettais UTF8 tout court, j'avais du contenu parasite dans le début d'affichage)
    • J'ai une page de saisie et une page d'affichage
    • Les 2 me sont bien indiquées comme "utf-8" par Firefox
    • le contenu affiché correspond au contenu saisi
    • MAIS le contenu en bdd contient des tas de caractères bizarres dans phpmyadmin , comme si le contenu n'était pas stocké" en utf-8 (alors que la bdd est bien en utf-8)

    Mon interprétation : il y a une rupture quelque part dans la chaîne d'encodage (au niveau de la liaison avec la bdd je suppose), mais ce problème est invisible côté client car il y a un passage utf-8 -> iso8859-1 dans un sens et le contraire dans l'autre sens.

    Or, je voudrais que le contenu de la bdd soit cohérent, afin d'avoir la possibilité de l'éditer directement via phpmyadmin au besoin.

    Please help

  9. Salut,

    J'ai à faire un traitement sur une chaîne de caractères : j'ai un tableau associatif contenant des variables, et je voudrais remplacer toutes les occurences de ces variables dans mon texte (qui sont sous une forme genre ***nomDeVariable***) par leur valeur dans ce tableau.

    J'ai pensé utiliser un preg_match_all pour trouver les occurences, puis faire une boucle sur les résultats avec un str_replace.

    J'aurais bien utilisé un preg_replace, mais je ne vois pas comment lui dire de remplacer chaque occurence par la variable correspondante.

    Si quelqu'un a une idée pour améliorer ça, je suis preneur.

    Merci

  10. Alors :

    • J'ai essayé avec $_SERVER ["HTTP_IF_MODIFIED_SINCE"], ça ne donne rien (la valeur n'y est d'ailleurs pas quand je fais un print_r ($_SERVER))
    • Pour le ob_gzhandler, c'est pas faux. C'est du code récupéré à droite à gauche, j'aurais modifié ça plus tard.
    • Pour la duplication de code, j'avais vu ça dans l'intervalle :)
    • Pour le readfile, tu as raison à 100% (ah ces copier-coller de code entre 2 paragraphes :D)
    • Je ne peux malheureusement pas prendre que les 404 pour l'instant en raison de l'architecture, et puis ça enlèverait l'avantage de la compression (à moins qu'on puisse stocker les pages sous forme compressée, ce que j'ignore)
    • Et pour le header 304, existe-t-il une méthode qui marcherait en fast-cgi ?

  11. Salut,

    Je cherche à mettre en place une gestion de cache intelligente fonctionnant sur le principe suivant :

    1) Toute requète de page html est redirigée vers page.php

    1.1) si la page demandée fait partie de l'ensemble des pages "articles" (les pages qui sont mises en cache) :

    1.1.1) si elle existe en cache, je compare sa date de dernière modification à l'en-tête "if-modified-since"

    1.1.1.1) si les dates correspondent, je veux renvoyer un code "304 not modified", sans renvoyer la page

    1.1.1.2) sinon, je dois renvoyer la page en spécifiant son header "last-modified" (en la gzippant au assage histoire d'économiser la bande passante)

    1.1.2) si elle n'existe pas en cache, je la génère, je la stocke en cache, et je la renvoie en spécifiant son header "last-modified"

    Pb : Je n'obtiens jamais une réponse 304 quand je consulte une page, et je n'arrive pas à récupérer le paramètre "if-modified-since". Je renvoie donc systématiquement la page, et je préfèrerais éviter. Si quelqu'un qui a déjà été confronté à cette problématique pouvait me donner des pistes, ce serait super (me manque-t-il des headers par exemple).

    Ci-après mon code de test

    if (file_exists ($cache_file))
    {
    $if_modified_since = preg_replace('/;.*$/', '', $HTTP_IF_MODIFIED_SINCE);
    $mtime = filemtime($cache_file);
    $gmdate_mod = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
    if ($if_modified_since == $gmdate_mod)
    {
    header ("HTTP/1.0 304 Not Modified");
    exit;
    }
    header("Last-Modified: $gmdate_mod");
    ob_start("ob_gzhandler");
    readfile ($cache_file);
    ob_end_flush();
    }
    else
    {
    file_put_contents ($cache_file, "Je suis l'article $id créé le " . date ("d/m/Y h:i:s") . "<hr />" . file_get_contents ("lipsum.txt"));
    ob_start("ob_gzhandler");
    readfile ($cache_file);
    ob_end_flush();
    }

  12. Salut,

    J'ai un petit pb avec une expression régulière : je souhaite supprimer les mots de moins de n caractères dans une chaine. Mon pb : si 2 mots "courts" se suivent, seul le premier est supprimé. Je suppose que c'est dû au fait que le caractère entre les deux mots a déjà été compté dans l'expression du premier mot. Je suppose que ça doit pouvoir se faire assez facilement (et sans passer la chaine en boucle infinie au regexp jusqu'à ce qu'elle ne change plus :D ).

    $pattern = "/ (\w){1,3} /";
    $replace = "";
    $str = preg_replace ($pattern, $replace, $str);

    Merci

  13. Salut,

    J'ai un petit pb avec un plugin Accordion de JQuery, qui apparemment a un effet sur le z-index de son contenu, ce qui est gênant puisque celui-ci est un menu déroulant.

    Quelqu'un saurait-il comment faire pour :

    • exécuter une fonction à la fin du déroulement de l'accordéon
    • ré-affirmer l'ensemble des css à ce moment là, si possible en restreignant la portée de cette action à un élément et ses descendants ?

    Merci

  14. Alors, je détaille :

    • le site concerné est en php, et le contenu de chaque page est le résultat de requètes base de données pour la récupération du contenu
    • le contenu de chaque page ne change pas trop couramment, c'est pourquoi je souhaite optimiser les traitements côté serveur (interprétation php, requètes sql ...)
    • je voudrais aussi que la page ne soit pas refournie si elle n'a pas changé depuis la dernière visite
    • et qu'elle soit compressée en sortie SI elle doit effectivement être envoyée au client

    Sauf erreur de ma part (c'est la première fois que je gère le cache) :

    • pour les 2 premiers points, ça se gère en créant une version "préinterprétée" de la page côté serveur, afin de minimiser les appels réels à la page php. J'avais pensé simplement effacer le fichier de cache concerné lorsqu'un page est modifiée. Ainsi, il devrait la re-créer et la refournir.
    • pour le point "modification depuis la denrière visite", j'ignore comment ça se gère
    • pour le point compression, il faut a priori activer zlib.output_compression, mais est-ce que ça n'a pas un "ordre" d'exécution par rapport à la façon dont le cache serveur agit ?

    Merci pour ton aide

  15. Salut,

    Voilà, je voudrais quelques conseils concernant la création d'un système de cache en PHP (je ne compte pas utiliser de systèmes pré-construit car je dois l'utiliser sur un hébergement mutualisé et que je doute des possibilités d'installation) :

    Comment faire pour que :

    - le serveur gère comme il faut la "if modified since" "last modified" sur une page qui est du php ?

    - le serveur compresse les outputs en gz, même lorsqu'il reprend la page en cache ?

    - il puisse y avoir des exceptions concernant les pages contenant des formulaires ?

    Merci

  16. Salut,

    Je ne suis pas du tout habitué aux CMS, mais je dois faire un mini-portail pour un groupe de copains gamers, et je n'ai pas le temps de me compliquer la tâche en faisant tout à la main. Donc je cherche un système de portail en php avec les fonctionnalités suivantes :

    • inscription simplifiée : champs login, password, email et "coalition" (une catégorie de membre à choisir parmi n)
    • identification login, password pour entrer sur le portail
    • messagerie inter-membres
    • chat
    • système de news sur la page d'accueil
    • aisément personnalisable en css

    Merci

  17. Salut,

    Je cherche, sous jQuery, à ce qu'une fonction se déclenche sur un évènement, pour tous les éléments correspondant à un sélecteur, SAUF l'élément ayant déclenché l'évènement. Je me doute qu'il faut utiliser not, mais je ne vois pas bien comment (j'ai essayé avec des syntaxes du genre :not($(this)), mais ça n'a pas l'air bon. En l'occurence, le but est, lorsqu'un élément de menu déroulant est sélectionné, de cacher tous les éléments "details" correspondant à des champs de formulaire (la classe form_elm_details), SAUF celui correspondant au select impliqué ET éventuellement celui correspondant à l'item sélectionné. Pour l'instant, je me contente de le cacher et de le remontrer, mais je ne voudrais pas d'un clignotement inutile si je peux m'en passer.

    $(".form_type_01 select").change(function()
    {
    var id = "#" + this.id + "_details";
    var option_id = option_id = "#" + this.options[this.selectedIndex].value + "_details";
    $(".form_elm_details_01").hide();
    $(id).show();
    $(option_id).show();
    });

    Merci

×
×
  • Créer...