Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2736 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Y'a des fois où je me dis que je suis vraiment barje LOL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Y'a des fois où je me dis que je suis vraiment barje LOL

n°818500
Arjuna
Aircraft Ident.: F-MBSD
Posté le 09-08-2004 à 22:44:36  profilanswer
 

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 :sol: (chuis bon pour passer au perl je crois :D)
 
 


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&amp;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 :D
 
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 :sol:  
http://mindprod.com/unmain.html
 
C'est le revers de vouloir faire du trop générique on fini par faire du illisible :D

mood
Publicité
Posté le 09-08-2004 à 22:44:36  profilanswer
 

n°818514
pinguin007
a npe error
Posté le 09-08-2004 à 23:37:38  profilanswer
 

klair comen t trop barG :ouch:


---------------
LoD 4 ever && PWC spirit|Le topak de l'iMP-450|inDATOUNEwe trust
n°818520
Arjuna
Aircraft Ident.: F-MBSD
Posté le 09-08-2004 à 23:58:39  profilanswer
 

Bah comme dirais ma grand-mère : "Du moment que c'est pas tout cafouéré c'est que ça doit marcher" :D
 
Tiens, sinon, rapidement, vu que t'es dans le coin :D
 
Tu peux me dire si cette url fonctionne ?
 
http://php.manga-torii.com:180

n°818524
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-08-2004 à 00:00:47  profilanswer
 

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" :D
 
Tiens, sinon, rapidement, vu que t'es dans le coin :D
 
Tu peux me dire si cette url fonctionne ?
 
http://php.manga-torii.com:180

404


---------------
J'ai un string dans l'array (Paris Hilton)
n°818529
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-08-2004 à 00:04:45  profilanswer
 

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 :sweat:


Message édité par Arjuna le 10-08-2004 à 00:19:49
n°818556
pinguin007
a npe error
Posté le 10-08-2004 à 00:48:59  profilanswer
 

donc tu as un probléme avec apache..


---------------
LoD 4 ever && PWC spirit|Le topak de l'iMP-450|inDATOUNEwe trust
n°818619
drasche
Posté le 10-08-2004 à 08:31:37  profilanswer
 

il a un problème avec PHP aussi :whistle:
 
pourquoi faire des eval? ça n'a aucun sens ici :??:


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°818663
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-08-2004 à 09:28:01  profilanswer
 

drasche a écrit :

il a un problème avec PHP aussi :whistle:
 
pourquoi faire des eval? ça n'a aucun sens ici :??:


Parceque t'as lu la fonction et son fonctionnement ?

n°818665
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 10-08-2004 à 09:30:25  profilanswer
 

c'est qui Coralie ?


---------------
J'ai un string dans l'array (Paris Hilton)
n°818671
kadreg
profil: Utilisateur
Posté le 10-08-2004 à 09:40:01  profilanswer
 

Harkonnen a écrit :

c'est qui Coralie ?


 
[:cupralf]


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
mood
Publicité
Posté le 10-08-2004 à 09:40:01  profilanswer
 

n°818703
drasche
Posté le 10-08-2004 à 10:09:18  profilanswer
 

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 :D


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°818800
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-08-2004 à 12:10:10  profilanswer
 

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 :sweat:


Message édité par Arjuna le 10-08-2004 à 12:10:46
n°818801
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-08-2004 à 12:10:32  profilanswer
 

drasche a écrit :

de tête, j'aurais dit qu'elle fait le même genre de choses que son homonyme Javascript :D


Je parle de ma fonction, pas de eval() :o

n°818803
uriel
blood pt.2
Posté le 10-08-2004 à 12:12:27  profilanswer
 

Arjuna a écrit :

Coralie, c'est le nom du serveur.
T'as vu ça écrit où ?


 
:D devines...


---------------
IVG en france
n°818804
drasche
Posté le 10-08-2004 à 12:16:04  profilanswer
 

Arjuna a écrit :

