Jump to content

conan

Actif
  • Content Count

    46
  • Joined

  • Last visited

Community Reputation

0 Neutre

About conan

  • Birthday 09/09/1976

Contact Methods

  • Website URL
    http://higs.dyndns.org

Profile Information

  • Genre
    Homme
  • Localisation
    Nord
  1. Merci ! Je vais regarder ça dès que j'ai un moment, j'ai un gros soucis hardware à résoudre.
  2. Bonjour, Je viens de me développer une classe Multiton pour mes connexions aux base de données mysql. Et dans mon développement, j'avais l'habitude de faire un fichier "config.inc.php" classique avec des "define" pour le host,db,log,pwd. Je me suis dis que j'allais faire quelque chose de plus simple dans la lecture pour l'accès multibase en faisant ceci : $phos['HOST'] = 'Localhost'; $phos['DB'] = 'db1'; $phos['LOG'] = 'user1'; $phos['PWD'] = 'pwd1'; define('CFG_'.$phos['DB'],$phos); puis pareil pour la base suivante, et ainsi j'ai juste à tester si le tableau est défini pour en passant mon tableau pour mon multiton. mais j'ai eu : "warning : Constants may only evaluate to scalar values" donc je me suis demandé comment vous aviez l'habitude de faire, si vous "doubliez" à chaque fois les variables en ajoutant un mot de différenciation exemple : // Fichier de config define('HOST_DB1','Localhost'); define('HOST_DB2','Localhost'); define('DB_DB1','db1'); define('DB_DB2','db2'); define('LOG_DB1','user1'); define('LOG_DB2','user2'); define('PWD_DB1','pwd1'); define('PWD_DB2','pwd2'); puis dans le fichier d'appel : -------------------------------------------- include_once 'lib/wosCfg.inc.php'; require_once('lib/fnwos.inc.php'); // Fichier de fonctions du projet //Appel fonction de récupération des paramètres du projet en base loadParamFromDB(); -------------------------------------------- fichier de fonctions du projet function loadParamFromDB(); { if (defined(HOST_DB2) && defined(DB_DB2) && defined(LOG_DB2) && defined(PWD_DB2)) { $instMysql = cMysql::getInstance(HOST_DB2,DB_DB2,LOG_DB2,PWD_DB2); // Récupération de l'instance depuis multiton ... etc... } } -------------------------------------------- Ce qui ferais un peut lourd visuellement, donc je voudrais savoir si vous avez une méthode plus simple/propre à me proposer. Merci.
  3. Bonjour, Je travail sur mon premier traitement XML/XSL suite au développement d'une partie en ajax. Je galère un peu mais petit à petit j'avance. Je suis actuellement sur la partie XSL et j'ai besoin de faire une chose qui apparament n'est pas correct d'après un éditeur XSL Wysiwyg. en fait je suis dans un tableau dans lequel je peux avoir des listes (filtres) au final côté HTML je dois me retrouver comme ceci : <ul> <li onclick="filtre('f',1);">Choix1</li> <li onclick="filtre('f',4);">Choix2</li> <li onclick="filtre('f',28);">Choix3</li> </ul> au clic sur un choix de li je dois appeler une fonction javascript pour mon ajax. j'ai tenté ceci, et c'est là que l'éditeur XSL Wysiwyg refuse : <li onclick="filtre('f',<xsl:value-of select="@val"/>)"> <xsl:value-of select="@var"/> </li> Comment faire ? merci de votre aide.
  4. voici le code posant problème : ... <div id="zoom"> <div id="top"> <div id="dh">16/09/2004 23:28:58</div> <div id="nbp">1/2</div> <div id="dpl"> <a id="prevlnk" href="?idPhoto=1380"><<</a> <a id="retourlnk" href="?idDossier=22">retour</a> <a id="nextlnk" href="?idPhoto=1480">>></a> </div> </div> <img src="img/galerie/hq/230920042100052.jpg" alt="gros plan sur l'image" /> </div> ... maquette exemple :
  5. l'url je ne peux pas c'est sur une de mes machine ici en interne. C'est pourquoi j'ai bien décris la page. sinon je peux très bien poster le code... en dure, c'est à dire sans la partie php.
  6. Problème de mise en page Bonjour, Je butte depuis plusieurs semaine sur un problème de mise en page. Dans le cadre d'une galerie d'image, lorsque j'arrive sur la page "zoom" de l'image, je dois affiché l'image en elle même ainsi qu'un bandeau. - l'image ne peut avoir de taille fixe - le bandeau se situe au dessus de l'image (et n'en depasse pas) et contient 3 parties hautes et 1 partie basse (facultative) : > date et heure de la prise de vue (aligné à gauche) > numéro d'image par rapport à la section (ex : 1/26) (aligné au centre) > système de navigation (aligné à droite) qui lui contient : >> "<<" pour l'accès à l'image précédente >> "retour" pour retourner dans la section à laquelle l'image appartient >> ">>" pour passer à l'image suivante > le résumé de l'image si celle-ci en posséde un (overflow automatique) pour cette partie je n'ai pas eu de problème j'ai donc essayé par tout les moyens de faire ceci pour que celà fonctionne sous IE/FX même des hacks sans succès et donc avant de devoir passer par des tableaux car je ne vois aucun moyen d'y arriver autrement, je me permet de poser ici mon problème afin d'éviter son utilisation.
  7. Bonsoir, Voilà je suis sous Mysql5(windows) j'utilise MySQL Query Browser. J'ai besoin de me faire une fonction ( je pense, car je ne vois que cette possibilité) et quand je fais une fonction de base, même issu d'exemple sur le net ca ne marche pas ! exemple : Code : 1. DELIMITER $$ 2. 3. DROP FUNCTION IF EXISTS `liste`.`fnLangueAudio` $$ 4. CREATE FUNCTION `liste`.`fnLangueAudio` (s CHAR(20)) RETURNS CHAR(50); 5. BEGIN 6. 7. RETURN RETURN CONCAT('Hello, ',s,'!'); 8. END $$ 9. 10. DELIMITER; me donne l'erreur suivante : - que j'ai une erreur proche de DELIMITER $$ - erreur de syntax 1064 près de mon return concat - idem près de end $$ Voilà la raison pour laquelle je pense être obligé de passé par les fonctions ( à moins que vous me trouviez une autre solution !) J'ai 3 tables : tSousTitre(idSousTitre,idVideo,idLangue) tAudio(idAudio,idVideo,idLangue) tLangues(idLangue,strLangue) et bien sur une table video ;-) Sachant qu'une video peut avoir plusieurs langues audio et plusieurs langues en sous titres, je voudrais pouvoir concaténer pour une video par exemple : Video Audio Stitre video1 Fr,Ang,Jp Fr,Ang Video2 Fr,Jp Fr donc par exemple durant ma requete pour récupéré mes video une fonction fnAudio(idVideo) et une fonction fnSTitre(idVideo) qui chacune me retourne les chaines concaténées. Merci de votre aide.
  8. conan

    du MCD aux classes PHP5

    Ok donc si je comprend bien je dois faire ma classe film ainsi : class cFilms extends cVideo { private $idFilm; private $strCodeimdb; private $strGenre; function GetGenre() {return $this->strGenre;} function GetTitre() {return $this->strTitre;} } ------ Ma classe video ainsi class cVideo { protected $idVideo; protected $strTitre; protected $strFormat; protected $intQualite; protected $strResume; protected $dtEnrCrea; protected $lngTaille; protected $strNomMembre; }
  9. conan

    du MCD aux classes PHP5

    Oui je sais et c'est je pense ce qui me bloque. J'ai pas l'habitude de passer par des classes, même au boulot (vb.net). non aucunement familier, je profite de ma semaine de congès pour avancer sur ma migration (qui a été faite au niveau mysql ce week-end) mais là je me retrouve bloquer avec cette relation DB/Php. resumé 2nde partie du post en plus clair (je pense) Sur le site des utilisateurs peuvent dans leur compte paramétré le listing qui sera affiché (les colonnes d'un tableau) donc lorsque je vais créer ce tableau, je ne vais pas faire inutilement des jointures par exemple (à ma table tgenre) si l'utilisateur ne veut pas afficher la colonne genre des films. Je voudrais simplement un exemple de comment je pourrais faire par rapport aux tables que j'ai fournis. Sinon je peux prendre un autre exemple avec le même cas. Merci
  10. conan

    du MCD aux classes PHP5

    De toute façon j'ai un besoin d'accès au donnée ne serais-ce que que pour mettre à jour celles-ci mais je pense le faire par des méthodes plus "générales" ajoute films, Modifier film qui ne se feront que par forme de fiche, donc une mise à jour/ajout d'un enregistrement. donc je pense que je n'ai pas besoin de ce mappage stricts. Voilà c'est plus sous cette forme que je vois la chose et c'est donc pourquoi je me demande quelle informations issu de mon MCD je dois retrouver dans mes classes. Une chose que je n'ai pas expliquer et qui je pense fais que mon problème ne peut être identifié : Je ne listerais pas à chaque fois l'ensemble des films, mais par exemple ceux commencant pas une lettre/chiffre que l'utilisateur sélectionnera, mais également la page de la liste issu de la requete. aussi, si l'utilisateur avait paramètré un filtre pour ne voir qu'un genre de film la requete sera en conséquence me générant des instances de film comme n'importe qu'elle liste globale de film. par contre si l'utilisateur à paramètrer (dans son compte) qu'il ne voulait que voir le nom du film et le codeImdb, mes variables de classe "en trop" comme idGenre ou strGenre (ca dépends le choix) risque de me posais des problème... surtout que mes requetes seront optimisées en fonction des paramètre de l'utilisateur, pas besoin de faire des jointures pour une info que je n'afficherais pas. Donc voilà mon problème, si j'avais à toujours afficher l'ensemble des colonnes de ma "grille" je ne l'aurais pas eu. voilà pourquoi je ne vois pas de solution pour le moment.
  11. Bonjour, Voilà j'ai fais mon MCD pour un site mais mon problème est pour le passer en classe pour PHP5 Voici une partie de mon MCD -------------------- tVideo idVideo (PK) idTypeVideo strTitre idFormat ...etc -------------------- tFilms idFilm (PK) idVideo idGenre strCodeImdb -------------------- déjà je pense que je dois faire une classe cFilms qui hérite de cVideo dans chaque classe dois-je mettre comme variable de la classe mes id ? exemple cVideo : idVideo, idTypeVideo, idFormat ... ou cVideo : idvideo,strTypeVideo,strTitre,strFormat... et donc remplir ces variables issues de mes relation lors de ma requete select
  12. Voilà je me suis fait ma classe qui marche bien (cf code plus bas) mais maintenant je bute sur un problème c'est le fait que puisse à chaque fin de requete ajouter le temps et ma requete +1 pour celà il faut que je fasse un require dans ma classe mysql. mais lors de la génération de la page il faut que j'appele mon GetNbQuery et GetQueryTime de ma classe cQueryStats soit via ma classe mysql ( pas très propre je trouve car normalement je ne devrais pas laisser ma classe mysql accessible de partout, car si je déclare un accès à ma classe mysql dans une sous fonction de mon site je suis "foutu" car hors de ma fonction elle n'est plus présente et il vaut mieux éviter de la passer en variable globale. voilà donc maintenant où je bute. Merci d'avance de votre aide. class cQueryStats { private static $_Time = 0; private static $_Numbers = 0; public static function Add($nbQuery = 0, $time = 0) { self::$_Numbers += $nbQuery; self::$_Time += $time; } public function GetNbQuery() {return self::$_Numbers;} public function GetQueryTime(){return self::$_Time;} }
  13. Merci pour vos réponses je vais regarder celles-ci de plus près. le temps que je les regardes, je vous mets un peu ce que je suis entrain de faire, ca fais un bon moment que je suis la dessus (durant mes temps libre... après le travail le soir c'est dur de passer de .net à Php) --- Bon ce n'est pas simple à expliquer... alors je procéde par étape Nota : je migre vers php5 donc le maximum en classes pour pouvoir utiliser mes classes dans différents projets exemple : j'ai un répertoire classes là où j'ai installé mon PHP/Mysql qui contient mes classes générales aux projets. En fait j'ai : - une classe Mysql - une classe timer Ma classe timer et utilisé pour : - le temps de génération d'une page - les requêtes (inclu dans la classe mysql) Sinon dans mes pages j'ai un système de statistiques (toujours en dev) qui est générales aux sites (en gros je passe l'id du site) : donc des accès à la base stats ensuite j'ai accès à la base du site en question. Donc oui il faut que je puisse dans le calcul du temps des requêtes prendre le temps global (base stats et base du site)ainsi que le nombre total de requêtes. Voici mes classes. Cmysql include 'IBaseDeDonnees.inc.php'; // Necessite la classe timer require_once('d:\web\Classes\cTimer.inc.php'); include_once 'd:\web\Classes\commonFunctions.inc.php'; class MySql implements IBaseDeDonnees { private $host = null; private $user = null; private $upass = null; private $base = null; private $connexion = null; private $id_resultat = null; private $last_id_insert = null; private $log = false; private $debug = true; private $nbres; /* Nombre de lignes retournées/affectées par la requête */ private $nbQuery = 0; private $timer = 0; private $queryTime = 0; function __construct($host=null, $base=null, $user=null, $upass=null) { $this->host=$host; $this->base=$base; $this->user=$user; $this->upass=$upass; } function setMyHost($host=null){$this->host=$host;} function setMyBase($base=null){$this->base=$base;} function setMyUser($user=null){$this->user=$user;} function setMyUpass($upass=null){$this->upass=$upass;} function setDebug($mode){$this->debug=$mode;} function setLog($mode){$this->log=$mode;} function connecter() { if (isset($this->host) AND isset($this->base) AND isset($this->user)) { if (is_null($this->connexion)) { // Creation de la connexion $this->id_connect = _AT_mysql_pconnect($this->host, $this->user, $this->upass) or $this->erreur('Echec de connexion !'); /* connexion à la base de donnée. */ _AT_mysql_select_db($this->base, $this->id_connect) or $this->erreur('Sélection de la base impossible !'); if ($this->log){logfile('creation connexion SQL['.$this->id_connect.']');} } $this->timer = new timer(); } } function query($query) { $this->last_id_insert = null; // Recuperation de la commande demandé $commande = strtoupper(substr($query, 0, 6)); $this->id_resultat = _AT_mysql_query($query, $this->id_connect) or $this->erreur('Execution de la requête impossible !: ' .$query); /* Met à jour le nombre de lignes affectées par la requête */ if ($commande == 'INSERT') $this->last_id_insert = _AT_mysql_insert_id($this->id_connect); else if ($commande == 'SELECT') $this->nbres = _AT_mysql_num_rows($this->id_resultat); else $this->nbres = _AT_mysql_affected_rows($this->id_resultat); $this->nbQuery++; if ($this->log){logfile('requete SQL;'.$commande.';'.$query);} } /* ========================================================================== GetLastInsertId : retourne le dernier insert ========================================================================== */ function GetLastInsertId() { return $this->last_id_insert; } /* === Fin GetLastInsertId */ /* ========================================================================== GetNbQuery : retourne le nombre de requête courant ========================================================================== */ function GetNbQuery() { return $this->nbQuery; } /* === Fin GetNbQuery */ /* ========================================================================== GetQueryTime : retourne le temps de traitement SQL actuel ========================================================================== */ function GetQueryTime($type = NULL) { if ($type == 'f') return $this->timer->timeCalcul($this->queryTimer); else return $this->queryTimer; } /* === Fin GetQueryTime */ /* ========================================================================== count : Retourne le nombre d'enregistrement résultant d'une requête ========================================================================== */ function count() { return $this->nbres; } /* === Fin count */ /* ========================================================================== Fonctions qui retourne le resultat sous divers forme, au choix par le programmeur ========================================================================== */ // Tableau accessible par indice : tab[0]...tab[n] function getRow() { return mysql_fetch_row($this->id_resultat); } // Tableau accessible par indice : tab['nom']...tab['nnom'] function getArray() { return mysql_fetch_array($this->id_resultat,MYSQL_ASSOC); } // Objet accessible par nom : obj->nom...obj->nnom function getObject() { return mysql_fetch_object($this->id_resultat); } // ========================================================================== function deconnecter() {} /* ========================================================================== isConnected : indique si une connexion à une base de donnée existe ========================================================================== */ function isConnected() { if (!is_null($this->connexion)) return true; else return false; } /* === Fin isConnected */ /* ========================================================================== freeRes : Libére les résultats de la mémoire ========================================================================== */ function freeRes() { echo 'cnx : '.$this->id_resultat . '--'; mysql_free_result($this->id_resultat); echo 'cnx : '.$this->id_resultat . '--'; //$this->id_resultat = null; } /* === Fin freeRes */ /* ========================================================================== close : Ferme la connexion à la base de donnée ========================================================================== */ function close() { if (! is_null($this->id_resultat)) {echo 'mmm';} //if (!is_null($this->id_resultat)) then mysql_close($this->id_connect); if ($this->log){logfile('CloseCnx['.$this->id_connect.']');} } /* === Fin close */ /* ========================================================================== erreur : Affiche l'erreur en cours ========================================================================== */ Function erreur($errorString) { $this->sqlerreurno = mysql_errno(); if ($this->log){logfile('Erreur: '.$this->sqlerreurno);} if ($this->debug) { echo '<div class=\'sqlError\'>Erreur : '.$errorString."\r\n".mysql_errno().'-'.mysql_error().'</div>'; die(); } } /* === Fin erreur */ } CTimer define ('CTIMER',TRUE); class timer { var $CName = "timer"; // Nom de la classe var $scriptTime; var $timeStart = NULL; // Constructeur function timer() { } // Démarre le chrono function on() { $this->timeStart = $this->microtime_float(); } // Stop le chrono function off() { $timeEnd = $this->microtime_float(); $this->scriptTime = $timeEnd - $this->timeStart; $this->timeStart = NULL; } function isStart() { if (is_null($this->timeStart)) return false; else return true; } // Recuperation du temps courant function microtime_float() { list($usec, $sec) = explode(' ', microtime()); return ((float)$usec + (float)$sec); } // Retourne la durée au format brut qui correspond à l'écart entre la methode on et off function GetDuree() { return $this->scriptTime; } // retourne le temps entre la methode on et off formaté automatiquement function GetFormatedTime() { return $this->timeCalcul($this->scriptTime); } //retourne le temps donné en paramètre ( Milliseconde ) formaté automatiquement function timeCalcul($temps) { $tempsEnSeconde = floor($temps); //combien d'heures ? $hours = floor($tempsEnSeconde / 3600); if ($hours>0) {$retour.=$hours.'h ';} //combien de minutes ? $min = floor(($tempsEnSeconde - ($hours * 3600)) / 60); if ($min < 10) $min = "0".$min; if ($min>0) {$retour.=$min.'m ';} //combien de secondes $sec = ($tempsEnSeconde - ($hours * 3600) - ($min * 60)); if ($sec < 10) $sec = "0".$sec; if ($sec>0) {$retour.=$sec.'s ';} // Millisecondes $ms = number_format($temps-$tempsEnSeconde,3)*1000; if (!empty($retour)) // Uniquement s'il n'y a pas que des millisecondes { if ($ms < 100) $ms = "0".$ms; if ($ms < 10) $ms = "0".$ms; } return $retour.$ms.' ms'; } } // Fin Class timer J'ai regardé le Singleton et Multiton, c'est ce qui semblait être le plus adapté mais voilà, en créant un exemple simple multiton, je remarque que si je fais une autre connexion à Mysql pour accéder à une autre base durant la même page (donc nouvelle instance de ma classe) je perdrais mon timer et mon compte. il faudrait quelque chose au dessus de ma classe mysql je pense en fait je pense me faire une classe qui sera appelé en début de page et en fin de page. je me suis basé sur un exemple de singleton : La classe : class Singleton { private static $_instance; private $v; private function __construct() { echo 'construction du singleton<br/><br/>'; }//fin constructeur public static function GetInstance() { if (!isset(self::$_instance)) { self::$_instance = new Singleton(); } echo self::$_instance->v+=1; return self::$_instance; }//fin fonction GetInstance }//fin classe Singleton la boucle de test require_once ('singleton.php'); for($i=0; $i < 10; $i++) { $var = Singleton::getInstance(); echo '<pre>'; var_dump($var); echo '</pre>'; } On voit bien que v augmente tout le temps ! donc je pense qu'il faut partir dans cette direction. A suivre... Si vous trouvez de quoi améliorer n'hésitez pas !!
  14. Bonjour, Je me suis fais une classe Mysql pour mes différents sites que je vais retaper petit à petit, et je me demander comment faire pour faire ce genre de chose que l'on voit par exemple sur les forum Invision. - Le nombre de requetes utilisé pour généré la page finale - Le temps total des requêtes Je sais déjà comment faire pour avoir le temps total pour me généré la page par le serveur, mais là je souhaite avoir plus de précision pour avoir un ratio PHP/Mysql Merci de votre aide. Vincent.
  15. Bonjour, Je le fais rapidement car du coup avec ce problème j'avance pas dans mon travail , je suis dessus depuis 9h. J'ai donc extrait de mon code ce qui me pose problème, et le phénomène est toujours présent. Mon problème est le fait que j'ai un ecart entre les border rouge et le contour noire du table, je ne sais pas pourquoi, je n'arrive pas à l'enlever malgrès margin et padding. Nota : je suis sous IE 6 (nos applis intranet tourne dessus) Merci de votre aide. voici le necessaire que j'ai mis dans des fichier à part pour les enlever du contexte de la page : .html /*#grilleLegende { font-size: 11px; padding:0; margin:0; border:1px solid black; } */ table { font-size: 11px; padding:0; margin:0; border:1px solid black; } #grilleLegende th { border:red 1px solid; padding:0; margin:0; } #grilleLegende tr { padding=0; margin=0; } /*#grilleLegende th { font-size: 11px; letter-spacing:normal; background-color:#3A9CC1; color:White; border:1px solid #3A9CC1; /*border-bottom:solid 1px #C0C0C0;*/ padding:0; margin:0; }*/ /* #grilleLegende .ColorQCarre { background-color:#E3FFA7; border:1px solid black; font-size: 1px; width: 10px; height: 10px; } #grilleLegende .ColorPCarre { background-color:#FFEEB1; border:1px solid black; font-size: 1px; width: 10px; height: 10px; } #grilleLegende .ColorNCarre { background-color:#D1ECFF; border:1px solid black; font-size: 1px; width: 10px; height: 10px; }*/
×
×
  • Create New...