Publicité
+ Répondre à la discussion
Page 2 sur 5 PremièrePremière 12345 DernièreDernière
Affichage des résultats 21 à 40 sur 97
  1. #21
    Membre éclairé Avatar de XtofRoland
    Inscrit en
    août 2005
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 357
    Points : 333
    Points
    333

    Par défaut

    Cette classe génère des formulaires d'après une requete sql.
    ici en deux classes car j'ai deux bases de données diff.
    je n'ai pas d'hebergeur...
    en passant si qqn a la motivation de mettre un script de ce genre en ligne..
    <form>
    <textarea name='code'>....</textarea>
    </form>
    <?
    if (!isset($_POST['code'])) $_POST['code'] = "";

    $tab = array('function','include','var', 'class');
    foreach ($tab as $word) $_POST['code'] = ereg_replace($_POST['code'], $word, "|color=blue]".$word."|/color]");

    $tab = array('mysql_..','substr','ldap_');
    foreach ($tab as $word) $_POST['code'] = ereg_replace($_POST['code'], $word, "|color=red]".$word."|/color]");

    echo $_POST['code']
    ?>
    pour faciliter la lecture des codes afficher ici ;-)

    <?
    //$obj->addCSS("f.css");
    include "formabs.inc";
    class formms extends formabs {
    var $db;
    function formms($SQL ){

    $this->db = odbc_connect("secret","secret","secret");
    $req = odbc_exec( $this->db,$SQL);

    $fieldName = array();
    $fieldLen = array();
    $fieldType = array();
    $fieldValue = array();

    $count = odbc_num_fields( $req )+1;
    for ($i=1;$i<$count ;$i++){
    $fieldName[$i] = odbc_field_name($req, $i); // nom du champ
    $fieldLen[$i] = odbc_field_len($req, $i); // longueur
    $fieldType[$i] = odbc_field_type($req, $i); // type du champ
    }


    odbc_fetch_row($req);
    for ($i=1;$i<$count ;$i++){
    $fieldValue[$i] = "";
    $fieldValue[$i] = odbc_result($req,$i);
    }
    $this->SQL = $SQL;
    $SQL = strtoupper($SQL);
    $SQL = str_replace(" FROM ", "[*%&]", $SQL );
    $SQL = str_replace(" WHERE ", "[*%&]", $SQL);
    list($fields,$this->table,$whereclause) = explode("[*%&]",$SQL);


    $this->numfields = $count;
    for ($i=1;$i< $this->numfields ; $i++){
    $this->fieldErrMsg[$i] = "";
    $this->test[$i] = "";
    $row = new row($fieldName[$i], $fieldLen[$i],$fieldType[$i]);
    $row->fieldValue= $fieldValue[$i];
    $this->rows[$fieldName[$i]] = $row ;
    }
    parent::formabs();
    }//end construct
    function nextSequence($col){
    $tab = $this->table ;
    $SQL = "select max(".$col.") from ".$tab;
    $req = odbc_exec( $this->db,$SQL);
    odbc_fetch_row($req);
    return odbc_result($req,1) + 1;
    }

    }//end class
    ?>
    voici la deuxieme:
    <?
    //$obj->addCSS("f.css");
    //array_keys
    define("CONSULT", 0);
    define("MODIFY", 1);
    define("ADD", 2);

    class row{
    /*

    */
    var $label = ""; //
    var $fieldName = ""; //nom du champs en db
    var $fieldLen = "";
    var $fieldType = "";
    var $fieldValue = "";//sera envoyé a la database
    var $visibleValue="";//sera affiché
    var $fieldErrMsg= "";
    var $visible = true;/*Un champ peut etre invisible
    - pour permettre des tests
    - car rempli automatiquement et pour le design */
    var $protected = false;
    var $key = false;
    var $list = array();
    var $auto = "";

    function row($fieldName, $fieldLen, $fieldType ){
    $this->fieldName = $fieldName;
    $this->label = $fieldName;
    $this->fieldLen = $fieldLen;
    $this->fieldType = $fieldType;
    }
    function toDB( ){
    $rtn = $this->fieldValue;
    $rtn = addslashes($rtn);
    return $rtn;
    }
    function show( $mode ){
    $rtn = "";
    if ($mode && !$this->protected ){
    switch($this->fieldType){
    case 'text':
    $rtn = "<TEXTAREA name='".$this->fieldName."' rows=4 cols=40>".nl2br($this->fieldValue)."</TEXTAREA>";
    break;
    default:
    $rtn = "<input type=text name='".$this->fieldName."' value='".$this->fieldValue."'>";
    break;

    }
    }else{//consult
    /*if ($this->fieldName == $this->primaryKey){
    $form .= "<input name=".$this->rows[$i]->fieldName." type=hidden value=".$this->rows[$i]->fieldValue.">";
    if ( ! $this->fieldValue ) $form .= " automatique ";
    }*/

    $rtn = ($this->fieldValue == '' && $this->auto )?'automatique':$this->fieldValue;
    }
    return $rtn;
    }//end show
    function test( ){

    }
    }//end class

    class formabs{
    var $mode = CONSULT;
    var $table = "";
    var $SQL = "";
    var $rows = array();
    var $numfields = 0 ; //nombre de rows
    var $ErrMsg = "";

    function formabs( ){
    if (isset($_POST)){
    foreach ($_POST as $key => $val) {
    if(isset($this->rows[$key])) $this->rows[$key]->fieldValue = $val;
    }
    }
    }//end _construct
    function nextSequence($col, $tab){}//end abstract fct
    function mode($mode ){
    $this->mode = $mode;
    }//end mode
    function protect($field ){
    $this->rows[$field]->protected = true;
    }//end protect
    function setAuto($field, $fct ){
    $this->protect($field);
    $this->rows[$field]->auto = $fct;
    }//end setAuto
    function primary($field ){
    $this->rows[$field]->key = true;
    $this->setAuto($field, 'nextSequence');
    }//end primary
    function traduction($dico ){
    foreach ($dico as $key => $val) if (isset($this->rows[$key]) && $val != "")$this->rows[$key]->label = $val;
    }//end traduction
    function getValue($field){
    return (isset($this->rows[$field]))? $this->rows[$field]->fieldValue: O;
    }//end getValue
    function show(){
    $count = $this->numfields;
    $form = "<form method=POST action=".$_SERVER['PHP_SELF']."?mode=".$this->mode."> ";
    $form .= "<table width=500 cellSpacing=0 cellPadding=0><TBODY>";
    $i = 0;
    foreach ($this->rows as $key => $row) {
    if ($row->visible){
    //libellé
    $i++;
    $form .= "<tr class=data".(($i % 2) + 1) ."><td>".$row->label."</td>";
    //icone
    $form .= "<td width=16>";
    if ( $row->fieldErrMsg != "" ) $form .= "<img src='"._HOMEPAGE."/Img/b_drop.png'>";
    $form .= "</td>";
    //champ
    $form .= "<td>";
    $form .= $row->show($this->mode) ;
    $form .= "</td><td>&nbsp;</td></tr>";
    }
    }
    $form .= "<TBODY></table>";

    if ( $this->mode == MODIFY || $this->mode == ADD ){
    $form .= " <table width=100%><tr><td>";
    if ( $this->ErrMsg ) $form .= "<marquee>".$this->ErrMsg."</marquee>" ;
    $form .= "</td><td width=86 height=29><input type=image src='"._HOMEPAGE."OO/form_bval.gif'></td></tr></table>";
    }
    $form .= "</form>";
    return $form;
    }// end show
    function test( ){
    $test = true;
    for ($i=1;$i< $this->numfields ; $i++){
    $this->fieldErrMsg[$i] = eval ($this->test[$i]);
    if ( $this->fieldErrMsg[$i] != "" ) $test = false;
    }
    return $test;
    }//end test
    function fillAutoField(){
    foreach ($this->rows as $key => $row) {
    if ($row->auto){
    switch($row->auto){
    case 'nextSequence':
    $temp = '$temp = $this->nextSequence("'.$key.'");';
    eval($temp);
    $this->rows[$key]->fieldValue = $temp;
    break;

    }
    }
    }
    }//end fillAutoField
    function getSQLSyntax(){
    $rtn = "";
    $into = "";
    $values = "";
    $set = "";
    $where = "";
    foreach ($this->rows as $key => $row) {
    if ($row->key){
    $where .= ($where == "" )? "" :" and ";
    $where .= $key."=".$row->toDB()." ";
    }else{
    $set = "";
    }
    $into .= ','.$key;
    $values .= ','.$row->toDB();
    }
    //retirer la premiere ','
    $into = substr($into,1);
    $values = substr($values,1);

    switch ($this->mode){
    case MODIFY:
    $rtn = "update ".$this->table." set ".$set." where ".$where.";";
    break;
    case ADD:
    $rtn = "insert into ".$this->table."(".$into.") values(".$values.");";
    break;
    }
    return $rtn;
    }//end getSQLSyntax
    function sql_exec($SQL ){
    return false; //abstract
    }
    function commit( ){
    $this->fillAutoField();
    $SQL = $this->getSQLSyntax();

    if ($this->sql_exec($SQL)){
    switch ($this->mode){
    case MODIFY:
    $this->ErrMsg = "<font color=green><b>Enregistrement modifié</b></font>";
    break;
    case ADD:
    $this->ErrMsg = "<font color=green><b>Enregistrement ajouté</b></font>";
    break;
    }
    $this->mode = CONSULT;
    }else{
    $this->ErrMsg = "<font color=red><b>Modification annulée</b></font>";
    }
    }//end commit
    }//end class
    ?>
    et voici une page qui utilise ces classes.
    <? session_start();
    include "../OO/page.inc";//la mise en page
    include "../OO/formms.inc";
    $mode = (isset($_GET['mode']))? $_GET['mode']:CONSULT;
    $body = "<img src='../Accueil/helpdesk.jpg' >";

    $SQL = "select ...mes champs... from Matable ";
    if ($mode == ADD){
    $SQL .= " where 1 = -1";
    $body .="<b> Ajout d'un trackit </b><br />";
    }else{
    $SQL .= " where XX_NUM = ".$_GET['num'];
    $body .="<b> Détail du trackit ".$_GET['num']."</b><br />";
    }
    $obj_form = new formms($SQL); //Création du formulaire
    $obj_form->mode($mode);

    $traduction = array ( "XX_NUM"=>"N° appel: ", "brol"=>"Récapitulatif: ", ... "NOTE"=>"Note: ", "STATUS"=>"Etat: " );
    $obj_form->traduction($traduction);
    $obj_form->primary("XXID");
    $obj_form->setAuto("XX_NUM","nextSequence");
    if ( $obj_form->test() && count($_POST)>0) $obj_form->commit();
    $body .= $obj_form->show();
    $page->addhtmlbody($body);
    $page->show();
    ?>
    la mise en page depend d'un css, mais il "suffit" d'adapter le fonction ->show() pour modifier la mise en page.
    vs pouvez bien entendu signaler des bug ou proposer des améliorations.
    a venir : la possibilité de proposer une liste de choix pour un champs(option select)

  2. #22
    Expert Confirmé Sénior Avatar de Mr N.
    Inscrit en
    septembre 2004
    Messages
    5 418
    Détails du profil
    Informations forums :
    Inscription : septembre 2004
    Messages : 5 418
    Points : 5 834
    Points
    5 834

    Par défaut

    plutot que la couleur, je préfère l'indentation grâce aux balises [code]

  3. #23
    Expert Confirmé Sénior
    Avatar de titoumimi
    Inscrit en
    décembre 2003
    Messages
    3 710
    Détails du profil
    Informations personnelles :
    Âge : 33

    Informations forums :
    Inscription : décembre 2003
    Messages : 3 710
    Points : 6 613
    Points
    6 613

    Par défaut

    Suite à de nombreuses demandes sur le forum, voici un petit script de lecture / écriture de fichier. Ici, nous ouvrons un fichier distant, en lisons le contenu, et l'enregistrons en local.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <?php
        // ---------------- Ouverture et lecture du fichier distant ----------------
        //Ouverture du fichier $fichier
        $fichier = "http://www.google.fr/intl/fr_fr/images/logo.gif";
        $fichierouvert = fopen ($fichier, "r");
        // Initialisation de la variable contenu
        $contenu ="";
        //Mise en mémoire du fichier dans une variable $contenu
        while (!feof($fichierouvert)) {
          $contenu .= fread($fichierouvert, 8192);
        }
        fclose ($fichierouvert);
     
        // ---------------- Création et écriture du fichier local ----------------
        //Répertoire de destination
        $dirname = "";  
        // Fichier de destination
        $filename = "carte.gif";
        //Ouverture du répertoire de destination
        $fichierouvert = fopen ($dirname.$filename, "w+");
        //Copie du fichier
        if ( !fwrite($fichierouvert, $contenu)) {
          echo "Impossible d'écrire dans le fichier ($filename)";
          exit;
        }
        //Fermeture du fichier
        fclose ($fichierouvert);
    ?>
    Au moment de la lecture du fichier, on pourrait simplifier en remplacant le while par
    Code :
    1
    2
     
    $contenu = fread ($fichier_ouvert, filesize($filename));
    mais il semble que la propriété filesize ne soit pas accessible à chaque fois.

    Pour la création et l'écriture dans un fichier, pensez bien à vérifier que vous avez les droits requis dans le répertoire donné et sur le fichier.


    Pour les modes d'ouverture du fichier, faites bien attention :
    'r' Ouvre en lecture seule, et place le pointeur de fichier au début du fichier.
    'r+' Ouvre en lecture et écriture, et place le pointeur de fichier au début du fichier.
    'w' Ouvre en écriture seule ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.
    'w+' Ouvre en lecture et écriture ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.
    'a' Ouvre en écriture seule ; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
    'a+' Ouvre en lecture et écriture ; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
    'x' Crée et ouvre le fichier en lecture seule ; place le pointeur de fichier au début du fichier. Si le fichier existe déjà, fopen() va échouer, en retournant FALSE et en générant une erreur de niveau E_WARNING. Si le fichier n'existe pas, fopen() tente de le créer. Ce mode est l'équivalent des options O_EXCL|O_CREAT pour l'appel système open(2) sous-jacent. Cette option est supportée à partir de PHP 4.3.2 et fonctionne uniquement avec des fichiers locaux.
    'x+' Crée et ouvre le fichier en lecture et écriture ; place le pointeur de fichier au début du fichier. Si le fichier existe déjà, fopen() va échouer, en retournant FALSE et en générant une erreur de niveau E_WARNING. Si le fichier n'existe pas, fopen() tente de le créer. Ce mode est l'équivalent des options O_EXCL|O_CREAT pour l'appel système open(2) sous-jacent. Cette option est supportée à partir de PHP 4.3.2, et fonctionne uniquement avec des fichiers locaux.

  4. #24
    Invité de passage
    Inscrit en
    février 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : février 2006
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Charger ds 1 variable le contenu d'1 page protégée par login

    Charger dans une variable le contenu d'une page protégée par un login

    Ce script est spécialement utile pour faire de l'extraction de données dans un site nécéssitant un login.

    Le script est assez court, mais la difficulté résidait dans la création du contexte correct pour faire transiter les informations de login en POST et le maintien du numéro de session.

    Pour illustrer le fonctionnement, voici le script sécurisé ( supposé être dans l'alias de dossier de publication http://localhost/php/ et s'appeler main.php ):

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?
       session_start();
       if ($_POST[user]=="Moi" && $_POST[pass]=="AJE")
       {
         $_SESSION[accept]="OK";
         echo "Enregistrement ok.<br><a href='main.php'>Contenu</a>";
       }
       else if ($_SESSION[accept]=="OK")
       {
         echo "BRAVO. Vous avez accédé au contenu";
       }
       else
       {
         echo '<form name="mainform" method="post">';
         echo 'User:<input type="text" name="user" value="Moi" size="20" /><br>';
         echo 'Pass:<input type="password" name="pass" value="AJE" size="20" /><br>';
         echo '<input type="submit" name="Envoi" /></form>';
       }
    ?>
    et voici la solution:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?php
    // Référence pour les contextes http://fr.php.net/stream
    $opts = array ('http'=>array ('method' => 'POST',
                                  'content'=> 'user=Moi&pass=AJE',
                                  'header' => "Accept-language: en\r\n".
                                              "Cookie: PHPSESSID=9d5c2d1c8cfab4094283887a2623a0c4" )
                  );
    $context = stream_context_create($opts);
    $fichier = fopen('http://localhost/php/main.php', 'r', false, $context);
    fclose($fichier);
    $opts = array ('http'=>array ('method' => 'GET',
                                  'header' => "Accept-language: en\r\n".
                                              "Cookie: PHPSESSID=9d5c2d1c8cfab4094283887a2623a0c4" )
                  );
    $context = stream_context_create($opts);
    $fichier = fopen('http://localhost/php/main.php', 'r', false, $context);
    while ($str=fread($fichier, 16))
    {
      $src .="$str";
    }
    fclose($fichier);
    echo $src;
    ?>
    Je n'en suis pas peu fier, j'ai dû bien chercher...

    Que le code soit avec toi.

  5. #25
    Membre éclairé
    Profil pro
    Inscrit en
    décembre 2004
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 31
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : décembre 2004
    Messages : 662
    Points : 319
    Points
    319

    Par défaut

    alors moi je vais porter ma ptite pierre toute toute petite à l'édifice

    On veut souvent vérifier dans un forulaire qu'un mail est bien correcte, un '.' et un '@ et sans ';' en geral donc voila une ptite focntion pour ca

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Verifier la presence de caractere interdit dans une chaine pour un mail 
    function falsemail($email){  
    if( strpos($email,'.') === false || strpos($email,'@') == false || strpos($email,';') == true )  
     
    return(true); 
     
    else 
     
     
    return(false); 
    }

    Sinon j'ai voulu changer la fonction pour n'importe quel chaine et avec n'importe quel type de caractere a interdir, en gros un tableau de caractere interdit

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    // verifie la presence de caractere interdit (variable $tab) pour une chaine 
    function falsechaine($chaine,$tab){  
    $ereur = false; 
     
    for($i=0;$i<sizeof($tab) && $ereur == false;$i++){  
     
    if( strpos($chaine,$tab[$i]) != false )  
     
     
    $ereur = true;
     
     
    } 
     
    return($ereur); 
    }
    voila j'espere ca en aidera certains


    /!\ En faisant des test plus poussé je viens de m'apercevoir d'un bug.
    Si le caractere interdit se trouve en 1ere position il n'est pas detexté!!!! donc rajouté un espace dans la variable de chaine a tester en tout debut ce qui permet d'éviter ce bug.

  6. #26
    Membre Expert
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    février 2004
    Messages
    2 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : février 2004
    Messages : 2 244
    Points : 1 412
    Points
    1 412

    Par défaut

    Class d'upload

    Cette classe permet de charger (normalement) simplement un ou des fichiers sur un serveur distant ou local, supprimer, créer des dossiers.
    Je l'ai faite sans trop l'utiliser mais ça peut servir

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    <?php
    /****************************************************/
    /*  Class FileManager par Krak @ Anduriel
    ****************************************************/
     
    define ("FTP_CONNECTSSL_FAILED", "<b>Erreur critique:</b> connection au serveur 
    impossible. Vérifiez si l' OpenSSL est installé.");
    define ("FTP_CONNECT_FAILED", "<b>Erreur critique:</b> connection au serveur imp
    ossible.");
    define ("LOGIN_FAILED", "<b>Erreur critique:</b> impossible de se connecter, vér
    ifiez les paramètres d'accès.");
    define ("NO_FILE_UPLOADED", "<b>Erreur:</b> le fichier n'a pas été téléchargé su
    r le serveur.");
    define ("ERR_FILESIZEINI", "<b>Erreur:</b> la taille d'un des fichiers dépasse l
    a limite fixée dans votre php.ini.");
    define ("ERR_FILESIZE", "<b>Erreur:</b> la taille d'un des fichiers dépasse la l
    imite fixé par le formulaire.");
    define ("ERR_PARTIALDL", "<b>Erreur:</b> un des fichiers a été téléchargé partie
    llement dans le dossier temporaire.");
    define ("ERR_NOFILEDL", "<b>Erreur:</b> un des fichiers n'a pas été téléchargé d
    ans le dossier temporaire");
    define ("ERR_NOFOLDER", "<b>Erreur:</b> dossier temporaire introuvable.");
    define ("ERR_CANTWRITE", "<b>Erreur:</b> impossible d'écrire le fichier dans le 
    dossier temporaire.");
    define ("CANT_CHANGEDIR", "<b>Erreur:</b> impossible d'entrer dans le dossier ")
    ;
    define ("CANT_CREATEDIR", "<b>Erreur:</b> impossible de créer le dossier demandé
    .");
    define ("SSL_NOTINSTALLED", "<b>Erreur:</b> l'ouverture sécurisée SSL n'est pas 
    disponible.");
    define ("CANT_DELETEFILE", "<b>Erreur:</b> impossible de supprimer le fichier sp
    écifié.");
    define ("INVALID_FILE", "<b>Erreur:</b> fichier spécifié invalide ou introuvable
    .");
    define ("NO_DELETE", "<b>Erreur:</b> fichier non supprimé. Il se peut qu'aucun d
    ossier n'ait été spécifié.");
    define ("CANT_CHMOD", "<b>Erreur:</b> impossible de changer le chmod du dossier/
    fichier spécifié.");
    define ("CANT_RENAME", "<b>Erreur:</b> impossible de changer le nom du dossier s
    pécifié.");
    define ("CANT_LIST", "<b>Erreur:</b> impossible de lister le répertoire.");
     
    class FileManager {
       var $envars;
       var $openftp;
       var $file_destination = '.';
       var $force;
     
      /***************************************************************
    *********/
      /* Function d'enregistrement des variables
      /* setftpvars(urlserver, accessname, acesspass [, mode])
      /*  - urlserver = url du ftp sans www et sans slasch (ftpperso.free.fr)
      /*  - accessname = pseudo de connection
      /*  - accessspass = mot de passe de connection
      /*  - mode = Tranfert des fichiers: ASCII ou BINARY
      /***************************************************************
    ********/
       function setftpvars($server, $username, $userpass, $mode="ASCII") {
          $this->envars['ftp_server'] = $server;
          $this->envars['ftp_pass'] = $userpass;
          $this->envars['ftp_login'] = $username;
          $this->envars['ftp_transfert'] = constant('FTP_'.$mode);
       }
      /***************************************************************
    *********/
      /* Se place dans un dossier spécifique
      /* setftpdir(dir, force)
      /*  - dir = dossier dans lequel charger les fichiers
      /*  - force = crée le dossier s'il est inexistant
      /***************************************************************
    ********/
       function setftpdir($dir, $force=false) {
          $this->file_destination = $dir;
          $this->force = $force;
       }
      /***************************************************************
    *********/
      /* Créé un dossier
      /* createdir(dir [, chmod] [, dest])
      /*  - dir = dossier à crée
      /*  - chmod = droit d'accès au dossier. Par défaut 0777
      /*  - dest = true pour créer sur un serveur distant
      /***************************************************************
    ********/
       function createdir($dir, $chmod=0777, $dest=false) {
          if (!is_dir($dir) && $dest == false) {
             @mkdir($dir, $chmod) or die (CANT_CREATDIR);
          }
         elseif (!is_dir($dir) && $dest != false) {
             @ftp_mkdir($this->openftp, $dir) or die (CANT_CREATDIR);
          }
       }
      /***************************************************************
    *********/
      /* Function de connection à un serveur distant
      /* opensslftp(openmode)
      /*  - openmode = true pour une ouverture sécurisée SSL
      /***************************************************************
    ********/   
       function openftp($sslopen=false) {
          if ($sslopen == true) {
             if (!function_exists("ftp_ssl_connect")) {
                echo SSL_NOTINSTALLED;
                exit;
             }
             if (!$this->openftp = @ftp_ssl_connect($this->envars['ftp_server'])) {
                echo FTP_CONNECTSSL_FAILED;
                exit;
             }
          } else {
             if (!$this->openftp = @ftp_connect($this->envars['ftp_server'])) {
                echo FTP_CONNECT_FAILED;
                exit;
             }
          }
          @ftp_login($this->openftp, $this->envars['ftp_login'], $this->envars['ftp_
    pass']) or die (LOGIN_FAILED);
       }
      /***************************************************************
    *********/
      /* Charge les fichiers issus d'un formulaire
      /* uploadfiles(input, destination)
      /*  - input = nom du champ de type file. Il peut être un tableau.
      /*  - destination = true pour les charger sur un serveur distant
      /***************************************************************
    ********/     
       function uploadfiles($inputname="", $specialftp="") {
          if (!empty($_FILES[$inputname])) {
             foreach($_FILES[$inputname]['name'] As $key => $file) {
                if ($file != '') {
                   $lastfile = ' (Fichier concerné: <b>'.htmlspecialchars($file).'</
    b>)<br>';
                   switch($_FILES[$inputname]['error'][$key]) {
                      case 1:
                         echo ERR_FILESIZEINI.$lastfile;
                         exit;
                  case 2:
                        echo ERR_FILESIZE.$lastfile;
                        exit;
                      case 3:
                         echo ERR_PARTIALDL.$lastfile;
                         exit;
                      case 4:
                         echo ERR_NOFILEDL.$lastfile;
                         exit;
                      case 6:
                         echo ERR_NOFOLDER.$lastfile;
                         exit;
                      case 7:
                         echo ERR_CANTWRITE.$lastfile;
                         exit;
                      default: break;
                   }
                   $filename = basename($_FILES[$inputname]['name'][$key]);
                   if (empty($specialftp)) {
                      if ($this->force == true) $this->createdir($this->file_destina
    tion);
                      if (!$is_moved = @move_uploaded_file($_FILES[$inputname]['tmp_
    name'][$key], $this->file_destination.'/'.$filename)) {
                         echo NO_FILE_UPLOADED.$lastfile;
                      }
                   } else {
                      $fp = fopen($_FILES[$inputname]['tmp_name'][$key], 'r');
                      if ($this->force == true) $this->createdir($this->file_destina
    tion, 0777, true);
                      @ftp_chdir($this->openftp, $this->file_destination) or die(CAN
    T_CHANGEDIR.$this->file_destination);
                      if (!$is_moved = @ftp_fput($this->openftp, $filename, $fp, $th
    is->envars['ftp_transfert'])) {
                         echo NO_FILE_UPLOADED.$lastfile;
                      }
                      else {
                         fclose($fp);
                      }
                   }
                }
             }
          }
       }
      /***************************************************************
    *********/
      /* Supprime un fichier ou des fichiers
      /* deletetfile(file [, destination]])
      /*  - file = fichier à supprimer. Pour plusieurs fichiers metter un tableau
      /*    Ce fichier sera supprimé du dossier setftpdir() si le dossier n'est pas 
    spécifié
      /*    dans un tableau:
      /*    => array('file1.txt' => 'dir/dir', 'file2.exe' => '../dir2', 'file3.html
    ')
      /*  - destination = true pour les supprimer d'un serveur distant
      /***************************************************************
    ********/
       function deletefile($file, $specialftp="") {
          $lastfile = (!is_array($file)) ? ' (Fichier concerné: <b>'.htmlspecialchar
    s($file).'</b>)<br>' : ' (Tableau de fichier)';
      if (!is_array($file) && is_file($this->file_destination.'/'.$file)) {
         if (empty($specialftp)) {
            return @unlink($this->file_destination.'/'.$file) or die (CANT_DELETEFIL
    E.$lastfile);
         } else {
            return @ftp_delete($this->openftp, $this->file_destination.'/'.$file) or
     die (CANT_DELETEFILE.$lastfile);
         }
      }
      elseif (is_array($file)) {
         foreach($file as $dir => $to_delete) {
            $lastfile = ' (Fichier concerné: <b>'.htmlspecialchars($to_delete).'</b>
    )<br>';
            $dir = (is_numeric($dir)) ? $this->file_destination : $dir;
            if (is_file($dir.'/'.$to_delete)) {
               if (empty($specialftp)) {
                  @unlink($dir.'/'.$to_delete) or die (CANT_DELETEFILE.$lastfile);
               } else {
                  @ftp_delete($this->openftp, $dir.'/'.$to_delete) or die (CANT_DELE
    TEFILE.$lastfile);
               }
            } else {
               echo INVALID_FILE.$lastfile;
            }
         }
      }
      else {
         echo NO_DELETE.$lastfile;
      }
       }
      /***************************************************************
    *********/
      /* Change le Chmod d'un dossier ou d'un fichier
      /* changechmoddir(dir, chmod, destination)
      /*  - dir = dossier dont le chmod est à modifier
      /*  - chmod = droit d'accès au dossier.
      /*  - destination = true si le fichier ou dossier est sur un serveur distant
      /***************************************************************
    ********/
       function changechmod($filedir, $chmod, $specialftp="") {
          if (empty($specialftp)) {
             @chmod($filedir, $chmod) or die (CANT_CHMOD);
          }
          else {
             @ftp_chmod($this->openftp, $filedir, $chmod) or die (CANT_CHMOD);
          }
       }
      /***************************************************************
    *********/
      /* Renomme un dossier/fichier
      /* changenamedir(dirfile, newname, destination)
      /*  - dirfile = dossier/fichier dont le nm est à modifier
      /*  - newname = nouveau nom
      /*  - destination = true si le fichier ou dossier est sur un serveur distant
      /***************************************************************
    ********/
       function changename($dirfile, $name, $specialftp="") {
          if (empty($specialftp)) {
             @rename($dirfile, $name) or die (CANT_RENAME);
          }
          else {
             @ftp_rename($this->openftp, $dirfile, $name) or die (CANT_RENAME);
          }
       }
      /***************************************************************
    *********/
      /* Liste un répertoire
      /* listrepertory(repertory, destination)
      /*  - destination = true si le dossier est sur un serveur distant
      /***************************************************************
    ********/
       function listrepertory($repertory, $specialftp="") {
          if (empty($specialftp)) {
             if ($handle = @opendir($repertory)) {
                while (false !== ($file = @readdir($handle))) {
                   if ($file != "." && $file != "..") {
                      if (is_file($file)) $prefix = ' (fichier)';
                      if (is_dir($file)) $prefix = ' (dossier)';
                      echo '- '.$file.$prefix.'<br>';
                   }
               }
             closedir($handle);
             } else echo CANT_LIST;
          }
          else {
             $contents = ftp_nlist($this->openftp, '.');
             var_dump($contents);
             foreach ($contents AS $file) {
                if (is_file($file)) $prefix = 'Type: fichier, nom: ';
                if (is_dir($file)) $prefix = 'Type: dossier, nom: ';
                echo $prefix.$file.'<br>';
             }
          }
       }
    }

  7. #27
    Rédacteur
    Avatar de Swoög
    Inscrit en
    janvier 2003
    Messages
    6 049
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 049
    Points : 8 282
    Points
    8 282

    Par défaut

    Parsage d'un fichier csv (séparateur paramétrable)

    possibilité de condiérer la première ligne comme en-tête...

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    function parse_csv($file, $head = false, $sep = ';')
    {
       $content = file($file);
       $headers = NULL;
       if($head)
       {
          $headers = array_shift($content);
          $headers = explode($sep, $headers);
       }
       foreach($content as $k => $v)
       {
            $content[$k] = explode($sep, $v);
            if($head) foreach($content[$k] as $num_col => $value)
                $content[$k][$headers[$num_col]] = $value;
       }
       return $content;
    }
    Rédacteur "éclectique" (XML, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [code] (bouton #) et au tag (en bas)

  8. #28
    Rédacteur
    Avatar de Swoög
    Inscrit en
    janvier 2003
    Messages
    6 049
    Détails du profil
    Informations personnelles :
    Âge : 26

    Informations forums :
    Inscription : janvier 2003
    Messages : 6 049
    Points : 8 282
    Points
    8 282

    Par défaut

    Création d'un chemin jusqu'à un répertoire (crée un répertoire et éventuellement ses dossiers parents) pour ceux qui ont pas PHP5
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function recur_mkdir($path)
    {
       $path = preg_split('<([/\\])>', $path, -1, PREG_SPLIT_DELIM_CAPTURE)
       $curr = '';
       for($i = 0; $i < count($path); $i += 2)
       {
          $curr .= $path[$i].$path[$i+1];
          if(!is_dir($curr) && !mkdir($curr)) return false;
       }
       return true;
    }
    Rédacteur "éclectique" (XML, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [code] (bouton #) et au tag (en bas)

  9. #29
    Membre expérimenté Avatar de gtraxx
    Homme Profil pro Aurélien Gérits
    Développeur Web
    Inscrit en
    mai 2006
    Messages
    1 045
    Détails du profil
    Informations personnelles :
    Nom : Homme Aurélien Gérits
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : mai 2006
    Messages : 1 045
    Points : 515
    Points
    515

    Par défaut

    bon vu que je débute en php je ne peux que poster un simple code que j'avais poster sur mon site .

    tester si une DTD est valide via un script php (utilse pour le locale)

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <html>
     
    <head>
     
    //la declaration
     
    <meta http-equiv="Content-Type" content="text/html; charset="iso-8859-1">
     
    <title>Validation DTD d'un document XML en PHP</title> </head>
     
    <?php
     
    //le tableau qui contiendra les erreurs
     
    $erreurs = array();
     
    //Pour la lecture et l'interpretation du fichier xml
     
    //remplacer "http://localhost/xml/......." par le nom de votre fichier XML a valider.
     
    //Attention : saisissez le chemin complet d'accès au fichier sur
     
    //le serveur web pour que cela fonctionne
     
    $parseur_dom = xmldocfile("http://localhost/xml/.......",DOMXML_LOAD_VALIDATING, $erreurs);
     
    //Le document est il bien formé?
     
    if(!is_objet($parseur_dom))
     
     {
       echo("Le document XML n'est pas bien formé!<br>");   die(print_r($error));}
     
    //le document est il valide selon sa DTD?
     
    if(!domxml_doc_validate($parseur_dom, $erreurs))
     
    {
     
     echo"Le document n'est pas valide<br>"; print_r($erreurs);}
     
    else
     
    {
     
        echo"Le document est bien formé et valide!<br>";}
     
    ?>
     
    <body>
     
    </body>
     
    </html>
    Par contre je cherche la meilleur façon de mettre en oeuvre un fil rss via un script php .
    Genre ce script qui me laisse perplex .(il n'est pas de moi):
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php 
     
    # Configuration 
     
    $fichier_xml = "monfichier.xml";
    $nombre_limite = 20;
     
    # Affichage du Flux 
    $file = fopen($fichier_xml,"r"); 
    if ($file) { 
    while (!feof($file))$raw .= fread($file,32000); 
    fclose( $file ); 
     
    if(eregi("<item>(.*)</item>",$raw,$rawitems)){ 
    $items = explode("<item>", $rawitems[0]); 
    $nb = count($items); 
    $maximum = (($nb-1) < $nombre_limite) ? ($nb-1) : $nombre_limite; 
     
    for ($i=0;$i<$maximum;$i++) { 
    eregi("<title>(.*)</title>",$items[$i+1], $title); 
    eregi("<link>(.*)</link>",$items[$i+1], $link); 
    echo "- <a href=\"".$link[1]."\" target=\"_blank\">".$title[1]."</a><br />"; 
    } 
    } 
    } 
    ?>
    si quelqu'un a s une idée ???

  10. #30
    Membre chevronné
    Avatar de Kioob
    Profil pro Olivier Bonvalet
    Inscrit en
    septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Nom : Olivier Bonvalet
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : septembre 2004
    Messages : 550
    Points : 750
    Points
    750

    Par défaut

    Donc, voici une petite classe qui "limite" les possibilités de vol de session. J'utilise cette classe au sein d'un framework, et ait donc été obligé d'enlever pas mal de trucs afin de la rendre portable, j'éspère que je n'en ai pas trop enlevé

    Deux mécanismes sont utilisés :
    1) vérification de la durée de la session
    2) controle d'un ID transmis en même temps que l'ID de session, mais qui change à chaque hit. Pour les accès concurrents, un timeout de 10 secondes est utilisé.

    Je ne vais pas trop détailler le code, qui n'est d'ailleurs que très peu commenté... mais bon... utilisez le si ça peu vous aider, pour ma part je n'assure aucun support dessus.

    Ah je précise : dans cette version l'ID est changé au moment du "session_close()". Et il faut qu'il soit appelé avant que du contenu soit envoyé. Cela ne devrait pas poser de problème sur un site "bien construit"... mais ce n'est pas toujours le cas
    Dernier point : la classe est à utilisée comme singleton... débrouilez vous comme vous voulez, mais ne l'instanciez pas deux fois hein...


    Donc le mode d'emploi :
    Code :
    1
    2
    3
    // ouverture de la session
    $session = new k_session();
    $session->enabled();
    puis :
    Code :
    1
    2
    // fermeture de la session
    $session->close();
    -----------------------------------------

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    <?php
    class k_session
    {
        var $is_new = true;
        var $enabled = false;
     
        var $concurrency_timeout = 10 ;
        var $history_trigger_nb = 5 ;
        var $history_expire = 60 ;
     
        function k_session()
        {
            if( !empty( $_COOKIE[ session_name() ] ) )
            {
                $this->start();
            }
        }
     
        function start()
        {
            if( $this->enabled === true ) return;
            $this->enabled = true;
     
            $random_id = @ $_COOKIE[ 'K_SID' ];
            $start_time = time();
     
            session_start();
     
            $valid = true;
     
            // Expiration checking
            if( $valid and isset( $_SESSION['_k_time'] ) )
            {
                if( $_SESSION['_k_time'] + ini_get( 'session.gc_maxlifetime' ) < time() )
                {
                    $valid = false;
                }
            }
     
            // Random ID checking
            if( $valid and isset( $_SESSION[ '_k_random_id' ] ) )
            {
                if( $random_id === $_SESSION[ '_k_random_id' ][ 'current' ] )
                {
                    // Ok.
     
                }
                elseif( $time = @ $_SESSION[ '_k_random_id' ][ 'old' ][ $random_id ] )
                {
                    if( $time < $start_time )
                    {
                        $valid = false;
                    }
                }
                else
                {
                    $valid = false;
                }
     
                // Clean up the history
                if( count( $_SESSION[ '_k_random_id' ][ 'old' ] ) >= $this->history_trigger_nb )
                {
                    foreach( $_SESSION[ '_k_random_id' ][ 'old' ] as $idx => $time )
                    {
                        if( $time + $this->history_expire < $start_time )
                        {
                            unset( $_SESSION[ '_k_random_id' ][ 'old' ][ $idx ] );
                        }
                    }
                }
            }
     
            // Is not valid ?
            if( ! $valid )
            {
                $_COOKIE[ 'K_SID' ] = NULL;
                $_SESSION = array();
                session_destroy();
                session_id( md5( uniqid( mt_rand(), true ) ) );
                session_start();
            }
     
            // Set some vars
            $this->is_new = ( count( $_SESSION ) > 0 );
            $_SESSION['_k_time'] = time();
        }
     
        function destroy()
        {
            if( $this->enabled !== true ) return;
            $this->enabled = false;
            session_destroy();
     
            setcookie( 'K_SID', NULL, NULL, '/', ini_get( 'session.cookie_domain' ) );
            setcookie( session_name(), '', NULL, '/', ini_get( 'session.cookie_domain' ) );
        }
     
        function change_id()
        {
            if( $this->enabled !== true ) return;
     
            static $already_done = false;
            if( $already_done !== false ) return;
            $already_done = true;
     
            if( ! isset( $_SESSION[ '_k_random_id' ] ) )
                $_SESSION[ '_k_random_id' ] = array( 'current' => NULL, 'old' => array() );
     
            // Change the ID
     
            // Set to keep the current ID for some seconds
            $old_id = $_SESSION[ '_k_random_id' ][ 'current' ];
            if( $old_id !== NULL )
            {
                $_SESSION[ '_k_random_id' ][ 'old' ][ $old_id ] = time() + $this->concurrency_timeout ;
            }
     
            // Set the new ID
            $new_id = md5( uniqid( mt_rand(), true ) );
            $_SESSION[ '_k_random_id' ][ 'current' ] = $new_id;
     
            setcookie( 'K_SID', $new_id, NULL, '/', ini_get( 'session.cookie_domain' ) );
        }
     
        function close()
        {
            if( $this->enabled !== true ) return;
            $this->enabled = false;
     
            $this->change_id();
            session_write_close();
        }
    }
    ?>
    Google is watching you !

  11. #31
    Membre régulier

    Inscrit en
    juin 2004
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : juin 2004
    Messages : 94
    Points : 96
    Points
    96

    Par défaut Génération d'un mot de passe

    La petite fonction ci-dessous le réalise mais offre quelques options qui ne sont pas dépourvues d'intérêt:
    * choix de la longueur du mot de passe (8 par défaut)
    * choix du type de lettres (majuscules ou minuscules)
    * Possibilité d'épeler le mot de passe (désactivé par défaut)
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?
    function mkpassword($len=8, $min=true, $spell=false) {
       $ok_chars = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whisky", "X-ray", "Yankee", "Zulu");
       // Le tableau des caractères utilise le code phonétique international
       $password["string"] = "";
       $password["litteral"] = "";
       for ($i=0; $i<$len; $i  ) {
          $val = rand(0,count($ok_chars) - 1);
          $password["string"] .= $ok_chars[$val]{0} ;
          $password["litteral"] .= $ok_chars[$val]." ";
       }
       if ($min == true)
          $password["string"] = strtolower($password["string"]);
       $password["litteral"] = trim($password["litteral"]);
       if ($spell == true) {
          return $password;
       } else {
          return $password["string"];
       }
    }
    ?>
    La fonction peut être appelée de quatres manières différentes et renverra deux types de données:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?
    /* Cas 1: appel simple */
    $mypass = mkpassword();
    // Renvoit une chaîne de 8 caractères, chiffres et lettres minuscules
     
    /* Cas 2: choix de la longueur du mot de passe */
    $mypass = mkpassword(16);
    // renvoit une chaîne de 16 caractères, chiffres et lettres minuscules
     
    /* Cas 3: lettres majuscules */
    // *** Atention *** Il faut obligatoirement donner une longueur
    $mypass = mkpassword(8, false);
    // renvoit une chaîne de 8 caractères, chiffres et lettres majuscules
     
    /* Cas 4: Mot de passe épelé */
    $mypass = mkpassword(8, true, true);
    // renvoit un tableau contenant le mot de passe et son épelation
    echo $mypass["string"]." => ".$mypass["litteral"];

  12. #32
    Membre habitué
    Avatar de NiHiL
    Inscrit en
    juin 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : juin 2006
    Messages : 102
    Points : 110
    Points
    110

    Par défaut [SCRIPT] Clide, gestion de fichiers

    Bonjour,

    Je viens vous présenter un script que j'ai créé.
    Il s'agit d'un script en PHP qui remplace les pages (moches) générées par Apache dans une arborescence web destinée au stockage de fichiers, par une interface graphique beaucoup plus agréable et personnalisable.

    Fonction et caractéristiques :

    - Skin une arborescence http dédié au stockage de fichiers
    - Modifications & Intégration très simple du design
    - Player intégré pour les vidéos, les flashs, les flv, les mp3 les fichiers éditables et les images
    - Gestion des Exifs par le player
    - Affichage et Highlight de la sources des fichiers PHP dans le player
    - Module d'administration pour uploader/supprimer des fichiers et créer des dossiers
    - Possibilité de créer des comptes pour uploader
    - Possibilité de ne pas afficher des fichiers ou des répertoires
    - URLs semi réécrite pour une meilleure visualisation et un meilleur référencement sur les moteurs de recherche
    - Création d'avatar dynamique automatique via l'administration
    - xHTML 1.1 & CSS valid

    Démo
    Télécharger Clide

    Vos remarques sont les bienvenues

  13. #33
    Membre Expert
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : juillet 2006
    Messages : 871
    Points : 1 087
    Points
    1 087

    Par défaut

    CALCUL DE DUREE EN PHP

    Voici le code d'un petit truc que j'avais bricolé car je galérais à calculer les dates...
    C'est un formulaire permettant la saisie de 2 Heures puis calcul la différence entre les deux quelques soit la difference entre les heures dans le temps

    Sur recommandation de Mr Kerod voici :

    [edit] : maj cause oubli de gestion de variable super-globale
    <?php
    /************************************************************************************
    * COde PHP montrant un peu la gestion des Dates en Heures en php *
    * notament le calcul entre deux heures indifferement dans le temps, *
    * l'heure 1 peut etre plus tôt ou plus tard que l'heure 2 et inversement, le script *
    * fera le calcul suivant un journée de 24h *
    * Notes : Le format utilisé est le format 24h avec hh:mm:ss *
    * mais on peut le changer facilement ;p *
    * *
    *@author =)C!S(=_SnaKemaN *
    *@version 1.0 *
    *@version 1.2
    + Contrôle des variable super-globale (php 4.3.10 oblige...) *
    ************************************************************************************/
    //Controle des valeurs, c'est certes aberrant mais c'est un exemple apres vous gerez
    //comme vous voulez
    if(isset($_POST['heure1']))
    $my_strh1=$_POST['heure1'];
    else
    $_POST['heure1'] = "00-00-00";

    if(isset(
    $_POST['heure2']))
    $my_strh2=$_POST['heure2'];
    else
    $_POST['heure2'] = "00-00-00";

    if(!isset(
    $h3))
    $h3 = 0;

    echo
    "<TABLE cellpadding=5 cellspacing=0 align=center border=1>";
    echo
    "<TR>";
    echo
    "<TD>";
    //note Changer le "action" pour avoir le nom de votre page ou se fera le traitement
    echo "<FORM method=\"POST\" name=\"mf\" action=\"./calcul_date.php\">";
    echo
    "<TABLE cellpadding=5 cellspacing=0 align=center border=1>";
    echo
    "<TR>";
    echo
    "<TD><strong>Heure 1:</strong></TD>";
    //Une heure est deja présaisie pour faciliter le test
    echo "<TD><INPUT type\"text\" name=\"heure1\" value=\"07:00:00\"></TD>";
    echo
    "</TR>";
    echo
    "<TR>";
    echo
    "<TD><strong>Heure 2 :</strong></TD>";
    //Une heure est deja présaisie pour faciliter le test
    echo "<TD><INPUT type\"text\" name=\"heure2\" value=\"17:00:00\"></TD>";
    echo
    "</TR>";
    echo
    "<TR>";
    echo
    "<TD colspan=2 align=center>";
    echo
    "<INPUT type=\"submit\" name=\"go\" value=\"Valider\">";
    echo
    "</TD>";
    echo
    "</TR>";
    echo
    "</TABLE>";
    echo
    "</FORM>";
    echo
    "</TD>";
    echo
    "<TD>";
    echo
    "<strong>Date et heure courante :</strong><br>";
    echo
    date('d/m/Y @ H:i:s',time());
    echo
    "<br>";
    echo
    "</TD>";
    echo
    "<TD>";
    $my_strh1=$_POST['heure1'];
    $my_strh2=$_POST['heure2'];
    //Conversion des heures en TimeStamp
    $h1=strtotime($my_strh1);
    $h2=strtotime($my_strh2);
    //Si la deuxieme heure est bien plus tard que la premiere
    if($h2 > $h1)
    {
    $h3=($h2-$h1);
    }
    //Si c'est la premiere heure qui est plus tard que la deuxieme
    if($h1 > $h2)
    {
    $h3=86400-($h1-$h2)-3600;
    }
    echo
    "<strong>Heure 1 :</strong>".$my_strh1."<br>";
    @
    $date1 = getdate($h1);
    //Controle du format de l'heure h 00 < hh < 24 ; 00 < mm < 59 ; 00 < ss < 59
    if($h1 == -1 ){
    echo
    "Heure_1 incorrecte ! <br>";
    }else{
    echo
    "Heure_1 OK <br>";

    echo
    "<strong>Heure 2 :</strong>".$my_strh2."<br>";
    //Controle du format de l'heure h 00 < hh < 24 ; 00 < mm < 59 ; 00 < ss < 59
    @$date2 = getdate($h2);
    if(
    $h2 == -1 ){
    echo
    "Heure_2 incorrecte ! <br>";
    }else{
    echo
    "Heure_2 OK <br>";

    echo
    "<strong>Valeur de h1 :</strong>".$h1."<br>";
    echo
    "<strong>Valeur de h2 :</strong>".$h2."<br>";
    $h3=$h3-3600;//Retrait d'une heure de decalage o_O
    echo "<strong>Valeur de h3 :</strong>".$h3."<br>";
    echo
    "<strong>Decalage heure :</strong>";
    //reconversion du timestamp en heure préformatée (ici H M)
    echo strftime("%H:%M",$h3);
    }
    //Fin if else heure 2
    }//Fin if else heure 1
    echo "<br>";
    echo
    "</TD>";
    //Et vouala ^_^
    echo "</TR>";
    echo
    "</TABLE>";
    ?>
    Colorez votre code PHP sur les forums grâce à Developpez.comBonne journée

    SKN

  14. #34
    Membre Expert
    Avatar de guitou12
    Homme Profil pro Guillaume
    Inscrit en
    juillet 2006
    Messages
    941
    Détails du profil
    Informations personnelles :
    Nom : Homme Guillaume
    Âge : 31
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : juillet 2006
    Messages : 941
    Points : 1 262
    Points
    1 262

    Par défaut

    Une petite fonction sans prétentions mais qui me sert grandement

    Récupération rapide des variables de formulaire/sessions/Url/Cookies

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    /********************
          RECUP VAR
    *********************/
    /** 
    * Récupère les vars d'url, de session suivant les paramètres passés
    * get (resp. post) convertit en majuscules les valeurs alors que get_lower (resp.post_lower) recupere la valeur brute
    * @param $param Le type de récupération (get / post / session etc)
    * @param $nom_var Le nom de la variable à récupérer
    * @param $defaut_val La valeur par défaut de retour si la variable n'est pas définie
    * @return La valeur de la variable
    */
    function recup_var($param,$nom_var,$defaut_val)
    {
        switch($param)
        {
            case 'get':
                if (isset ($_GET[$nom_var])) $res=$_GET[$nom_var]; else $res=$defaut_val; break;
            case 'post':
                if (isset ($_POST[$nom_var])) $res=$_POST[$nom_var]; else $res=$defaut_val; break;
            case 'session':
                if (isset ($_SESSION[$nom_var])) $res=$_SESSION[$nom_var]; else $res=$defaut_val; break;
                   case 'cookie':
                if (isset ($_COOKIE[$nom_var])) $res=$_COOKIE[$nom_var]; else $res=$defaut_val; break;
        }
        return $res;
    }

  15. #35
    Membre du Club
    Inscrit en
    juillet 2006
    Messages
    145
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations forums :
    Inscription : juillet 2006
    Messages : 145
    Points : 42
    Points
    42

    Par défaut

    Avoir la date en Français

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    // Avoir la date en Français
    // <a href="mailto:are-no@emiloo.com">are-no@emiloo.com</a>
    // Ca marche comme la fonction date()
     
    function date_fr($format){
    if (func_num_args()=="2"):$horodatage=func_get_arg(1);else:$horodatage=time();endif;
    $date_fr = date($format, $horodatage);
    $traduction = array( 
    "Monday" => "Lundi", "Tuesday" => "Mardi", "Wednesday" => "Mercredi", "Thursday" => "Jeudi", "Friday" => "Vendredi", "Saturday" => "Samedi", "Sunday" => "Dimanche",
    "Mon" => "Lun", "Tue" => "Mar", "Wed" => "Mer", "Thu" => "Jeu", "Fri" => "Ven", "Sat" => "Sam", "Sun" => "Dim",
    "January" => "janvier", "February" => "fevrier", "March" => "mars", "April" => "avril", "May" => "mai", "June" => "juin", "July" => "juillet", "August" => "août", "September" => "septembre", "October" => "octobre", "November" => "novembre", "December" => "decembre",
    "Jan" => "jan", "Feb" => "fev", "Mar" => "mar", "Apr" => "avr", "May" => "mai", "Jun" => "jui", "Jul" => "juil", "Aug" => "aoû", "Sep" => "sep", "Oct" => "oct", "Nov" => "nov", "Dec" => "dec"
    );
    $date_fr = strtr($date_fr , $traduction); 
    return($date_fr);
    }

  16. #36
    Expert Confirmé Sénior
    Avatar de berceker united
    Profil pro
    Développeur informatique
    Inscrit en
    février 2005
    Messages
    3 142
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2005
    Messages : 3 142
    Points : 4 359
    Points
    4 359

    Par défaut

    Comment envoyer plusieurs pièce jointe dans un mail ?
    Généralement il y a des tutoriaux pour un fichier mais plus c'est assez rare. Donc je me suis un peut pris la tête dessus mais j'ai finit par y arriver. Voici le code.
    Il faut créer un répertoire "tmpimg"
    1 - Upload de tous les fichiers
    2 - Contrôle les extensions.
    3 - Construction de l'entête pour le mail.
    4 - Envoy du mail
    5 - Suppresion des fichiers.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    //PREMIER FICHIER.
    <? $nbFile = 3; ?>
    <html>
    <body>
    <form action="mail.php" method="POST" enctype="multipart/form-data" name="formulaire">
       <br><br>
       <table style="border:1px solid #000000" align="center">
         <tr>
           <td colspan="2" class="en-tete">Envoyer vos informations concernant le produit</td>
         </tr>
         <tr>
           <td colspan="2">
             <textarea name="message"></textarea>
           </td>
         </tr>
    <? for($i=0;$i<$nbFile;$i++){ ?>
         <tr>
           <td>Fichier image <? echo $i+1; ?> :</td>
           <td><input type="file" name="fichier<? echo $i; ?>" value="">
         </tr>
    <? } ?>
         <tr>
           <td align="center" colspan="2"><input type="submit" name="action" value="Envoyer"></td>
         </tr>
       </table>
       <input type="hidden" name="nbfile" value="<? echo $nbFile; ?>">
    </form>
    </body>
    </html>
     
    //FICHIER MAIL.
    //$filename : chemin du fichier.
    function get_extension($filename){
       $parts = explode('.',$filename);
       $last = count($parts) - 1;
       $ext = $parts[$last];
       return $ext;
    }
     
     
    if($_SERVER['REQUEST_METHOD'] == 'POST'){  //Détecte si c'est le post provient d'un POST.
      $isConform        = false;
      $attachment       = array();
      $arrNameFile      = array();
      $arrSource        = array();
      $arrExtension     = array();
      $arrType          = array();
      $arrInfoManu      = array();
      $arrExtensionCTRL = array('jpg','jpeg','bmp','psd','png','gif','tif','tiff');
      $boundary = "-----=".md5(uniqid(rand()));
      $extensionTemp    = '';
      $file             = '';
      $attachment       = '';
     
      $destinataire     = 'mail destinataire';
      $from             = 'votre mail';
      $reponse          = 'votre mail réponse';
      $sujet            = 'Votre sujet';
      $repertoire       = 'tmpimg'; //Répertoire ou ce trouverons les fichiers attachées.
      $fp               = null;
      $type             = 'text/plain';
      $message          = trim($_POST['message']);
     
      if($_POST['action'] == 'Envoyer'){
        for($i=0;$i<$_POST['nbfile'];$i++){ //Boucle sur le nombre de champs de type file
          $extensionTemp = get_extension($_FILES['fichier'.$i]['name']); // Récupère l'extension du fichier
          if($_FILES['fichier'.$i]['name'] != ''){  //Détecte si il y a eu un fichier d'envoyé.
            if(in_array(strtolower($extensionTemp), $arrExtensionCTRL)){ //Regarde si l'extension est valide.
              $arrNameFile[$i] = $_FILES['fichier'.$i]['name'];  //Nom du fichier
              $arrSource[$i]   = $_FILES['fichier'.$i]['tmp_name']; //Fichier temporaire :: contenu.
              $isConform = true;  //Il est donc conforme.
            }else{
              $isConform = false; //Il n'est pas conforme
            }
          }
        }
      }
     
      //Redirection dans le cas ou il y a une extension non valide.
      if($isConform == false){
        header('Location:page_erreur.php?erreur=true');
        exit();
      }
      //Boucle sur le nombre de fichier valide.
      for($i=0;$i<count($arrNameFile);$i++){
        copy($arrSource[$i], $repertoire.'/'.$arrNameFile[$i]); //Copie le fichier dans une zone précise du disque
        $arrExtension[$i] = strtolower(get_extension($arrNameFile[$i])); //récupère l'extension
        if($arrExtension[$i] == 'gif')                                     $arrType[$i] = 'image/gif';  //gif
        else if($arrExtension[$i] == 'bmp')                                $arrType[$i] = 'image/bmp';  //bmp
        else if($arrExtension[$i] == 'png')                                $arrType[$i] = 'image/png';  //png
        else if($arrExtension[$i] == 'psd')                                $arrType[$i] = 'image/psd';  //psd
        else if($arrExtension[$i] == 'jpg' || $arrExtension[$i] == 'jpeg') $arrType[$i] = 'image/jpeg'; //jpg
        else if($arrExtension[$i] == 'tif' || $arrExtension[$i] == 'tiff')  $arrType[$i] = 'image/tiff'; //tif
      }
     
    //----------------------------------
    // Construction de l'entête
    //----------------------------------
     
      $header = "MIME-Version: 1.0\r\n";
      $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
      $header .= "\r\n";
     
      $msg = "Je vous informe que ceci est un message au format MIME 1.0.\r\n";
     
      $msg .= "--$boundary\r\n";
     
      $msg .= "Content-Type: $type; charset=\"iso-8859-1\"\r\n";
     
      $msg .= "Content-Transfer-Encoding:8bit\r\n";
      $msg .= "\r\n";
      $msg .="===================VOTRE MESSAGE===================\r\n\r\n";
      $msg .= $message;
      $msg .= "\r\n";
     
      for($i=0;$i<count($arrNameFile);$i++){
        $file = $repertoire.'/'.$arrNameFile[$i];
     
        $fp = fopen($file, 'rb');
        $attachment = fread($fp, filesize($file));
        fclose($fp);
        $attachment = chunk_split(base64_encode($attachment));
     
        $msg .= "--$boundary\r\n";
        $msg .= "Content-Type: ".$arrType[$i]."; \r";
        $msg .= "name=\"".$arrNameFile[$i]."\"\r\n";
        $msg .= "Content-Transfer-Encoding: base64\r\n";
        $msg .= "Content-Disposition: inline;\r\n filename=\"".$arrNameFile[$i]."\"\r\n";
        $msg .= $attachment . "\r\n";
     
        $msg .= "\r\n";
        $msg .= "\r\n\r\n";
        unlink($file);
      }
      $msg .= "--$boundary--\r\n";
      if(mail($destinataire, $sujet , $msg,"Reply-to: $reponse\r\nFrom: $from\r\n".$header)){
        echo "OK";
      }else{
        echo "ERREUR";
      }
    }
    ?>
    Je précise que le code date et qu'il est largement possible de le simplifier. Il semblerais qu'il ne fonctionne pas dans tous le cas de figure.

    ------------------------------------

    Comment réaliser un diaporama d'image?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <?php
    $arrFichier = array();
    $i=0;
    $directory='images/';
    // Ouvre un dossier bien connu, et liste tous les fichiers
    if (is_dir($directory)) {
      if($dh = opendir($directory)) {
        while (($file = readdir($dh)) !== false) {
         $extension = pathinfo($directory.$file);
          if($file!='..' && $file!='.' && strtolower($extension['extension'])=='jpg'){//N'affiche pas le . et ..
            $arrFichier[$i] = $file; //PLace les fichier dans un tableau
            $i++;
          }
        }
      }
      closedir($dh); //Il est vivement conseiller le repertoire pour toute autre opération sur le systeme de fichier.
    }
     
    //Initalisation.
    if($_GET['index']!=''){
      $index = $_GET['index'];
    }else{
      $index = 0;
    }
     
    //Affichage des liens précédent et suivant.
    if($index > 0){ //N'affiche pas le boutton au premier
      echo '<input onClick="window.location=\''.$_SERVER['SCRIPT_NAME'].'?index='.($index-1).'\'" type="button" name="precedent" value="<<">';
    }
     
    echo '<img src="'.$directory.'/'.$arrFichier[$index].'">'; //Affichage de l'image
     
    if($index < (count($arrFichier)-1)){ //N'affiche pas le boutton suivant lorsqu'il y a pas d'image apres
      echo '<input onClick="window.location=\''.$_SERVER['SCRIPT_NAME'].'?index='.($index+1).'\'" type="button" name="suivant" value=">>">';
    }
    ?>
    ---------------------------------------------------------
    Comment faire une pagination clés en main ?

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <?php
    //FONCTION
    //fonction permettant de récupérer le nombre maximum d'image présente dans la table.
    function nbElement(){
      $rs = null;
      $data = array();
      $rs = mysql_unbuffered_query("SELECT COUNT(idimage) FROM image");
      $data = mysql_fetch_row($rs);
      return $data[0];
    }
     
     
    // INITALISATION
    $nbRec    = 10; // Nombre d'image qui s'affichera par page
    $position = 0; //Position de lecteur sur le jeux d'enregistrement(param1).
    $data     = array();
    $image    = array();
    $rs       = null;
    $nbData   = 0;
    $i        = 0;
    if($HTTP_GET_VARS['position']!='') $position = $HTTP_GET_VARS['position'];
    //Pas la peine d'exécuter x fois la même fonction je le fais passer en paramètre.
    if($HTTP_GET_VARS['nbelement']!='')$nbElement = $HTTP_GET_VARS['nbelement'];
    else $nbElement = nbElement();
     
    //OPERATION SQL
    $requette = "SELECT nom, width, height FROM image ORDER BY nom LIMIT ".$position.",".$nbRec;
    $rs = mysql_unbuffered_query($requette,$rsConnexion);
    while($data = mysql_fetch_row($rs)){
      $image[$i]['nom']   = $data[0];
      $image[$i]['width'] = $data[1];
      $image[$i][height]  = $data[2];
      $i++;
    }
    $nbData = $i //Récupère le nombre d'enregistrement.
    mysql_free_result($rs);
    unset($requette,$data,$i); //Pour taper un style! ;)
    mysql_close($rsConnexion); //Nous avons plus besoin de connexion
    ?>
    ...html
    <table>
      <tr>
        <td>
    <? // Pour le bouton précédent 
    if(($position-8)>=0){
    echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?nbelement='.$nbElement.'&position='.($position+$nbRec)">Précédent</a> 
    }else{ 
      echo '&nbsp;';
    } 
    ?>
        </td>
        <td>&nbsp;</td>
        <td>
    <? //Pour le bouton suivant 
      if(($position+$nbRec)<=$nbElement){ 
        echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?nbelement='.$nbElement.'&position='.($position+$nbRec)">Suivant</a> 
    }else{ 
      echo '&nbsp;';
    } 
    ?>  
        </td>
      </tr>
      <tr>
        <td>Nom</td>
        <td>Largeur</td>
        <td>Hauteur</td>
      </tr>
    <? for($i=0;$i<$nbData;$i++){ ?>
      <tr>
        <td><img height="<? echo $image[$i]['height']; ?>" width="<? echo $image[$i]['width']; ?>" src="<? echo $image[$i]['nom']; ?>"></td>
        <td><? echo $image[$i]['width']; ?></td>
        <td><? echo $image[$i]['height']; ?></td>
      </tr>
    <? } ?>
    </table>
    Pour ceux qui veulent des liens de type:
    [1-10][11-20][21-30] ...
    Code :
    1
    2
    3
    4
    5
    6
    7
    <?for($i=0;$i<ceil($nbElement/$nbRec);$i++) {
        $sup = ($i+1)*$nbRec;
        $inf = ($sup-$nbRec)+1;
        if($position == ($i*$nbRec)) echo '<a href="#" style="color:#FF0000;">['.$inf.' - '.$sup.']</a>'.chr(13);
        else echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?nbelement='.$nbElement.'&position='.($i*$nbRec).'">['.$inf.' - '.$sup.']</a>'.chr(13);
    }
    ?>
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  17. #37
    Membre Expert
    Inscrit en
    juillet 2004
    Messages
    1 028
    Détails du profil
    Informations forums :
    Inscription : juillet 2004
    Messages : 1 028
    Points : 1 040
    Points
    1 040

    Par défaut

    Dans le cadre d'un développement j'avais besoin de créer un système de *plug in*.
    Pour cela j'avais besoin de créer dans mes classes des points d'entrées utilisable par des classes externes que je connais pas encore.

    Donc le but est de faire cummuniquer une classe A avec une classe B, sans que A ne connaisse B.

    Pour cela j'ai fait une petite classe d'evenement. C'est surement améliorable, les vieux de la vieille me feront signe
    Mais bon sa remplit le but fixer dans le paragraphe du dessus.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    class Evenement
    {
        //////////////////////////////////////////////////
        //    propriétés
        //////////////////////////////////////////////////
        protected $p_abonnes;
     
     
        public function __construct()
        {
            $this->p_abonnes = new ArrayObject();
        }
     
        public function attacherUnAbonne( $classe , $methode )
        {
            $this->p_abonnes[] = new Evenement_Abonne($classe , $methode);
        }
     
        public function detacherUnAbonne( $classe , $methode )
        {
            foreach( $this->p_abonnes as $cle => $abonne )
                if( $abonne->classe == $classe && $abonne->methode == $methode)
                    unset($this->p_abonnes[$cle]);
        }
     
        public function declencher()
        {
            $args = func_get_args();
     
            foreach( $this->p_abonnes as $abonne )
                if( method_exists($abonne->classe, $abonne->methode ) )
                    call_user_func_array(array($abonne->classe,$abonne->methode), &$args); 
        }
    }
     
    class Evenement_Abonne
    {
        //////////////////////////////////////////////////
        //    propriétés
        //////////////////////////////////////////////////
        protected $p_classe;
        protected $p_methode;
     
        //////////////////////////////////////////////////
        //    
        //////////////////////////////////////////////////
        public function __construct( $classe , $methode )
        {
            $this->p_classe     = $classe;
            $this->p_methode     = $methode;
        }
     
        //////////////////////////////////////////////////
        //
        //////////////////////////////////////////////////
        public function __get( $prop )
        {
            switch( $prop )
            {
                case "classe":
                    return $this->p_classe;
                break;
                case "methode":
                    return $this->p_methode;
                break;
            }
     
            throw new Exception("Propriété ".$prop." inconnue dans la classe ".(__CLASS__)."");
        }
     
        //////////////////////////////////////////////////
        //
        //////////////////////////////////////////////////
        public function __set( $prop , $value )
        {
            switch( $prop )
            {
                case "classe":
                    $this->p_classe = $value;
                break;
                case "methode":
                    $this->p_methode = $value;
                break;
                default:
                    throw new Exception("Propriété ".$prop." inconnue dans la classe ".(__CLASS__)."");
                break;
            }
        }
    }
    Exemple d'usage :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    class Papa
    {
        public $lorsDeLappel; // levenement à declencher
     
        public function __construct()
        {
            $this->lorsDeLappel = new Evenement();
        }
     
        public function faireLAppel()
        {
            $Objet = new stdClass();
            var_dump($Objet);
            $this->lorsDeLappel->declencher($Objet);
        }
    }
     
    class Enfant
    {
        public $nom;
     
        public function repondrePresent( $Objet )
        {
            echo "<br /><strong>".$this->nom." à répondu</strong> : je suis ici.<br />";
            var_dump($Objet); // verification que l'objet reçu est bien envoyé par référence
        }
    }
     
    $Papa = new Papa();
    for( $i=0; $i< 15; $i++)
    {
        $Enfant = new Enfant();
        $Enfant->nom = $i;
        $Papa->lorsDeLappel->attacherUnAbonne( $Enfant , "repondrePresent" );
    }
     
    $Papa->faireLAppel();
    Enfin sa reste qu'un callback amélioré hein. Rien d'exceptionnel c'est extremement rudimentaire.

    bbye

  18. #38
    Membre confirmé
    Profil pro Matthieu
    Étudiant
    Inscrit en
    septembre 2004
    Messages
    394
    Détails du profil
    Informations personnelles :
    Nom : Matthieu
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2004
    Messages : 394
    Points : 295
    Points
    295

    Par défaut

    Comment se créé un espace membre ( sans verification de l'addresse email)

    conex.ini.php
    Code :
    1
    2
    3
    4
    <?php
    mysql_connect('localhost','root','');
    mysql_select_db(nombase);
    ?>
    inscription.php
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    <?php
    //Avez vous envoyer le formulaire 
    if(isset($_POST['login']))
    	{
    	$login=$_POST["login"];
    	$pass=$_POST["pass"];
    	$pass2=$_POST["pass2"];
    	$nom=$_POST["nom"];
    	$nom=trim($nom);
    	$login=trim($login);
    	$pass=trim($pass);
    	$pass2=trim($pass2);
    	if($pass==$pass2)
    		{
    	$mail=$_POST["mail"];
    	$clogin=strlen($login);
    	$cpass=strlen($pass);
    	$cnom=strlen($nom);
    // on demande que le nom , login , et le passe fasse plus de 3 caractére 
    	if($clogin>3&$cpass>3&$cnom>3)
    		{
    		$pass=md5($pass);
    		$cpass=strlen($pass);
    //et qu'il fasse moin de 50 ou 30
    		if($clogin<30&$cpass<50&$cnom<30)
    			{ 
    			include("conex.ini.php");
    			$sql="SELECT id_client
                FROM `client`
                WHERE login = '$login'
                LIMIT 0,1";
                $res = mysql_query($sql)or exit(mysql_error());
                if( mysql_fetch_array($res) == false)
    				{
    				//inscription de 1 personne dans la base de donnée
    				$sql="INSERT INTO `client` (`login` , `pass` , `mail`,`nom` )
    				VALUES ('$login', '$pass' , '$mail' , '$nom' )";
    				mysql_query($sql);
    				echo"<script>alert(\"Vous pouvez vous conecter en tant que $login\");";
    				echo"window.location.replace(\"index.php?m=1\");\n";
    				echo"</script>";
    				}
    			else
    				{
    				echo"<script>alert(\"se login est deja utilisé\");";
    				echo"window.location.replace(\"./index.php\");\n";
    				echo"</script>";
    				}
    			}
    		else
    			{
    			echo"<script>alert(\"se login ou mot de passe est trop grand\");";
    			echo"window.location.replace(\"./index.php\");\n";
    			echo"</script>";
    			}
     
    		}
    	else
    		{
    		echo"<script>alert(\"Login ou mot de passe trop petit\");";
    		echo"window.location.replace(\"./index.php\");</script>";
    		}
    		}
    	else
    		{
    		echo"<script>alert(\"Vous devez confirmer le mot de passe avec le méme mot..\");";
    		echo"window.location.replace(\"./index.php\");</script>";
    		}
    	}
    else
    	{
    	$page="./inscription.php";
    	echo"<h2>Inscription</h2>";
    	echo"<table>";
    	echo"<form action=\"$page\" method=\"POST\">";
    	echo"<tr><td>Login</td><td><input type=\"text\"name=\"login\"></td></tr>";
    	echo"<tr><td>nom</td><td><input type=\"text\" name=\"nom\"></td></tr>";
    	echo"<tr><td>Pass</td><td><input type=\"password\" name=\"pass\"></td></tr>";
    	echo"<tr><td>Confirmation</td><td><input type=\"password\" name=\"pass2\"></td></tr>";
    	echo"<tr><td>email</td><td><input type=\"text\" name=\"mail\"></td></tr>";
    	echo"<tr><td></td><td><input type=\"submit\" value=\"s'inscrire\" style=\"width: 100%\"></form></td></tr></table>";
    	}
    ?>
    conection.php

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
    if(isset($_POST['login']))
    	{
    	//destruction des données précédentes 
    	session_start();
    	session_destroy();
    	//récuperation des valeurs
    	$login=trim($_POST['login']);
    	$pass=trim($_POST['pass']);
    	$pass=md5("$pass");
    	//requéte SQL pour avoir le n° de client de cette personne
    	include("conex.ini.php");
    	$sql="SELECT id_client
    	FROM `client`
    	WHERE login = '$login'AND pass = '$pass'";
    	$res = mysql_query($sql)or exit(mysql_error());
    	$client=0;
    	$nbclient=0;
    	while ($row = mysql_fetch_row($res))
    		{
    		for ($j = 0; $j < count($row); $j++)		
    			{
    			$client=$row[$j];
    			$nbclient++;
    			}
    		}
    	if($nbclient>1)
    		{
    		echo"<script>alert(\"il as plusieurs personnes sur se login\nvous devez contacter l'admin\");</script>";
    		}	
    	else
    		{
    		if($client=="0")
    			{
    			echo"<script>alert(\"Votre login ou pass est faux\");\n";
    			echo"window.location.replace(\"./index.php\");\n";
    			echo"</script>";
    			}
    		else
    		{
    			//Script de connection
    			session_start();
    			$_SESSION['client']=$client;
    			echo"<script>\n";
    			echo"window.location.replace(\"./p2.php\");\n";
    			echo"</script>";
    			}
    		}
    	}
    else
    	{
    	//formulaire d'inscription
    	$page="./conection.php";
    	echo"<h2>Identification</h2>";
    	echo"<table>";
    	echo"<form action=\"$page\" method=\"POST\">";
    	echo"<tr><td>Login</td><td><input type=\"text\"name=\"login\"></td></tr>";
    	echo"<tr><td>Pass</td><td><input type=\"password\" name=\"pass\"></td></tr>";
    	echo"<tr><td></td><td><input type=\"submit\" value=\"se conecter\" style=\"width: 100%\"></form></td></tr></table>";
    	}	
    ?>
    p2.php

    Code :
    1
    2
    3
    4
    5
    6
    <?
    session_start();
    if(isset($_SESSION['client']))
    {//ta page
    }
    ?>
    J'ai créé sa moi méme , si sa vous semble interessant a l'ajouter , le remanier ( ps : envoyer un mp , que j'améliore chez moi aussi)

    Je sait que $page=$_SERVER['PHP_SELF'];
    aurait été mieu .....
    Voila , je l'utilise et auccun probléme ( avec mes 3 visiteurs ...... )

  19. #39
    Membre confirmé
    Profil pro Matthieu
    Étudiant
    Inscrit en
    septembre 2004
    Messages
    394
    Détails du profil
    Informations personnelles :
    Nom : Matthieu
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : septembre 2004
    Messages : 394
    Points : 295
    Points
    295

    Par défaut

    Livre d'or a quelques problémes , donc , je l'ai corriger .

    l'erreur <? je ne sait plus pourquoi faut plus l'utiliser .
    et $valeur a la place de $_POST['valeur']
    Et enfin , petit ajout de ma part , $mess=htmlspecialchars($mess); ( pour empécher les personnes qui conaissent le html de s'amuser a utiliser du javascript et du html)

    Les pages :

    écriture.php

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <html><head><title>COMMENT CREER SON LIVRE D'OR</title>
    <META NAME="reply-to" CONTENT="ludo@informaticien.com">
    <META NAME="copyright" CONTENT="GIAMBIASI ludovic">
    <script>
    function test_form(mess, expe) {
       if(mess.value=="") { alert('Vous devez tapez un message !')
           mess.focus();return false }
    	 if(expe.value=="") { alert('Vous devez tapez votre nom !')
           expe.focus();return false }
       return true}
       // script permettant de tester si les champs de saisie sont bien remplis...
    </SCRIPT>
    </head>
    <body>
    <?php
    include ("connexion.php"); // ouverture de la connexion
    if(isset($_GET[test])) { // on regarde si la variable test = "ok"...
    							// si l'on n'a pas envoyé le formulaire cette variable n'est pas égale à ok
    							// dès que l'on a envoyé le formulaire, cette variable = ok donc 
    							// On enregistre le message dans la bd et on affiche
    							// l'information comme quoi le message a bien été enregistré...
       $Date  = date("Y/m/d"); // on récupère la date à laquelle le message est posté
       $mess=$_POST['mess'];
       $mess=htmlspecialchars($mess);
       $expe=$_POST['expe'];
       $query = "INSERT INTO livre(codelivre, message, expediteur, date)"; // cette requette dit
       $query .= " VALUES('', '$mess','$expe', '$Date')"; 				 				 // d'envoyer les éléments du formulaire dans la base
       $result = mysql_query($query); // on enregistre
       echo"<b>	<font face=\"Arial, Helvetica, sans-serif\" color=\"#3344cc\" size=\"3\">Votre message a &eacute;t&eacute; correctement enregistr&eacute;</font></b><br /><br />";
       }
    ?>
       <!-- Affichage du résultat... -->
     
    <font size="3"><a href="livre.php"><b>Lire les messages</b></a></font>
    <?php
    $test=$_GET['test']; // fin du premier test
    if ($test!="ok"){ // première ouverture du fichier ecriture... on remplie le formulaire
    // cette partie est cachée lorsque l'on a envoyé le message...
    ?>
    <b>	<font face="Arial, Helvetica, sans-serif" color="#3344cc" size="3">ECRIRE UN MESSAGE</font></b><br />
    <!-- notre formulaire... action : on retourne dans ce même fichier avec en plus la
    variable test qui prend la valeur ok et toutes les infos du formulaire...
    Le onSubmit sert à vérifier si le contenu du formulaire n'est pas vide... (voir function
    js appelée)
    -->
    <form method="post" onSubmit="return test_form(this.mess, this.expe)" action="ecriture.php?test=ok">
    	 		 		 <table cellpadding="0" cellspacing="0" width="100%">
    	 				 				<tr><td align="center" valign="top">
    	 				 								<font size="2" face="Arial, Helvetica, sans-serif" color="#3344cc"><b>Votre nom</b></font></td>
    	 				 			 			<td align="center" valign="top">
    													<input type="text" name="expe" size="30"><!-- on nomme expe le nom de l'expéditeur... -->
    													<font size="1" face="Arial, Helvetica, sans-serif;" color="#3344cc"><b>(pr&eacute;nom ou pseudo accept&eacute;)</b></font></td></tr>
    									<tr><td align="center" colspan="2">						 
    													<hr color="#3366cc"></td></tr>
    									<tr><td align="center" valign="top">
    	 				 								<font size="2" face="Arial, Helvetica, sans-serif" color="#3344cc"><b>Votre&nbsp;message :</b></font></td>
    	 				 			 			<td align="center" valign="top"><!-- on nomme mess le message de l'expéditeur... -->
    													<textarea cols="50" rows="10" name="mess"></textarea></td></tr>
    									<tr><td align="center" colspan="2">						 
    													<hr color="#3366cc"></td></tr>
    									<tr><td align="center" colspan="2">						 
    													<input type="submit" name="ok" value="&nbsp;Envoyer&nbsp;" style="cursor:hand;"></td></tr></table>
    </form>
     
    <?php
    }
    mysql_close(); // on ferme la connexion 
    ?>	
    </body>
    </html>
    livre.php

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    <html><head><title>COMMENT CREER SON LIVRE D'OR</title>
    <META NAME="reply-to" CONTENT="ludo@informaticien.com">
    <META NAME="copyright" CONTENT="GIAMBIASI ludovic">
     
    </head>
    <body>
    <!--
    ***********************************************************************
    Ce script est libre d'utilisation. Enjoy !
    ludovic giambiasi
    Pour tout problème...
    		 ludo@informaticien.com
    =========================================
    COMMENT CREER SON LIVRE D'OR ?
    Etape n°1 
    		Vous devez créer une table dans votre base de données...
    		#------
    		CREATE TABLE livre (
    		   codelivre int(11) NOT NULL auto_increment,
       			 message blob,
       			 expediteur varchar(100),
       			 date date,
       			 PRIMARY KEY (codelivre)
    			 );
    		#------
    		Vous pouvez ajouter des champs... (e-mail, nom, prénom...)
     
    Etape n°2		
    		Vous devez changer les paramètres de connexion à votre base dans
    		le fichier connexion.php	 
     
    Etape n°3
    		Adaptez le code du livre d'or au design de votre site.
    		le fichier livre.php (celui-ci) contient le code pour lire les messages du livre d'or.
    		le fichier ecriture.php permet l'écriture de messages...
    		C'est fini.
     
    Etape n°4
    		Compréhension du code source du livre d'or... vous
    		allez voir, ce n'est pas bien compliqué.
    ***********************************************************************		 
    -->
    <?php
    include("connexion.php"); // ouverture de la connexion
     
     $sql = mysql_query("select count(*) from livre"); // pour connaître le nombre de messages...
     $total = @mysql_fetch_array($sql);	 							 // ...présents dans le livre d'or.
     $resder = $total[0];															 // le résultat sera stocké dans la variable $resder
     $sql = mysql_query("select * from livre order by date desc"); // voici la requette permettant d'aller chercher les messages...
     																 			 // ...triés par date
    ?>
     
    <font face="arial" size="2">
    <a href="ecriture.php">Ecrire un message</a><hr /> 
    Nombre de messages : <b>
    <?php
    echo $resder; // on affiche le nombre de message 
    ?>
    </b>
    <br /><br />
    <!-- pour se repérer... -->
    <table width="600">
    			 <tr><td width="200" align="center">
    			 				 <b><font color="#3344cc" size="2" face="Arial, Helvetica, sans-serif;">
    							 Exp&eacute;diteur /<br /> Date </font></b></td>
    			 				 <td width="400" align="center">
    							 <b><font color="#3344cc" size="3" face="Arial, Helvetica, sans-serif;">
    							 Message</font></b></td></tr></table>
     
    <?php
    while($valeurlud = @mysql_fetch_array($sql)){ // début de la boucle qui se terminera à la fin des enregistrements
     
    list($a,$m,$j)=explode("-",$valeurlud["date"]); // gestion de la date : voir le tutoriel
    $date="$j-$m-$a";																// "gestion date" pour comprendre... 
    ?>
     			<table border="2" bordercolor=black width="600">
    						 <tr bordercolor=white>
    						 		 <td width="200" align=center bgcolor="white">
    								 		 <font color="#3344cc" size="2" face="Arial, Helvetica, sans-serif;">
    										 <b><?php echo $valeurlud["expediteur"]; ?></b></font>
    										 <br /><font color="#3344cc" size="2" face="Arial, Helvetica, sans-serif;">
    										 ( <?php echo $date; ?> )</font></td>
    	 							<td width="400" align=center bgcolor="#88ccee">
    										<font color="black" size="2" face="Arial, Helvetica, sans-serif;">
    										<?php echo $valeurlud["message"]; ?></font></td></tr></table>
    <?php
     } // on ferme la boucle 
    ?>
    </font><!-- on affiche l'expéditeur, la date et le message... -->
    <?php
    mysql_close(); // on ferme la connexion
    ?>
    </body>
    </html>
    et je savait pas qu'on pouvait inclure du html dans une boucle , s'est conceiller d'éviter ?
    Fichiers attachés Fichiers attachés

  20. #40
    Membre habitué
    Inscrit en
    juillet 2003
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 196
    Points : 118
    Points
    118

    Par défaut class champs & formulaire

    Créez dynamiquement des champs et/ou formulaires.

    Refonte du code version 3 (update du 31/08/09)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •