Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Site Web > PHP > Vos Fonctions ou astuces > Lecture du sujet

Vos Fonctions ou astuces

Vous devez être inscrit pour pouvoir poster des messages

Page : Précédente  1  2  3  4  5  6  7  8  9  10  ...  97  98  99  100  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : Précédente  1  2  3  4  5  6  7  8  9  10  ...  97  98  99  100  Suivante
Hors ligne Dutiona # Posté le 08/04/2006 à 12:29:43
Vis pour être heureux !
Avatar
Groupe : Membres
Reprise du dernier message de la page précédente :
Oh, je ne savais pas...
dans la logique des chose mysql devrais traiter le limit et effectuer le tri suivant ce que demande le limit...
Enfin bon, merci de la précision :)



Bisous, Nyu

Défiez ma brute !
Eclipse user | Ubuntu (KDE) user | php/sql/xhtml/css/xml/xsl/javascript/java/python/perl/c/scheme coder.
Framework in use: Seraframework (my own one).
In Microeisti staff.
 
Hors ligne Makkhdyn # Posté le 08/04/2006 à 13:35:37
Beuhhhh
Avatar
Groupe : Membres
Citation : x_hces
Salut
En fait ma fonction sert à choisir entre differentes résolutions pour retailler une image uploadée.

C'est pour mon script de news.

Boarf je ne vois aucun interet a ta fonction... Voici ce qu'elle donne en version épurée:

Code : PHP
function recupereResolution($image, $diviseur = 20/9 ){
        $source = imagecreatefromjpeg($image); // La photo est la source
        // Les fonctions imagesx et imagesy renvoient la largeur et la hauteur d'une image
        $largeur = imagesx($source);
        $hauteur = imagesy($source);

        echo '<form action="" method="post"><p>
                        <label>Ton choix de resolution??(diviseur par default)<br />
                                <select name="resolution">'
;

        $tableau = array($diviseur, 0.5 , 1.5 , 2 , 2.5 , 3 , 4 );
        foreach($tableau as $value){
        $field = ceil($hauteur/$value).'*'.ceil($largeur/$value);
        echo '<option value="', $field, '">', $field, '</option>';
        }
        echo '</select></label>';
        echo '<input type="submit" /></p></form>';
}

Ceci n'est pas une signature
 
Hors ligne RedoX # Posté le 08/04/2006 à 16:33:59
Never Trust, User Input !
Avatar
Groupe : Membres

Miniature Conservant les Proportions



Code : PHP
function miniature($image,$maximum)
{
        // Ouverture de l'Image Source
        if            ( mime_content_type($image) === 'image/jpeg'){ $image = imagecreatefromjpeg($image); }
        elseif  ( mime_content_type($image) === 'image/png' ){ $image = imagecreatefrompng($image)}
        elseif  ( mime_content_type($image) === 'image/gif' ){ $image = imagecreatefromgif($image)}
        else    { return; }
       
        // Dimensions
        $hauteur = imagesy($image);
        $largeur = imagesx($image);

        // Rapport & Dimensions Finales
        $miniature_h = $maximum / $hauteur ;
        $miniature_l = $maximum / $largeur ;
        $rapport = ( $miniature_h < $miniature_l ) ? $miniature_h : $miniature_l ;           
        $hauteur_miniature = $hauteur * $rapport;
        $largeur_miniature = $largeur * $rapport;
       
        // Création de la Miniature, Réduction de l'Image Source, Génération de la Miniature
        $miniature = imagecreatetruecolor($largeur_miniature,$hauteur_miniature);
        imagecopyresized($miniature, $image, 0, 0, 0, 0, $largeur_miniature, $hauteur_miniature, $largeur,$hauteur);
        imagepng($miniature);
}

Elle s'appelle de cette facon ( par Exemple ):
Code : PHP
miniature("Image.jpg",250);

Inspiré du Tuto de DHKold sur la V2 ^^ ^^
Cette fonction ne crée par l'image Réduite mais peut facilement le faire :p

Le philosophe cherche des solutions aux problèmes et ne trouve que des problèmes sans solutions.
Règles du Forum C.. Valables partout quand même :)
Image utilisateur
Annexes Cours Php - Erreurs Sql - Doc Php - Doc Mysql - Temps Sql - Redirection Htaccess

 
Hors ligne madyn # Posté le 10/04/2006 à 00:16:23
Avatar
Groupe : Membres

Fonction d'affichage du temps de génération




Points importants :


  • Elle fonctionne par "couple"
  • On peut l'utiliser plusieurs fois dans la page
  • Au premier appel elle ne renvoie rien mais au deuxième elle renvoie le temps de génération depuis le premier, puis ça revient comme au premier appel, etc...


La fonction :



Code : PHP
function tps_gen(){
 static $psgs=0;
 $ms=array();
 if($psgs==0){
  $ms['start']=microtime();
  $psgs++;
  return(NULL);
  }elseif($psgs==1){
  $ms['end']=microtime();
  $psgs=0;
  return(round($ms['end']-$ms['start'], 4));
  }
 } // Fonction de temps de génération de page : tps_gen(); 


Exemple d'utilisation :



Code : PHP
<?php

tps_gen();
// Du code
echo 'Premier morceau éxécuté en '.tps_gen().' secondes';

tps_gen();
// Encore du code
echo 'Fin de page éxécuté en '.tps_gen().' secondes !';

?>


@bientôt ;)
Édité le 10/04/2006 à 00:16:58 par madyn

m A d y n - :)

Secret (cliquez pour afficher)
999999999999999999999999999999999999999999999999999999999 : neuf cent quatre-vingt-dix-neuf decillions neuf cent quatre-vingt-dix-neuf nonilliards neuf cent quatre-vingt-dix-neuf nonillions neuf cent quatre-vingt-dix-neuf octilliards neuf cent quatre-vingt-dix-neuf octillions neuf cent quatre-vingt-dix-neuf sextiliards neuf cent quatre-vingt-dix-neuf sextillions neuf cent quatre-vingt-dix-neuf quintilliards neuf cent quatre-vingt-dix-neuf quintillions neuf cent quatre-vingt-dix-neuf quadrillards neuf cent quatre-vingt-dix-neuf quadrillons neuf cent quatre-vingt-dix-neuf trilliards neuf cent quatre-vingt-dix-neuf trillions neuf cent quatre-vingt-dix-neuf billiards neuf cent quatre-vingt-dix-neuf billions neuf cent quatre-vingt-dix-neuf milliards neuf cent quatre-vingt-dix-neuf millions neuf cent quatre-vingt-dix-neuf mille neuf cent quatre-vingt-dix-neuf
 
Hors ligne thelittlegui # Posté le 10/04/2006 à 13:40:09
Yupe.
Avatar
Groupe : Membres
Pour l'amour du ciel, testez vos codes ! :(

madyn, ta fonction fait n'importe quoi...

Déjà, microtime() utilisé sans argument renvoie une chaîne du type 0.µsec sec, ou sec est le timestamp actuel, et µsec les "microsecondes de la seconde actuelle" (difficile à expliquer :/)
Donc pour avoir une chaîne correcte, du type sec.µsec, il faut faire array_sum(explode(' ', microtime())) (on éclate la chaîne en array et on additionne les 2 nombres).

Ensuite, tu redéclares $ms à chaque appel, et comme tu ne le déclares pas comme statique, lorsque tu effectues $ms['end']-$ms['start'], $ms['start'] n'existe plus ! (et on a une belle Notice: Undefined index: start...)

Résultat de tout cela : à son second appel, ta fonction renvoit en fait l'arrondi des "microsecondes actuelles" (µsec)...

Ta fonction corrigée (et légèrement simplifiée) donnerait :
Code : PHP
function tps_gen() {
    static $psgs=0;
    static $ms=array();
    if($psgs==0) {
        $ms['start']=array_sum(explode(' ', microtime()));
        $psgs++;
        return;
    }
    else {
        $ms['end']=array_sum(explode(' ', microtime()));
        $psgs=0;
        return round($ms['end']-$ms['start'], 4);
    }
}



Mais j'avais trouvé une fonction qui fait la même chose, et que je trouve personnellement plus simple :) (je ne sais plus de qui elle est, et de toute façon je l'ai un peu modifiée...)

Fonction :
Code : PHP
function getmicrotime($start=NULL, $decimals=6) {
    $microtime = (float) array_sum(explode(' ', microtime()));
    if (!isset($start)) return $microtime;
    // sinon (si $start est fourni, et ne vaut pas NULL)...
    $time_exec = $microtime - (float) $start;
    return round($time_exec, $decimals);
}

Utilisation (exemple) :
Code : PHP
<?php
// (ici définition de la fonction)

$debut = getmicrotime();

// du code
echo '<p>Code 1 exécuté en ',getmicrotime($debut),' s.</p>';

$milieu = getmicrotime();
// encore du code
echo '<p>Code 2 exécuté en ',getmicrotime($milieu),' s.</p>';

// suite et fin du code

echo '<p>Temps d’exécution de la page : ',getmicrotime($debut, 3),' s.</p>';
?>

Code testé et fonctionnel.
Avantage : on peut utiliser plusieurs fois la fonction avec le même "start" (ici $debut) :)
Hors ligne madyn # Posté le 10/04/2006 à 17:35:37
Avatar
Groupe : Membres
Ma fonction fonctionne a merveille sur mon pc et sur dans le code d'un autre utilisateur ! ;)
Édité le 10/04/2006 à 17:35:57 par madyn

m A d y n - :)

Secret (cliquez pour afficher)
999999999999999999999999999999999999999999999999999999999 : neuf cent quatre-vingt-dix-neuf decillions neuf cent quatre-vingt-dix-neuf nonilliards neuf cent quatre-vingt-dix-neuf nonillions neuf cent quatre-vingt-dix-neuf octilliards neuf cent quatre-vingt-dix-neuf octillions neuf cent quatre-vingt-dix-neuf sextiliards neuf cent quatre-vingt-dix-neuf sextillions neuf cent quatre-vingt-dix-neuf quintilliards neuf cent quatre-vingt-dix-neuf quintillions neuf cent quatre-vingt-dix-neuf quadrillards neuf cent quatre-vingt-dix-neuf quadrillons neuf cent quatre-vingt-dix-neuf trilliards neuf cent quatre-vingt-dix-neuf trillions neuf cent quatre-vingt-dix-neuf billiards neuf cent quatre-vingt-dix-neuf billions neuf cent quatre-vingt-dix-neuf milliards neuf cent quatre-vingt-dix-neuf millions neuf cent quatre-vingt-dix-neuf mille neuf cent quatre-vingt-dix-neuf
 
Hors ligne MaxDc # Posté le 10/04/2006 à 18:00:03
Chouette alors !
Avatar
Groupe : Membres
ta fonction ne fonctionne pas du tout.

Une preuve ?
essai ça:
tps_gen(); sleep(2); echo tps_gen();

sleep(2) met une pause de 2 secondes dans le script, et ta fonction renvoie ~0.6

Ce qui empêche souvent d'aller de l'avant, c'est de commencer par le commencement.


Une mère est de 21 ans plus âgée que son enfant.
Dans 6 ans, son enfant sera 5 fois plus jeune que sa mère !
Question : Où se trouve le père ?
 
Hors ligne madyn # Posté le 10/04/2006 à 18:13:53
Avatar
Groupe : Membres
Citation : MaxDc
ta fonction ne fonctionne pas du tout.

Une preuve ?
essai ça:
tps_gen(); sleep(2); echo tps_gen();

sleep(2) met une pause de 2 secondes dans le script, et ta fonction renvoie ~0.6


Normal, la fonction microtime s'est aussi mise en pause !

m A d y n - :)

Secret (cliquez pour afficher)
999999999999999999999999999999999999999999999999999999999 : neuf cent quatre-vingt-dix-neuf decillions neuf cent quatre-vingt-dix-neuf nonilliards neuf cent quatre-vingt-dix-neuf nonillions neuf cent quatre-vingt-dix-neuf octilliards neuf cent quatre-vingt-dix-neuf octillions neuf cent quatre-vingt-dix-neuf sextiliards neuf cent quatre-vingt-dix-neuf sextillions neuf cent quatre-vingt-dix-neuf quintilliards neuf cent quatre-vingt-dix-neuf quintillions neuf cent quatre-vingt-dix-neuf quadrillards neuf cent quatre-vingt-dix-neuf quadrillons neuf cent quatre-vingt-dix-neuf trilliards neuf cent quatre-vingt-dix-neuf trillions neuf cent quatre-vingt-dix-neuf billiards neuf cent quatre-vingt-dix-neuf billions neuf cent quatre-vingt-dix-neuf milliards neuf cent quatre-vingt-dix-neuf millions neuf cent quatre-vingt-dix-neuf mille neuf cent quatre-vingt-dix-neuf
 
Hors ligne MaxDc # Posté le 10/04/2006 à 18:25:42
Chouette alors !
Avatar
Groupe : Membres
Citation : madyn
Citation : MaxDc
ta fonction ne fonctionne pas du tout.

Une preuve ?
essai ça:
tps_gen(); sleep(2); echo tps_gen();

