Y'a des fois où je me dis que je suis vraiment barje LOL [PHP] - PHP - Programmation
Marsh Posté le 09-08-2004 à 23:37:38
klair comen t trop barG
Marsh Posté le 09-08-2004 à 23:58:39
Bah comme dirais ma grand-mère : "Du moment que c'est pas tout cafouéré c'est que ça doit marcher"
Tiens, sinon, rapidement, vu que t'es dans le coin
Tu peux me dire si cette url fonctionne ?
http://php.manga-torii.com:180
Marsh Posté le 10-08-2004 à 00:00:47
Arjuna a écrit : Bah comme dirais ma grand-mère : "Du moment que c'est pas tout cafouéré c'est que ça doit marcher" |
404
Marsh Posté le 10-08-2004 à 00:04:45
Hmm.
Déjà, comme un boulet, j'ai pas de page par défaut...
http://php.manga-torii.com:180/index.php
Mais bon, j'ai créé le DNS y'a quelques minutes, donc il faut certainement le temps qu'il se propage.
En attendant, ça donne quoi ça ? (ça devrait marcher par contre)
http://linuxfaq.manga-torii.com:180/index.php
Sinon, c'est que j'ai un problème avec la config d'Apache
Marsh Posté le 10-08-2004 à 00:48:59
donc tu as un probléme avec apache..
Marsh Posté le 10-08-2004 à 08:31:37
il a un problème avec PHP aussi
pourquoi faire des eval? ça n'a aucun sens ici
Marsh Posté le 10-08-2004 à 09:28:01
drasche a écrit : il a un problème avec PHP aussi |
Parceque t'as lu la fonction et son fonctionnement ?
Marsh Posté le 10-08-2004 à 09:30:25
c'est qui Coralie ?
Marsh Posté le 10-08-2004 à 09:40:01
Harkonnen a écrit : c'est qui Coralie ? |
Marsh Posté le 10-08-2004 à 10:09:18
Arjuna a écrit : Parceque t'as lu la fonction et son fonctionnement ? |
de tête, j'aurais dit qu'elle fait le même genre de choses que son homonyme Javascript
Marsh Posté le 10-08-2004 à 12:10:10
Harkonnen a écrit : c'est qui Coralie ? |
Coralie, c'est le nom du serveur.
T'as vu ça écrit où ?
C'est con, je ne peux pas y accéder depuis mon boulot
Marsh Posté le 10-08-2004 à 12:10:32
drasche a écrit : de tête, j'aurais dit qu'elle fait le même genre de choses que son homonyme Javascript |
Je parle de ma fonction, pas de eval()
Marsh Posté le 10-08-2004 à 12:12:27
Arjuna a écrit : Coralie, c'est le nom du serveur. |
devines...
Marsh Posté le 10-08-2004 à 12:16:04
Arjuna a écrit : Je parle de ma fonction, pas de eval() |
ah
mais je parlais pas de ta fonction moi
edit: moi j'ai pas une fonction mais carrément une classe pour construire mes requêtes SQL (pas en PHP, stro lent )
Marsh Posté le 10-08-2004 à 12:26:50
ReplyMarsh Posté le 10-08-2004 à 13:08:01
Arjuna a écrit : Bah y'en a un peut partout en fait |
ouais, mais bon, y a plus secure comme password...
Marsh Posté le 10-08-2004 à 14:06:57
gizmo a écrit : ouais, mais bon, y a plus secure comme password... |
C'est un faux pour tromper l'ennemi
Marsh Posté le 10-08-2004 à 23:31:52
Arf
MagicBuzz ou la passion d'écrire une usine à gaz pour affier 3 liens à l'écran
|
Cette légère complexification à cause d'un problème évident à ma solution...
Au départ, je n'avais que deux cas possible lors d'appels "récursifs" :
-> Rechercher tous les fils des fils de l'entité en cours.
-> Rechercher le père du père de l'entité en cours.
Dans ces deux cas, aucun doublon possible (enfin, normalement, puisque dans certains cas la première peut ramener des doublons)
Mais là, j'ai dû implémenter une couche au dessus :
-> Recherche de tous les pères des fils de l'entité courante.
Evidement, tous les fils ont au moins en père commun l'entité courante... Du coup doublon !
Alors j'ai trifouillé un peu, et j'ai rien trouvé de plus goret (fiable en tout cas) que de passer par une table temporaire et faire un distinct dessus.
Ca donne donc l'usine à gaz ci-dessus
Ca me sert par exemple à afficher la série contenue dans un coffret de DVD, sâchant qu'un même coffret contient plusieurs DVD, et que tous ces DVD traîtent de la même séries (mais ils peuvent très bien aussi contenir plusieurs films différents...). Et vu que ça me gonflait de faire des relations redondantes (donc immainteables pour les éditeurs d'articles)...
C'est joli nan ?
Bon, plus sérieusement, je profite du fait que je vous ai posté mon code pour vous poser trois questions :
1) Comment savoir si une table existe déjà ? Là j'ai rien trouvé de mieu que de tenter de la créer dans tous les cas, compter les lignes, et si aucune, mettre une ligne 'dummy' dedans pour qu'un appel récursif ne puisse pas croire qu'il a lui aussi créé la table (problème qui m'a bouffé plus d'une heure avant de comprendre ce qu'il se passait, je suis vert).
Bah ouais, parceque ma ligne 'dummy' elle est pas là pour clarifier les choses dans le bordel ambiant du code/algo.
PS: je ne veux pas que l'utilisateur du site puisse avoir accès à la base "mysql", donc c'est rappé pour avoir la liste des tables, deplus il s'agit d'une table temporaire, donc je ne suis même pas sûr qu'elle serait listée dedans.
2) getmypid() permet-il d'être certain d'obtenir un numéro unique pour un chargement de page donné ? D'après la doc, je n'arrive pas à savoir si c'est le pid du moteur PHP ou d'un pool de process, etc. Ceci est très important pour éviter les collisions de tables temporaires (je suis en connection persistante, donc malgré le scope réduit des tables temporaires, je pense que tout le site se partage les mêmes tables...)
3) Plutôt que faire un select * puis un mysql_num_rows(), y'a un moyen plus rapide de savoir si une table contient des données (bah ouais, parceque vu l'usine à gaz que j'ai fait, j'ai intérêt à l'optimiser à mort maintenant...)
Marsh Posté le 11-08-2004 à 00:12:54
je pense que tu peux poster avec ton ancien pseudo maintenant, tout le monde sait qui tu es
Marsh Posté le 11-08-2004 à 00:16:18
Vivi mais bon, j'en prépare un nouveau Vous croyez que Coralie existe déjà ?
PS: parmis mes questions, la première s'est résolue toute seule après une modif de dernière minute juste avant mon post : le $title étant maintenant écrit dans la table si une ligne est trouvée (même si le titre est vide) fait que j'ai d'entrée de jeu une ligne dans la table, avant l'appel "récursif" avec eval(), donc plus besoin de ma ligne "dummy"
Marsh Posté le 09-08-2004 à 22:44:36
Donc... Je me suis mis au PHP hier.
Et puis évidement j'attaque un truc complèxe d'entrée de jeu...
Après quelques minutes d'effort j'ai réussi à pondre de truc d'autiste (chuis bon pour passer au perl je crois )
displayPattern(getInfos(26, "t1.typtie, t1.sigtie, t1.nomtie", "and t2.sigtie = '$_GET[sigtie]'", "order by t1.nomtie" ), 'Episodes :<br/>', 'displayPattern(getInfos(23, "t1.typtie, t1.sigtie, t1.nomtie", "and t2.sigtie = \'$row->sigtie\'", "order by t1.nomtie" ), \'\', \'<a href=\"episode.php?typtie=$row->typtie&sigtie=$row->sigtie\">$row->nomtie</a><br/>\');');
function displayPattern($resultset, $title, $pattern)
{
if (mysql_num_rows($resultset) > 0)
{
eval("echo(\"$title\" );" );
while ($row = mysql_fetch_object($resultset))
{
if (strpos($pattern, 'displayPattern(') > -1)
{
eval($pattern);
}
else
{
eval("echo(\"$pattern\" );" );
}
}
}
}
// (La fonction "getInfos()" est sans intérêt ici)
MagicBuzz ou comment faire du eval récursif pour pas se faire chier à écrire des fonctions plus completes
En fait, grossomodo :
-> displayPattern prends en paramètre un resultset d'une requ$ete, un "titre" et un "pattern", contenant des appels aux colonnes du resultset.
Donc, un petit eval d'un echo du pattern dans une boucle sur le resultset et j'obtiens la liste de mes lignes mises en page selon mon pattern, sans devoir faire du code spécifique.
Maintenant, je me dis... Mais le problème, c'est que le resultset, je le retrouve d'une requête faisant une simple jointure. Moi j'ai besoin de pousser sur deux niveaux, et j'ai pas envie de réécrire la fonction getInfos car bien trop complexe pour ne pas y passer deux heures...
Alors pourquoi pas ne pas détourner le eval du pattern pour lancer de façon résursive la fonction display, avec le getInfos appelé pour chaque ligne retournée par le premier résultset...
Et v'là le travail.
Je crois que je peux direct l'envoyer à l'auteur de cet article
http://mindprod.com/unmain.html
C'est le revers de vouloir faire du trop générique on fini par faire du illisible