Aller au contenu

MS-DOS_1991

Hubmaster
  • Compteur de contenus

    442
  • Inscrit(e) le

  • Dernière visite

Tout ce qui a été posté par MS-DOS_1991

  1. Merci de ta réponse Le problème est que c'est déjà le cas Ou alors je t'ai mal compris
  2. Bonjour à tous J'ai découvert la fonction preg_replace_callback il y a peu de temps, et l'utilise pour gérer le parsing d'un portail en xml... En gros, pour chaque noeud de mon fichier, j'appelle la fonction parsePortalBlockContent qui est définie dans ma classe Forum Le problème est que cette fonction appelle une autre méthode de la classe Forum qui elle-même utilise une méthode de la classe Database dont la variable dans la classe Forum est $db (euh... tout le monde suite là ? ) class Forum { private $db // ==> contient la classe Database qui gère la base de Donnée en MySQLi function autre_methode($arg) { return $this->db->query("SELECT ........."); } function parsePortalBlockContent ( ... ) { ... $sql_result = $this->autre_methode($arg); ... } et mon appel de callback se fait ainsi: <?php if ($block->parse_content != 1) : echo $block->content; else : echo preg_replace_callback('!\{(.*)\|(.*)\}!', array('Forum', 'parsePortalBlockContent'), $block->content); endif; ?> Le problème est que PHP m'affiche une superbe Erreur Fatale: ... Une idée ? P.S: J'ai essayé de remplacer $this->autre_methode() par self::autre_methode() mais cela ne marche que pour les méthodes de classe, pas pour les variables comme $db
  3. PR 4 pour le premier site ... et toujours 0 pour le second
  4. Le Canon est excellentissime par contre, quand passeras-tu à WordPress ?
  5. Pas de quoi Tant qu'à mettre des effets JavaScript, autant s'assurer qu'ils ne gèneront pas ceux qui n'en veulent pas (ou ne peuvent pas en profiter)
  6. C'est une excellente idée, idée que j'ai d'ailleurs implémentée dans mon blog sur les nouilles Le fait de cacher un élément en JavaScript est très simple : il te suffit d'attribuer un ID au bloc de contenu que tu souhaites rendre visible / invisible, puis de mettre le code suivant à la fin de ta page : <script type="text/javascript"> document.getElementById('id_du_bloc_a_cacher').style.display = 'none'; </script> Bien entendu, tu peux cacher ainsi plusieurs blocs (voire tous) afin de présenter une page "propre" au visiteur
  7. J'ai un seul noeud : <guests><user>...</user><user>...</user></guests> Mais sans le foreach ça plante et comme je ne sais pas (encore) comment dire à PHP comment aller à l'indice 0, je fais une itération de foreach ... En tout cas, merci beaucoup de ton aide
  8. Ca y est ! ça supprime $document = new DomDocument(); $document->load('././inc/online_users.xml'); $guests = $document->getElementsByTagName('guests'); foreach ($guests AS $guests) { $users = $guests->getElementsByTagName('user'); foreach ($users AS $user) { $found = false; foreach ($user->childNodes AS $node) { if ($node->nodeType != XML_ELEMENT_NODE) continue; if ($found) { echo 'current_user'; if ($node->tagName == 'last_activity_time') { $new_last_activity_time = $document->createElement('last_activity_time', 123); $user->replaceChild($new_last_activity_time, $node); continue; } } // Si on se trouve dans le bloc <user> du visiteur courant (on ne le savait pas encore) // Alors on passe au <tag> suivant elseif ($node->tagName == 'ip' && $node->nodeValue == $_SERVER['REMOTE_ADDR']) { $found = true; continue; } // Si on n'est pas dans le bloc <tag> de l'utilisateur courant et que l'utilisateur de ce tag est inactif depuis trop longtemps elseif ($node->tagName == 'last_activity_time' && time()-$node->nodeValue > 180) { echo 'user_to_be_removed'; $guests->removeChild($user); } } } } $document->save('././inc/online_users.xml'); Il me reste encore cependant à "updater" le noeud <last_activity_time></last_activity_time> en lui assignant la valeur du timestamp courant obtenu avec time(). J'ai épluché la doc et malheureusement, le seul moyen de modifier le contenu d'un noeud semble être... d'en créer un autre puis de remplacer l'ancien par le nouveau Mon code affiche bien "current_user", reconnaît bien le tag <last_activity_time> et la fonction replaceChild ne renvoie pas d'erreur, pourtant le noeud n'est pas mis à jour edit (le dernier ) : C'est bon, tout fonctionne . Ce n'est pas (si) compliqué le DOM XML (mais alors c'est lourd )
  9. Très franchement, cela m'étonnerait, d'autant plus que cette éventuelle fonction PHP aurait alors été développée pour des claviers QWERTY donc ne correspondant pas à tes besoins
  10. Oui, c'est ce que j'avais fait Voilà où j'en suis pour le moment : $document = new DomDocument(); $document->load('././inc/online_users.xml'); $guests = $document->getElementsByTagName('guests'); foreach ($guests AS $guests) { $users = $guests->getElementsByTagName('user'); foreach ($users AS $user) { foreach ($user->childNodes AS $node) { if ($node->nodeType != XML_ELEMENT_NODE) continue; // Si on sait que l'on se trouve dans le bloc <user> du visiteur courant // Alors on met a jour les valeurs (lastactivity, etc) if ($found) { if ($node->tagName == 'last_activity_time') $node->nodeValue = time(); } // Si on se trouve dans le bloc <user> du visiteur courant (on ne le savait pas encore) // Alors on passe au <tag> suivant elseif ($node->tagName == 'ip' && $node->nodeValue == $_SERVER['REMOTE_ADDR']) { $found = true; continue; } // Si on n'est pas dans le bloc <tag> de l'utilisateur courant et que l'utilisateur de ce tag est inactif depuis trop longtemps elseif ($node->tagName == 'last_activity_time' && time()-$node->nodeValue > 180) $guests->removeChild($user); } } } Mais je suis un peu perdu et je pense que mon code est redondant :$
  11. Je me permet de re-poster car j'ai vraiment du mal avec le DOM Voici mon code foreach ($online_users->guests->user AS $user) { if ($user->ip == $_SERVER['REMOTE_ADDR']) { $user->last_activity_time = time(); $user->last_activity_url = $_SERVER['REQUEST_URI']; $found = true; $online_users->asXML('././inc/online_users.xml'); } elseif (time()-$user->last_activity_time > 180) { $dom = new DOMDocument(); $dom_sxe = dom_import_simplexml($online_users); // Que mettre ici ? $online_users = simplexml_import_dom($dom_sxe); $online_users->asXML('././inc/online_users.xml'); } } Je veux importer mon objet simplexml dans un objet DOM, pour ensuite supprimer le noeud <user> en cours d'analyse depuis le DOM, réimporter l'objet dans simplexml et sauvegarder le fichier... Le problème est qu'il faut connaitre la position du noeud pour le détruire, l'idéal serait une méthode "current_item()" mais ... ça m'étonnerais que ce soit aussi simple Quelqu'un sait-il comment faire ?
  12. Pourquoi ? Parce que SimpleXML me convient parfaitement en ce qui concerne la lecture... Si la seule solution est de passer par le DOM (qui me paraît beaucoup plus complexe d'utilisation) ... hé bien je passerai par le DOM
  13. Bonjour Je viens de me mettre au XML avec la librairie SimpleXML intégrée à PHP 5. Tout marche parfaitement et j'arrive en 2 lignes à afficher tout ce que je veux de mon fichier Le problème, c'est qu'il n'y a apparemment pas de fonction removeNode() ou removeChild() intégrée à cette classe, ce qui fait que je ne peux pas supprimer le noeud courant (utile dans mon cas car je fais un compteur de conenctés ) Dans la doc PHP, quelqu'un a écrit une classe, extendedSimpleXML (class extendedSimpleXML extends SimpleXMLElement) qui contient une méthode removeNode... Voici donc mon fichier XML (membres et invites sont séparés ): <?xml version="1.0" encoding="windows-1250"?> <online_users> <members> </members> <guests> <user> <ip>01.234.56.789</ip> <last_activity_time>1157100123</last_activity_time> <last_activity_url>/forums/index.php?show_forums</last_activity_url> </user> <user> <ip>12.345.67.890</ip> <last_activity_time>1157100456</last_activity_time> <last_activity_url>/forums/index.php?show_forums</last_activity_url> </user> <user> <ip>23.456.78.901</ip> <last_activity_time>1157100789</last_activity_time> <last_activity_url>/forums/index.php?show_forums</last_activity_url> </user> <user> <ip>34.567.89.012</ip> <last_activity_time>1157101234</last_activity_time> <last_activity_url>/forums/index.php?show_forums</last_activity_url> </user> </guests> </online_users> et le code PHP : $online_users = simplexml_load_file('././inc/online_users.xml'); $online_users = new extendedSimpleXML($online_users->asXML()); foreach ($online_users->guests->user AS $user) if ($user->ip == $_SERVER['REMOTE_ADDR']) { $user->last_activity_time = time(); $user->last_activity_url = $_SERVER['REQUEST_URI']; $found = true; $online_users->asXML('././inc/online_users.xml'); } elseif (time()-$user->last_activity_time > 180) { $user->removeNode(); $online_users->asXML('././inc/online_users.xml'); } if (!$found) { $user = $online_users->guests->addChild('user'); $user->addChild('ip', $_SERVER['REMOTE_ADDR']); $user->addChild('last_activity_time', time()); $user->addChild('last_activity_url', $_SERVER['REQUEST_URI']); $online_users->asXML('././inc/online_users.xml'); } Le problème est que la fonction removeNode() me fait apparemment sortir directement de ma boucle foreach, ce qui fait que je ne peux supprimer qu'un élément à la fois ... Une idée ? P.S : ah oui, SimpleXML me supprime l'indentation lorsque je rajoute des éléments... Est-il possible de la restaurer ?
  14. Et pourquoi pas un simple str_replace(array('é', 'è', 'ê'), 'e', $text); ?
  15. Si je puis me permettre, prends de bonnes habitudes de codage xHTML le plus tôt possible (en particulier, les noms des balises en minuscules )
  16. Oui, car certains Pare-Feus (ex: Norton Internet Security 200x) vident cette variable ou bien la remplacent par des chaines de caractères aléatoires
  17. Salut Tu peux éditer ceci dans ton panneau d'administration (Options => Permaliens) Saches aussi qu'il y a toute une sympathique communauté pour tout ce qui concerne le support de WordPress
  18. Merci de ta réponse complète, je regarde cette solution
  19. Bonjour à tous Je développe un forum et cherche en ce moment à coder la fonction qui permet à l'utilisateur de distinguer les forums lus de ceux qu'il n'a pas encore lu J'ai réfléchi et ai trouvé (tout seul comme un grand ) la solution qui me paraît être la meilleure : * Quand un visiteur visite un forum, on ajoute son id dans un champ f_read de la table forums (pareil pour les sujets) -> Concrètement, ça donne : UPDATE forums SET f_read = f_read + ', 1' WHERE f_id = 3 -> Ce qui donnera à terme quelque chose du genre f_read = '123, 54, 1, 2, 48, 87987, 654' (bien entendu, dès qu'un membre poste dans le forum, je vide ce champ ) * Ensuite, pour lister les forums, on fait une condition qui regarde si l'id du membre est dans la liste : SELECT [...] CASE WHEN 1 IN (f_read) THEN '1' ELSE '0' END AS f_read ... et j'affiche mes belles icones lu / non lu Seulement voilà, je fais directement appel au champ f_read dans ma requête (avec IN (f_read) ) et MySQL me renvoie toujours 0 même quand mon id est dans le champ Je pense que c'est parce qu'il interprète mon champ comme du texte (et l'entoure donc avec des guillemets) et non comme une "suite de nombres séparés par des virgules" ... En effet, la requête suivante marche parfaitement : SELECT [...] CASE WHEN 1 IN (123, 54, 1, 2, 48, 87987, 654) THEN '1' ELSE '0' END AS f_read Ce qu'il faudrait, c'est covnertir le contenu du champ en un format de suite que MySQL comprendrait, mais je sèche... Des idées ? P.S: Arf, on a pas le droit à assez de smileys dans nos messages : P Edit : Mes explications me semblent un peu confuses, n'hésitez donc pas à me poser des questions ^ ^
  20. Salut Juste un petit post pour te donner un petit conseil d'optimisation PHP : while (list($libelle,$type,$num_voit,$groupe,$class_dep,$class_arr,$nb_t,$km,$nom,$prenom) = $db->get_row()) est moins rapide que $current_car = 0; while ($current_car < $db->num_rows) { $car = $db->get_row(); // Tes opérations ici // print_r ($car); // echo $car['num_voit']; // etc $current_car++; }
  21. Bien sûr, mais le serveur qui l'héberge est un monstre, alors que celui qui héberge forum.hardware.fr est seulement un demi-monstre
  22. Salut Pour un forum à fort trafic, évites PhpBB : il est mauvais en termes de rapidité et trop souvent la proie des script-kiddies . MesDiscussions.net quand à lui fait tourner l'un des plus gros forums au monde sans souffrir : Forum Hardware mais il te faudra mettre les mains dans le cambouis si tu souhaites le personnaliser (hideux par défaut ) Sinon, tu peux aller faire un tour sur OpenSourceCMS qui liste les différents scripts de forum gratuits P.S: Si tu peux attendre quelques temps, je suis en train de développer le Newbie-Forum qui devrait entrer en version finale début août si tout va bien
  23. A noter que l'on peut échapper le nom des champs avec des guillemets inversés ` pour éviter ces problèmes : `timestamp` | `force` Attention toutefois : cette synthaxe n'est je crois supportée que par MySQL
  24. Salut à toi et bienvenue sur le Hub P.S: J'aime beaucoup ton avatar
×
×
  • Créer...