sleep(2) met une pause de 2 secondes dans le script, et ta fonction renvoie ~0.6


Normal, la fonction microtime s'est aussi mise en pause !


mdr :D

echo time(); sleep(2); echo ' - ', time();
ça renvoie:
1144686365 - 1144686367
et la fonction time() ne devrait pas aussi _se mettre en pause_ ?

microtime -- Retourne le timestamp UNIX actuel avec microsecondes
time -- Retourne le timestamp UNIX actuel

normalement, on connait les fonctions qu'on utilise :-°
Édité le 10/04/2006 à 18:26:22 par MaxDc

Ce qui empêche souvent d'aller de l'avant, c'est de commencer par le commencement.


Une mère est de 21 ans plus âgée que son enfant.
Dans 6 ans, son enfant sera 5 fois plus jeune que sa mère !
Question : Où se trouve le père ?
 
Hors ligne madyn # Posté le 10/04/2006 à 19:54:41
Avatar
Groupe : Membres
:p

J'utilise pas de fonction sleep dans mes pages :D
Édité le 10/04/2006 à 19:54:55 par madyn

m A d y n - :)

Secret (cliquez pour afficher)
999999999999999999999999999999999999999999999999999999999 : neuf cent quatre-vingt-dix-neuf decillions neuf cent quatre-vingt-dix-neuf nonilliards neuf cent quatre-vingt-dix-neuf nonillions neuf cent quatre-vingt-dix-neuf octilliards neuf cent quatre-vingt-dix-neuf octillions neuf cent quatre-vingt-dix-neuf sextiliards neuf cent quatre-vingt-dix-neuf sextillions neuf cent quatre-vingt-dix-neuf quintilliards neuf cent quatre-vingt-dix-neuf quintillions neuf cent quatre-vingt-dix-neuf quadrillards neuf cent quatre-vingt-dix-neuf quadrillons neuf cent quatre-vingt-dix-neuf trilliards neuf cent quatre-vingt-dix-neuf trillions neuf cent quatre-vingt-dix-neuf billiards neuf cent quatre-vingt-dix-neuf billions neuf cent quatre-vingt-dix-neuf milliards neuf cent quatre-vingt-dix-neuf millions neuf cent quatre-vingt-dix-neuf mille neuf cent quatre-vingt-dix-neuf
 
Hors ligne thelittlegui # Posté le 10/04/2006 à 19:54:48
Yupe.
Avatar
Groupe : Membres
madyn < je le répète : à son second appel, ta fonction renvoit les microsecondes de la seconde actuelle.

Normalement le code de MaxDc aurait dû suffire à te convaincre que ta fonction ne renvoit pas un résultat correct, mais je veux bien essayer de t'expliquer ce qui se passe...

1er appel : $psgs est initialisé à 0 comme statique, $ms est initialisé à un array vide non-statique.
Le if est vérifié, on crée donc une "case" 'start' dans $ms, dans laquelle on met la chaîne renvoyée par microtime() à cet instant. On incrémente $psgs qui passe à 1, et on retourne NULL.

2nd appel : On retrouve $psgs, qui vaut toujours 1 grâce au static (donc elle ne repasse pas à 0), mais on initialise $ms comme array vide, car il n'y a pas de "static" : $ms['start'] disparaît.
Le if n'est pas vérifié, le elseif si : on crée une case 'end' dans $ms, dans laquelle on met la chaîne renvoyée par microtime() à cet instant. On remet $psgs à 0.
Et là, on veut faire $ms['end']-$ms['start'], seulement on vient de supprimer $ms['start'] en réinitialisant $ms au début de la fonction (une Notice* s'affiche d'ailleurs)... Autrement dit on fait round($ms['end']-NULL, 4), soit round($ms['end']-0, 4), c'est-à-dire round($ms['end'], 4).
Et ce n'est pas tout : je rappelle que $ms['end'] ressemble à quelque chose comme "0.21458700 11446863512" (string), le round donne donc quelque chose comme 0.2146 (float) (lors du transtypage implicite de la chaîne en nombre, tout ce qui est après un caractère non numérique - ici l'espace - est ignoré).

D'ailleurs, tu peux tester ta fonction originale sur un code qui prend plusieurs secondes (ça se voit facilement), elle reverra toujours un nombre décimal (float) entre 0 et 1 :-°


* Pour afficher toutes les erreurs (y compris les Notices, qu'apparemment tu ne dois pas avoir) sans toucher au php.ini, il suffit de mettre cette ligne, en tout début de code :
Code : PHP
De même, pour n'afficher aucune erreur, il suffit de remplacer E_ALL par 0 :)
Édité le 15/04/2006 à 10:41:38 par thelittlegui
Hors ligne madyn # Posté le 10/04/2006 à 20:02:23
Avatar
Groupe : Membres
Bon je trouve mes codes beaucoup plus rapides maintenant :D

Merci !

m A d y n - :)

Secret (cliquez pour afficher)
999999999999999999999999999999999999999999999999999999999 : neuf cent quatre-vingt-dix-neuf decillions neuf cent quatre-vingt-dix-neuf nonilliards neuf cent quatre-vingt-dix-neuf nonillions neuf cent quatre-vingt-dix-neuf octilliards neuf cent quatre-vingt-dix-neuf octillions neuf cent quatre-vingt-dix-neuf sextiliards neuf cent quatre-vingt-dix-neuf sextillions neuf cent quatre-vingt-dix-neuf quintilliards neuf cent quatre-vingt-dix-neuf quintillions neuf cent quatre-vingt-dix-neuf quadrillards neuf cent quatre-vingt-dix-neuf quadrillons neuf cent quatre-vingt-dix-neuf trilliards neuf cent quatre-vingt-dix-neuf trillions neuf cent quatre-vingt-dix-neuf billiards neuf cent quatre-vingt-dix-neuf billions neuf cent quatre-vingt-dix-neuf milliards neuf cent quatre-vingt-dix-neuf millions neuf cent quatre-vingt-dix-neuf mille neuf cent quatre-vingt-dix-neuf
 
Hors ligne Kermi # Posté le 13/04/2006 à 22:11:13
www.puissancejeunz.fr
Avatar
Groupe : Membres
Citation : Eron Xeo
Petite astuce qui vous permet de remplacer tous les caractères spéciaux d'une chaîne par un underscore (notamment utile pour le traitement des noms de fichiers)

Code : PHP
$nom_fichier = strtolower($_FILES['file']['name']);
$nom_fichier=str_replace(array('ä', 'ê', 'ë', 'ô', 'î', 'ï', 'ô', 'ö', 'û', 'ü', 'ÿ', '€', '#', '+', '*', ' ', "'", '"', '²', '&', 'é', '~', '"', '{', '(', '[', '|', 'è', '`', 'ç', '^', 'à', 'à', ')', '}', '=', '}', '^', '$', '£', '¤', 'ù', '%', '*', 'µ', ',', '?', ';', ':', '/', '!', '§', '>', '<'), '_', $nom_fichier);


ta fonction n'est pas complète !!!

je l'ai complétée et j'ai mis un système qui évite les URL bizarre :

si on met : Problème avec linux !!!

ca mettra : probleme-avec-linux----.html

et les ---- c'est pas très estétique...

j'ai donc enlevé ca avec un trim. du coup :

Problème avec linux !!!
deviendra :
probleme-avec-linux.html

de plus, j'ai ajouté des accents et j'enlève les accents, je les remplace pas par des -

cette fonction remplace aussi les majuscules par la même lettre en minuscule :

Code : PHP
function FileNameGen($string) {
       
        # On remplace les caractères spéciaux
        $string = str_replace(array(
        '?',
        '!',
        '.',
        ','), '', $string);
       
        $string = trim($string); // Après avoir supprimé la ponctuation, on supprime les éventuels espaces avant et après $string (afin d'éviter les multi-tirets)
       
        $string = str_replace(array('€',
        '#',
        '+',
        '*',
        ' ',
        "'",
        '"',
        '²',
        '&',
        '~',
        '{',
        '(',
        '[',
        '|',
        '`',
        '^',
        ')',
        '}',
        '=',
        '}',
        '^',
        '$',
        '£',
        '¤',
        '%',
        '*',
        ';',
        ':',
        '/',
        '\\',
        '§',
        '>',
        '-',
        '_',
        '@',
        '§',
        '©',
        '<'), '-', $string);
        # On remplace les variantes de "e"
        $string = str_replace(array('ê', 'ë', 'é', 'è'), 'e', $string);
        # On remplace les variantes de "u"
        $string = str_replace(array('ù', 'µ', 'û', 'ü'), 'u', $string);
        # On remplace les variantes de "a"
        $string = str_replace(array('à', 'ä', 'â'), 'a', $string);
        # On remplace les variantes de "o"
        $string = str_replace(array('ô', 'ö', 'ò'), 'o', $string);
        # On remplace les variantes de "i"
        $string = str_replace(array('î', 'ï', 'ì', ), 'i', $string);
        # On remplace les variantes de "y"
        $string = str_replace(array('ÿ'), 'y', $string);
        # On remplace les variantes de "c"
        $string = str_replace(array('ç'), 'c', $string);
        # On remplace les variantes de "n"
        $string = str_replace(array('ñ'), 'n', $string);
       
        ## On remplace les majuscules
       
        $string = strtolower($string);
       
        return $string;
}


Pour l'appeller rien de plus simple :

Code : PHP
$sujet = 'Problème avec linux !!!!!';
echo FileNameGen($sujet) . '.html';


Faites-en bon usage ;)

++ :)
Édité le 14/04/2006 à 09:27:57 par Kermi

Image utilisateur
Image utilisateur
 
Hors ligne MaxDc # Posté le 13/04/2006 à 22:15:34
Chouette alors !
Avatar
Groupe : Membres
php5 > à la place de faire 10 str_replace, tu peux simplement en faire avec un gros array

et, "On remplace les majuscules" : strtolower()

Ce qui empêche souvent d'aller de l'avant, c'est de commencer par le commencement.


Une mère est de 21 ans plus âgée que son enfant.
Dans 6 ans, son enfant sera 5 fois plus jeune que sa mère !
Question : Où se trouve le père ?
 
Hors ligne Kermi # Posté le 13/04/2006 à 22:17:33
www.puissancejeunz.fr
Avatar
Groupe : Membres
ouai, mais afin d'avoir moins le souk dans le code avec des strings à n'en plus finir, je préfère ranger les remplacements par catégories en commentant, ensuite on code comme on veut cette fonction bien sûr :D

++ ;)

PS : Je connaissait pas strolower() ^^
Édité le 13/04/2006 à 22:18:38 par Kermi

Image utilisateur
Image utilisateur
 
Hors ligne madyn # Posté le 13/04/2006 à 22:37:32
Avatar
Groupe : Membres
Ma fonction pour mettre au pluriel un nom comporte un bug !

Je ne l'ai pas sous la main, si vous la voulez contactez-moi par msn ;)

m A d y n - :)

Secret (cliquez pour afficher)
999999999999999999999999999999999999999999999999999999999 : neuf cent quatre-vingt-dix-neuf decillions neuf cent quatre-vingt-dix-neuf nonilliards neuf cent quatre-vingt-dix-neuf nonillions neuf cent quatre-vingt-dix-neuf octilliards neuf cent quatre-vingt-dix-neuf octillions neuf cent quatre-vingt-dix-neuf sextiliards neuf cent quatre-vingt-dix-neuf sextillions neuf cent quatre-vingt-dix-neuf quintilliards neuf cent quatre-vingt-dix-neuf quintillions neuf cent quatre-vingt-dix-neuf quadrillards neuf cent quatre-vingt-dix-neuf quadrillons neuf cent quatre-vingt-dix-neuf trilliards neuf cent quatre-vingt-dix-neuf trillions neuf cent quatre-vingt-dix-neuf billiards neuf cent quatre-vingt-dix-neuf billions neuf cent quatre-vingt-dix-neuf milliards neuf cent quatre-vingt-dix-neuf millions neuf cent quatre-vingt-dix-neuf mille neuf cent quatre-vingt-dix-neuf
 
Hors ligne Philias # Posté le 16/04/2006 à 18:13:30
Avatar
Groupe : Membres

MiniMenu, Parser de titre


La fonction
Code : PHP

function minimenu($texte){
        global $url_page; //Variable créé préalablement pour donner l'url de la page, car certains navigateurs n'accepte pas d'avoir simplement un #
        $minimenu = '';
        $replace = '`<h(.)>(.*?)</h\1>`i';
        preg_match_all($replace,$texte,$liste);
        if(isset($liste[0][0]))
        {
                $present = 0;
                $prochain = 0;
                $ulTemp = '     <ul>
                <li>
'
;
                while(isset($liste[1][$present]))//On vérifie tous les titre donné. $liste[1] Donne les numéro et $liste[2] Donne le texte du titre
                {
                        $liste[3][$present] = '';
                        $liste[3][$prochain] = '';
                        $prochain = $present + 1;
                       
                        $liste[2][$present] = '<a href="'.$url_page.'#titre'.$present.'">'.$liste[2][$present].'</a>';//Pour ne pas avoir d'url, biffez cete ligne
                       
                        if(@$liste[1][$prochain]                >       @$liste[1][$present])//Ouvrons une liste...
                        {
                                $ulTemp .= '                        '.$liste[2][$present].'
 <ul>
  <li>
'
;
                        }
                        elseif(@$liste[1][$prochain]    ==  @$liste[1][$present])//Continuons la liste...
                        {
                                $ulTemp .= '                        '.$liste[2][$present].'
  </li>
  <li>
'
;
                        }
                        elseif(@$liste[1][$prochain]    <   @$liste[1][$present])//Fermons une liste
                        {
                                $ulTemp .= $liste[3][$present].'                        '.$liste[2][$present].'
  </li>
 </ul>
'
;
                        }
                       
                       
                        if(!isset($liste[1][$prochain]))//Fermons l'ensemble des listes, puisqu'il n'y a pas de prochain
                        {
                                $temp = $liste[1][$present];
                                while($temp != $liste[1][0])
                                {
                                        $ulTemp .= '        </li>
        </ul>
'
;
                                        --$temp;
                                }
                        }//*/
                        ++$present;
                }
                $minimenu = '<div class="minimenu">
'
.$ulTemp.'</div>
'
;
        }
        return $minimenu;
}


Et pour les titres dans la page, si vous utilisez les liens :
Code : PHP

$replace = '`<h([1-6])(.*?)>(.*)</h\1>`siU';
$numeroTitre = 0;
while(preg_match($replace,$texte))
{
        $texte = preg_replace($replace,'<h$1$2 id="titre'.$numeroTitre.'">$3</h$1>',$texte,1);
        ++$numeroTitre;
}


Maintenant, je sais qu'il y a des lacunes. Si un <h4 /> Vient tout de suite après un <h2 />, ça cause problème.
Amusez vous à la personaliser ^^
Édité le 16/04/2006 à 18:57:38 par Philias
 
Hors ligne Lynix # Posté le 17/04/2006 à 20:37:45
Graphiste 3D
Avatar
Groupe : Membres
ça s'utilise <h1></h1> <h2></h2> plutot que <h1 /> <h2 /> non?

Utopy Bientot :D
 
Hors ligne Pl00b # Posté le 17/04/2006 à 21:01:38
Quote²
Avatar
Groupe : Membres

Sécurisé le Register_Globals une fois pour toutes :



Je remet la source qui à été poster dans un topic que j'ai modifé, vraiment très pratique.

Code : PHP

<?php
function GET_REGISTER($P1)
{
  if (!empty($_GET))
 {
  if ($P1 == TRUE)
  {
   foreach($_GET AS $key => $value) $_GET[$key] = stripslashes(trim($value));
  }
  else
  {
   foreach($_GET AS $key => $value) $_GET[$key] = addslashes(trim($value));
  }
 }

  if (!empty($_POST))
 {
  if ($P1 == TRUE)
  {
   foreach($_POST AS $key => $value) $_POST[$key] = stripslashes(trim($value));
  }
  else
  {
   foreach($_POST AS $key => $value) $_POST[$key] = addslashes(trim($value));
  }
 }
 
  if (!empty($_SESSION))
 {
  if ($P1 == TRUE)
  {
  foreach($_SESSION AS $key => $value) $_SESSION[$key] = stripslashes(trim($value));
  }
  else
  {
   foreach($_SESSION AS $key => $value) $_SESSION[$key] = addslashes(trim($value));
  }
 }
}
?>


P.S : Le paramètre $P1 : Mettez TRUE si vous voulez "stripslasher" la chaîne ou FALSE si vous voulez "addslasher" la chaîne.

S'utilise de cette façons.

Code : PHP
<?php
// Vous avez $_GET['pseudo'] :

GET_REGISTER("TRUE");
echo $pseudo; // Affiche $_GET['pseudo'] :)
?>
Édité le 17/04/2006 à 21:02:55 par Pl00b

Tuto en cour de rédaction -> Optimiser vos programmes PHP
 
Hors ligne Jukien # Posté le 17/04/2006 à 21:17:22
Avatar
Groupe : Membres
Pl00b : Tu peux optimiser ton code en utilisant array_walk(), à la place des foreach.
 
Hors ligne Pl00b # Posté le 17/04/2006 à 21:18:40
Quote²
Avatar
Groupe : Membres
Connais pas du tout array_walk() :p
Vais chercher dans la doc, et si j'y arrive (ya pas de raison hein :D), j'edit :)

Tuto en cour de rédaction -> Optimiser vos programmes PHP
 
Hors ligne Makkhdyn # Posté le 17/04/2006 à 22:45:43
Beuhhhh
Avatar
Groupe : Membres
Moi j'aurais fait ça a la limite:
Code : PHP
<?php
function Get_Register($strip, $arrays = array()){
        $array = array('_POST', '_GET', '_SESSION');
        $array = array_merge($array, $arrays);
        foreach($array as $variable){
                global ${$variable}; // Je ne suis pas sur du tout que ça fonctionne ici...
                if(!empty(${$variable})){
                        foreach(${$variable} AS $key => $value){
                                $value = trim($value);
                                if($strip)
                                        ${$variable}[$key] = stripslashes($value);
                                else
                                        ${$variable}[$key] = addslashes($value);
                        }
                }
        }
}
?>


Enfin je trouve quand même le code lourd et inutile.

PS: Ajout de $arrays pour mettre d'autres arrays a traiter.
Édité le 17/04/2006 à 22:49:18 par Makkhdyn

Ceci n'est pas une signature
 
Hors ligne Philias # Posté le 18/04/2006 à 01:20:06
Avatar
Groupe : Membres
Citation : Philias
Maintenant, je sais qu'il y a des lacunes. Si un <h4 /> Vient tout de suite après un <h2 />, ça cause problème.
Citation : Lynix
ça s'utilise <h1></h1> <h2></h2> plutot que <h1 /> <h2 /> non?
C'est simplement une manière de raccourcir à l'écrit tout en étant conforme xhtml :p
Quant à moi, <h1 title="Le titre de la page" /> vaut presque <h1>Le titre de la page</h1>
 
Hors ligne Jukien # Posté le 18/04/2006 à 10:04:26
Avatar
Groupe : Membres
Citation : Makkhdyn
Enfin je trouve quand même le code lourd et inutile.


Exactement !
Je pense qu'il est préférable de traiter les chaines au cas-par-cas, quand on les utilise.
 
Hors ligne thelittlegui # Posté le 18/04/2006 à 12:39:00
Yupe.
Avatar
Groupe : Membres
Pl00b < pour ta fonction, je ne vois pas le rapport avec register_globals...
d'autant que ton exemple d'utilisation n'affichera rien, si ce n'est une belle Notice: Undefined variable: pseudo... :-°
Hors ligne Bison # Posté le 18/04/2006 à 12:46:48
Expreg.com
Avatar
Groupe : Membres
Vos fonctions ou astuces, c'est le titre du post ça non ?
Parce que là, à part se noyer dans un flot de réponses les plus olé-olé les unes que les autres, je ne vois pas trop d'astuces qui tiennent vraiment la route.
Mais bon...

Par la rue "Plus tard", on arrive à la place "Jamais" !
Les regex, j'y connais que dalle... alors, j'essaie de comprendre là : Expreg.com
 
Hors ligne Pl00b # Posté le 18/04/2006 à 13:12:29
Quote²
Avatar
Groupe : Membres
Citation : thelittlegui
Pl00b < pour ta fonction, je ne vois pas le rapport avec register_globals...
d'autant que ton exemple d'utilisation n'affichera rien, si ce n'est une belle Notice: Undefined variable: pseudo... :-°


register_globals => Transforme tes variables de $_POST['salut'] à $salut !
Mais register_globals, à cause des codeurs, à largémént été critiqué et désormais il est sur OFF.

Donc si tu est un ancien codeur, cette fonction te permettras de sécurisé le register_globals et en plus de coder comme avant :p

Et oui, ya toujours les adeptes de $HTTP_GET_VAR :p

Et de plus si tu à lue les cours de M@téo tu verras que les notices sont à ne pas reporter (E^ALL E^NOTICE).

Tuto en cour de rédaction -> Optimiser vos programmes PHP
 
Hors ligne MaxDc # Posté le 18/04/2006 à 13:41:20
Chouette alors !
Avatar
Groupe : Membres

Fonction qui donne le jour d'une certaine date



Code : PHP
function jour($jour, $mois, $an, $lang='fr')
{
        $jour = (int)$jour;
        $mois = (int)$mois;
        $an = (int)$an;
       
        if ($an >= 2038) while ($an >= 2038) $an -= 28;
        elseif ($an <= 1970) while ($an <= 1970) $an += 28;

        $timestamp = mktime(0, 0, 0, $mois, $jour, $an);

        if ($lang == 'fr')
        {
                $numero_jour = date('w', $timestamp);
                $jours = array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Same