Aller au contenu

conan

Actif
  • Compteur de contenus

    46
  • Inscrit(e) le

  • Dernière visite

Messages postés par conan

  1. 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.

  2. 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.

  3. 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 :

    ZoomGalerie.png

  4. Bonjour,

    Une url serait un plus pour t'aider car sans, difficile de pouvoir te répondre...

    xpatval

    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.

  5. 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.

  6. 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.

  7. 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;

    }

  8. Tu cherche a implémenter un modèle objet en te basant sur deux concepts qui ne sont pas objets.

    - ton modèle de donnée relationnel

    - tes vues utilisateurs

    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).

    Si tu es familier avec les diagrammes de classe UML, une solution consiste à modéliser tes classes en UML et à utiliser des outils de mapping qui vont te générer : tes classes, ton modèle relationnel. Il faut juste t'assurer que ton outil modélise correctement ton modèle relationnel. C'est important pour ne pas avoir de pb de performance.

    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

  9. A partir d'un MCD ce que tu obtiens c'est le shéma de ta base de donnée. Donc au mieux si tu appliques un mapping strict, tu peux déduire de ce shéma tes classes d'accès aux donnée (DAO : classes ne comprenant que des méthodes du type getChamp() et setChamp() ). Dans ce cas oui, à tous les champs de tes tables peuvent correspondre des attributs de tes classes, par contre l'héritage n'est pas indiqué.

    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.

    Si tu ne comptes pas développer une couche d'accès aux données, et que tu parles de tes classes métiers, alors ta logique métier demande très certainement une modélisation propre qui ne correspond peut-être pas à ton MCD. Pour les classes métiers l'héritage peut être intéressant.

    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.

  10. 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

  11. 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;}

    }

  12. 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 !!

  13. 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.

  14. 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;
    }*/

  15. Salut !

    Egalement à partir des heures tu peux détecter quels sont les pages accédées à ce moment là dans le logs d'apache (access.log).

    sinon tu peux faire un log au niveau de Php pour récupérer toutes les erreurs :

    php.ini :

    enlevers les ";" devant les tags suivants et remplir ce qui est necessaire

    log_errors = On

    error_log = "ton repertoire\ton fichier log que tu veux"

    moi je mets display_errors = off

    ainsi le client ne voit pas l'erreur mais je la récupère.

    je pense qu'avec ceci tu devrais déjà y voir plus claire.

  16. Voici donc plus d'informations :

    Galerie

    -------

    id (PK)

    iddossier

    nom ( fichier image avec son extension )

    dateheure

    infos ( contient : X;Y;poids image )

    resume ( description de l'image )

    Dossier

    -------

    id (PK)

    nom

    description

    activer (o/n) indique si le dossier et visible pour les "nons-administrateurs" ca permet de publier d'un coup le dossier quand il est complet

    triage ( date / file ) affichage par ordre de date ou par nom de fichier

    urlext ( url externe d'accès aux images ) url qui permet de soulager le serveur pour les images en stockant les images également à l'extérieur,

    car la galerie est actuellement derrière une 512/128.

    ---

    Sinon la solution que je vois est simplement :

    lors du "zoom" sur une image, on refais la requete permetant de lister les images du dossier, en retenant dans 3 variables ( précédent, actuel, suivant ) les id des images jusqu'à avoir actuel = celle que l'on a demandé, en fait le curseur d'enregistrement est sur "suivant" on lit à retardement.

    j'ai donc la solution, mais je voudrais savoir s'il n'y a pas mieux car car ca demande plus de travail car à la place faire :

    récuperation de l'entregistrement entier

    on récupére l'enregistrement entier pour les 3 variables alors que l'on a besoin d'avoir :

    précédent : juste l'id

    actuel : toute les champs

    suivant : juste l'id

    autre chose on pourrait très bien faire :

    parcours de tout les enregistrements et sauvegarde "décalé" dans les 3 variables de l'id

    si id actuel correspond à celui que l'on veut : requete pour récupéré tout les champs de l'enregistrement.

    voilà, mais il existe encore plusieur dérivé de cette technique :

    lorsque l'on recupére tout les enregistrement on peut :

    - prendre 1 à 1 via un while

    - tout mettre dans un array et ensuite récupérer ceux que l'on souhaite

    etc... ( ca peut être rapide mais aussi lourd, donc on peut encore dérivé la chose en ne récupérant que les ID dans le tableau et effectuer une

    requete plus présice sur l'enregistrement souhaité.

    bref ce que je voudrais, c'est avoir la meilleur solution entre rapidité et consomation mémoire.

    nota : pour ceux que ca interresse je peux développer une technique que j'ai mis en place pour ajouter automatiquement des images à la galerie et soulager la charge du serveur au moment d'afficher les images (pré-machage du travail) mais qui prends plus de poids sur le serveur. j'avais eu des gains jusque X3 sur une petite machine PII 350 372Mo de ram à l'époque.

  17. Tu prend l'id de la photo et tu faits id+1 et id-1 et hop le tour est joué,bien sur en code php hein...

    <{POST_SNAPBACK}>

    non simplement parce que les id même s'ils sont incrémenté automatiquement ne signifie pas que le suivant fais partie de la même catégorie.

    Exemple :

    Je mets 2 images dans la catégorie A (1 , 2)

    je mets 3 images dans la catégorie B (3 , 4, 5)

    j'ajoute 2 images dans la catégorie A (6, 7)

    le précédent de 6 n'est pas 5 car changement de catégorie, le suivant de 2 n'est pas 3 car changement de catégorie aussi.

  18. Bonsoir,

    Je voudrais avoir un renseignement sur un système utilisé dans les galerie d'images.

    souvent quand on affiche l'image en grand il est possible de passé à la précédente ou à la suivante directement, image faisant partie de la même catégorie. Ca évite de revenir sur l'ensemble des images appartenant à la catégorie. J'ai bien ma petite idée sur la chose et je voudrais savoir s'il n'y a pas mieux.

    donc comment feriez vous pour générer les liens précédent et suivant ?

    Merci.

  19. "L'auto-déclaration" de tableaux ne fonctionnent pas dans les class, en tout cas pas sous PHP4 (je n'ai jamais testé cela sous PHP5...un petit tour dans le manuel s'impose peut-être)...

    Déclare ta variable ainsi :

    var $errorMsg=array(1 => 't');

    Pour le premier problème, apparemment PHP4 ne permet pas de déclaration de constantes de classe... alors que PHP5 selon le manuel lui as cette possibilité : http://php.benscom.com/manual/fr/language.oop5.constants.php

    Je vais faire quelques recherches et je te redirais... mais garde bien en tête que c'es seulement depuis PHP5 que on considère PHP comme un language réellement orienté objet... PHP4 incluait une bonne partie du modèle objet mais c'était assez incomplet...

    **EDIT** C'est bien ce que je pensais...

    Trouvé dans le manuel PHP, dans les commentaires des utilisateurs :

    Cela signifie pour les "non-shakespeariens", que PHP4 ne permet pas les déclaration de constantes de classe, mais c'est possible depuis PHP 5.0.0 ...pour toutefois utiliser des vaitables avec une classe il suffit de les déclarer AVANT la classe en question, elle seront toutesfois accessible sans instancier la classe... mais ça peut être un mal nécessaire...on peu aussi tout simplement passer par une variable, mais c'est du bricolage pour un projet de grande envergure...

    <{POST_SNAPBACK}>

    Merci pour tes réponses.

  20. Bon ben voilà que je tombe de nouveau sur quelque chose d'étrange avec les classes, apparement on ne peut pas faire ceci :

    class acces

    {

    var $cnx;

    var $err_AccesRefuse = 1;

    var $errorMsg[1]='t';

    il refuse le tableau fourni, que l'index soit un chiffre ou une variable j'obtiens :

    Parse error, expecting ',' or ';' .... sur la ligne du tableau, si je commente la ligne alors pas d'erreur.

  21. N'utilises pas des constantes, mais des variables normales, pour ce genre de boulot.

    Tu peux aussi créer une autre classe, que tu pourras exporter dans un autre objet, ainsi les variables spécifiques à la classe seront... spécifiques à la classe..

    Mais sais tu qu'une variable affectée à une classe n'est pas visible de l'extérieur de l'objet ?

    Si tu définis une variable dans la classe, elle ne pourra interférer avec une autre variable, de même nom, comprise dans le programme, hors classe ?

    <{POST_SNAPBACK}>

    Si je souhaite mettre mes variables dans la classe c'est simplement pour les utiliser dans la classe et donc ne pas être visible de l'extérieur, c'est simplement pour les tests dans mes méthodes.

    si par exemple j'ai "un acces refusé" j'utilise alors sa valeur attribué pour accéder au tableau des mes messages d'erreur et ainsi l'afficher.

    Voilà pourquoi je ne voulais pas mettre des variables classique.

    mais si je me retrouve obligé...

  22. Ca fait pareil, apparement on est obligé de le faire hors classe, ce que je trouve génant car les variables définies ne doivent avoir que la classe comme portée, vu que ces variables me permettent de définir les erreurs engendrés au sein de ma classe.

  23. Bonjour,

    Je tente de mettre un define ou un const dans ma classe mais j'obtiens une erreur :

    parse error, expecting 'T_OLD_FUNCTION' or 'T_FUNCTION...

    je ne vois pas pourquoi on ne pourrais pas utiliser l'un ou l'autre ?

    merci de votre aide.

×
×
  • Créer...