Je parle de ma fonction, pas de eval() :o


ah :o
mais je parlais pas de ta fonction moi :o
edit: moi j'ai pas une fonction mais carrément une classe pour construire mes requêtes SQL :D (pas en PHP, stro lent :o)


Message édité par drasche le 10-08-2004 à 12:16:54

---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
n°818812
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-08-2004 à 12:26:50  profilanswer
 

uriel a écrit :

:D devines...


Bah y'en a un peut partout en fait :whistle:

n°818845
gizmo
Posté le 10-08-2004 à 13:08:01  profilanswer
 

Arjuna a écrit :

Bah y'en a un peut partout en fait :whistle:


ouais, mais bon, y a plus secure comme password...

n°818938
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-08-2004 à 14:06:57  profilanswer
 

gizmo a écrit :

ouais, mais bon, y a plus secure comme password...


C'est un faux pour tromper l'ennemi :whistle:


Message édité par Arjuna le 10-08-2004 à 14:07:03
n°819764
Arjuna
Aircraft Ident.: F-MBSD
Posté le 10-08-2004 à 23:31:52  profilanswer
 

Arf :)
 
MagicBuzz ou la passion d'écrire une usine à gaz pour affier 3 liens à l'écran :D
 


function displayPattern($resultset, $title, $pattern)
{
   mysql_query("create temporary table IF NOT EXISTS tmp_".getmypid()." (str varchar(255) not null)" );
   
   $res = mysql_query("select * from tmp_".getmypid());
   if (mysql_num_rows($res) == 0)
   {
      mysql_query("insert into tmp_".getmypid()." values ('dummy')" );
      $tableAlreadyExists = 0;
   }
   else
   {
      $tableAlreadyExists = 1;
   }
   
   if (mysql_num_rows($resultset) > 0)
   {
      eval("\$mystr = \"$title\";" );
      mysql_query("insert into tmp_".getmypid()." values ('$mystr')" );
      if (strpos($pattern, 'displayPattern(') > -1)
      {
         while ($row = mysql_fetch_object($resultset))
         {
            eval($pattern);
         }
      }
      else
      {
         while ($row = mysql_fetch_object($resultset))
         {
            eval("\$mystr = \"$pattern\";" );
            mysql_query("insert into tmp_".getmypid()." values ('$mystr')" );
         }
      }
   }
   
   if ($tableAlreadyExists == 0)
   {
      $res = mysql_query("select distinct str from tmp_".getmypid()." where str != 'dummy'" );
      if (mysql_num_rows($res) > 1)
      {
         while ($row = mysql_fetch_object($res))
         {
            echo($row->str);
         }
      }
      mysql_query("drop table tmp_".getmypid());
   }
}


 
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 :D
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 ? :D
 
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...)


Message édité par Arjuna le 11-08-2004 à 00:20:30
n°819845
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 11-08-2004 à 00:12:54  profilanswer
 

je pense que tu peux poster avec ton ancien pseudo maintenant, tout le monde sait qui tu es :o

n°819851
Arjuna
Aircraft Ident.: F-MBSD
Posté le 11-08-2004 à 00:16:18  profilanswer
 

Vivi mais bon, j'en prépare un nouveau :D Vous croyez que Coralie existe déjà ? :D
 
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" :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Y'a des fois où je me dis que je suis vraiment barje LOL

 

Sujets relatifs
PHP/MYSQL et les photospassword sur site en php ou ASP
[PHP] Replacer un mot dans un texte avec des accents?Valider un formualire automatiquement par php ou javascript
[PHP] Return d'un objet qui foiredébutant en PHP a besoin d'aide !!Problème avec un formulaire ! ! ! !
Verification Javascript ou PHP !?Ajouter des jours à une date en PHP ?
php/mysql avec dreamweaver 
Plus de sujets relatifs à : [PHP] Y'a des fois où je me dis que je suis vraiment barje LOL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR