mercredi 27 juillet 2005

change_ordre($_table, $_field, $_clause, $_old, $_new)

/*
Methode qui change l'ordre d'objets dans une base
en insérant un objet puis on décallant tous les autres
Normalement, ceci ne laisse pas de trou
$_clause doit commencer par le mot WHERE
*/
function change_ordre($_table, $_field, $_clause, $_old, $_new) {
//on monte dans la liste
$query="";
if($_new < $_old) { $query="UPDATE $_table SET $_field={$_field}+1 $_clause AND $_field>=$_new AND $_field<$_old"; } if($_new > $_old) {
$query="UPDATE $_table SET $_field={$_field}-1 $_clause AND $_field>$_old AND $_field<=$_new"; } if($query) { //il faut isoler l'élément courant
mysql_query("UPDATE $_table SET $_field=-1 $_clause AND $_field=$_old");

#print $query;
mysql_query($query) or print "!--$query-->";

#MAJ de l'élément en lui-même
mysql_query("UPDATE $_table SET $_field=$_new $_clause AND $_field=-1");
}
}

execTime

Ceci est un code à mettre dans un fichier.
Il suffit d'appeler le fichier 2 fois (au début et à la fin) pour connaitre la durée d'exectution du script.

//ce fichier doit être appelé 2 fois (1 pour mémoriser le début et l'autre pour afficher)
if(!$_GLOBAL['starttime']) {
list($usec, $sec) = explode(" ", microtime());
$_GLOBAL['starttime']=$usec + $sec;
}
else {
list($usec, $sec) = explode(" ", microtime());
$__now=$usec + $sec;

$exectime = round(($__now - $_GLOBAL['starttime']) * 100) / 100;
echo "Temps d'execution : " . $exectime . " secondes";
}
?>

vendredi 22 juillet 2005

class Debug

/*
Debugger par cedric : simonced@gmail.com
permet d'aider à tracer l'évolution de certaines variables en cours de
développement

exemple d'utilisation :
$dbg=new Debug(__FILE__);
// si on met un 2eme param à false c'est pour désactiver les sorties

$dbg->watch('a',&$a); //on donne le nom de la variable puis sa référence
...
//et quand on en a besoin, on appelle l'affichage
$dbg->display(__LINE__);

*/
class Debug {

var $file;
var $vars=Array();
var $display=true;

//constructeur, doit systématiquement etre appelé avec le nom du ficher PHP
//en cours de debuggage (__FILE__ doit aider facilement)
function Debug($file_, $display_=true) {
$this->file=$file_;
$this->display=$display_;
}

//fonction qui permet de regarder le contenu d'une variable
//attention de ne pas mettre de noms identiques pour plusieurs variabeles
function watch($name_, &$value_) {
//on ajoute la référence
$this->vars[$name_]=&$value_;
}

//affichage simplement des info au moment voulu.
function display($line_) {

if($this->display==true && count($this->vars)>0) {
print ">>>
".$this->file." : $line_
";
foreach($this->vars as $var => $value) {
print $var." = ".$value."
";
}
print "<<<
";
}
}
}

param_leader($param_)

/*
procedure de gestion de paramètres
priorite : GET, SESSION
si valeur inexistante dans session, GET[$param_] sera vide
*/
function param_leader($param_) {
if($_GET[$param_]) $_SESSION[$param_]=$_GET[$param_];
else $_GET[$param_]=$_SESSION[$param_];
}

getSQLliste($query_, $target_=null)

/*
permet d'aller chercher une liste rapidement en BDD
--------
en entrée, requete SQL
*/
function getSQLliste($query_, $target_=null) {

$liste = mysql_query($query_) or print "";

// ATTENTION j'ai mis des @ pour planquer, mais ça affiche normalement des warnings
// il faudra regarder d'ou provient l'erreur en amont (nicolas 25.02.04)
while($result = @mysql_fetch_assoc( $liste )) {
if(!$target_) $infos__[]=$result; //on retourne toutes les colonnes
else $infos__[]=$result[$target_]; //ou une seule
}

@mysql_free_result($liste);

//on retourne
return $infos__;
}

getSQLinfo($select_, $target_=null)

/*
permet d'aller chercher un enregistrement rapidement en BDD
--------
select_ doit se construire : table.champs=valeur_test
*/
function getSQLinfo($select_, $target_=null) {

//on récupere les infos qui nous interressent
list($table, $champs_test) = split("\.", $select_);

//on construit la query, suivant les params
if(!$target_) $query="SELECT * FROM $table WHERE $champs_test";
else $query="SELECT $target_ FROM $table WHERE $champs_test";

$liste = mysql_query($query) or print "";

// ATTENTION j'ai mis des @ pour planquer, mais ça affiche normalement des warnings
// il faudra regarder d'ou provient l'erreur en amont (nicolas 25.02.04)
$result = @mysql_fetch_assoc( $liste );
@mysql_free_result($liste);

//on retourne
if(!$target_) return $result;
else return $result[$target_];
}

mySelect($select_query_)

/**
fonction qui retourne un result_set mysql suite à une query
économise des lignes de codes de l'autre côté
*/
function mySelect($select_query_) {
$liste=@mysql_query($select_query_) or print "";

//on peut ensuite en faire ce que l'on veut de l'autre côté
return $liste;
}

function bdd2form($vtp_, $template_, $zone_, $data_, $fields_)

/**
- bdd2form()
affiche les infos d'une BDD vers la page HTML, seulement pour VTP !!!
$fields_ doit être sous liste REGEXP
*/
function bdd2form($vtp_, $template_, $zone_, $data_, $fields_) {
//on vérifie qu'on a birn des arguments
if(!count($data_)) return false;

foreach($data_ as $k => $v) {
//on ne trouve pas le champs en cours de parsing ? alors on passe à la suite
if(!ereg($fields_, $k)) continue;

$vtp_->setVar($template_, $zone_ .".". $k, $v);
}

return true;
}

getElement($type_, $elem_, $traitement_in_="", $traitement_out_="")

/**
* getElement()
* pour retrouver une élément dans la bdd
*
* @param $type_ champs1.valeur1:champs2.valeur2 etc...
* @param $elem_ champs dont on veut trouver l'info
* @return string
**/
function getElement($type_, $elem_, $traitement_in_="", $traitement_out_="") {
global $cache_elements;

$defaut_field='nom';

//on explore en premier l'element type_
$type_tmp=explode(":",$type_);
for($i=0;$i < count($type_tmp);$i++) {
$type_tab=explode(".",$type_tmp[$i]);
if(count($type_tab)==1) {
//on a pas de champs spécifié
$field=$defaut_field;
$seek=$type_tmp[$i];
} else {
//on prend en compte le champs spécifié
$field=$type_tab[0];
$seek=$type_tab[1];
}
$where_clause.=" AND $field='$seek'";
}


#on gere une sorte de cache, pour afficher plusieurs éléments différents sans BDD
if($cache_elements[$type_][$elem_]=='') {
//sinon, on va chercher dans la BDD
$query_look="SELECT $elem_ FROM produits WHERE 1 $where_clause limit 1";
$liste_look=mysql_query($query_look) or print "erreur:$query_look";
$result_look=mysql_fetch_array($liste_look);
//on met en cache
$cache_elements[$type_][$elem_]=$result_look[0];
}

//et on sort
if($traitement_in_) return ereg_replace($traitement_in_, $traitement_out_, $cache_elements[$type_][$elem_]);
else return $cache_elements[$type_][$elem_];
}

form2bdd($table_, $args_, $where_clause_='')

/**
* form2bdd()
* Permet de faire un enregistrement dynamique d'apres les infos dans $args_
* les nom des champs informations doivent commencer par d_
* @param $table_ table dans laquelle stocker les infos du formulaure
* @param $args_ tableau (généralement _POST) dont on lit les données pour faire la requette
* @param string $where_clause_ pour définir si on fait un update ou un insert (si vide)
* @return
**/
function form2bdd($table_, $args_, $where_clause_='') {
//analyse des arguments
if(count($args_)>0) {

//ce traitement des données est commum pour les 2 parties du bas
//on parse les arguments
$champs_tab=array();
$valeurs_tab=array();
foreach($args_ AS $champ => $valeur) {
//si la cle commence par d_, on le supprime et on s'en sert pour la query
if(eregi("^d_",$champ)) {
$new_champ=eregi_replace("^d_","",$champ);
$champs_tab[]=$new_champ;
$valeurs_tab[]="'$valeur'";
}
}

//on envoie les infos dans la base
if($where_clause_=='') {
//on colle tout ca
$champs="(".implode(", ", $champs_tab).")";
$valeurs="(".implode(", ", $valeurs_tab).")";

//on construit la query
$query="INSERT INTO $table_ $champs VALUES $valeurs";
} else {
$update_tab=array();
for($i=0;$i < count($champs_tab);$i++) {
$update_tab[]="{$champs_tab[$i]}={$valeurs_tab[$i]}";
}
//on colle tout ca
$update=implode(", ", $update_tab);

$query="UPDATE $table_ SET $update $where_clause_";
}
mysql_query($query) or print "";

} //pas d'arguments, il y a une erreur qq-part

}

formatDate($fin_)

/**
* formatDate()
* transforme un timestamp(14) en date formatée pour l'interface (au format jj / mm / aaaa)
* @param $fin_ string MySQL datetime
* @return string
**/
function formatDate($fin_) {
ereg("^([0-9]{4})([0-9]{2})([0-9]{2}).*",$fin_,$regs);
$mois_=sprintf("%02d",$regs[2]);
$jour_=sprintf("%02d",$regs[3]);
$annee_=$regs[1];
$date=$jour_." / ".$mois_." / ".$annee_;

return $date;
}

human_size($taille_)

/**
* human_size()
* permet de rendre lisible les tailles de fichiers
* @param $taille_ en octets
* @return string
**/
function human_size($taille_) {
$mesure[]="O";
$mesure[]="Ko";
$mesure[]="Mo";
$mesure[]="Go"; //je ne pense pas a devoir aller plus loin

$loop=0;
while($taille_>1024) {
$loop++;
$taille_/=1024;
}

return sprintf("%0.2f",$taille_)." ".$mesure[$loop];
}

change_url_args($var_, $val_, $url_ = null)

/**
* change_url_args()
* Permet de changer un paramètre d'URL en donnant son nom, et sa nouvelle valeur
* si l'argument est introuvable, on le rajoute
* vive les expressions régulières !
* @update 30/06/2004
* @param string $var_ chaine qui contient le nom de la variable en URL
* @param string $val_ chaine qui contient la valeur à assigner à cette variable
* @param string $url_ travailler à partir de cette chaine, ou sinon, on prend l'URL actuelle par defaut
* @return string
**/
function change_url_args($var_, $val_, $url_ = null) {
global $HTTP_SERVER_VARS;
// si url n'est pas fourni, on le prends depuis l'url courante
if ($url_ == null) $url_ = $HTTP_SERVER_VARS['REQUEST_URI'];
// on vérifie si on a deja un tel argument en URL, sinon, on le rajoute bêtement
// pas d'argument trouvé ?
if (!ereg("$var_=", $url_)) {
// on va ajouter un argument, est-ce le premier ?
if (!ereg("\?", $url_)) $url_ .= "?$var_=$val_";
else $url_ .= "&$var_=$val_";
} else {
$url_ = preg_replace("/($var_)=([\w\déèàêëâäçîïöôüûù_-]*)/", "$1=$val_", $url_);
}
// retourne la nouvelle url, avec les params changés
return $url_;
}

dateFromSQL / dateToSQL

/*
fonction qui permet de convertir une date au format SQL aaaa-mm-jj
en date au format francais jj/mm/aaaa
*/
function dateFromSQL($sql_date_) {
return @preg_replace("/(\d{4})-(\d{2})-(\d{2})/","\\3/\\2/\\1", $sql_date_);
}

/*
Fonction qui formate les dates au format jj/mm/aaaa
pour SQL en aaaa-mm-jj
*/
function dateToSQL($date_) {
return @preg_replace("/(\d{1,2})\/(\d{1,2})\/(\d{4})/", "\\3-\\2-\\1", $date_);
}

date_francaise($time_stamp_)

// les mois en francais
$mois_francais['01'] = "Janvier";
$mois_francais['02'] = "Février";
$mois_francais['03'] = "Mars";
$mois_francais['04'] = "Avril";
$mois_francais['05'] = "Mai";
$mois_francais['06'] = "Juin";
$mois_francais['07'] = "Juillet";
$mois_francais['08'] = "Aôut";
$mois_francais['09'] = "Septembre";
$mois_francais['10'] = "Octobre";
$mois_francais['11'] = "Novembre";
$mois_francais['12'] = "Décembre";

$jour_francais['Mon']="Lundi";
$jour_francais['Tue']="Mardi";
$jour_francais['Wed']="Mercredi";
$jour_francais['Thu']="Jeudi";
$jour_francais['Fri']="Vendredi";
$jour_francais['Sat']="Samedi";
$jour_francais['Sun']="Dimanche";

/**
date french formating function
time_stamp_ must be a mysql stamp
*/
function date_francaise($time_stamp_) {
global $jour_francais, $mois_francais;


$date_array=explode("-",$time_stamp_);
$jour=date("D", mktime(0,0,0,$date_array[1],$date_array[2],$date_array[0]));

return $jour_francais[$jour]. " ".$date_array[2]." ".$mois_francais[sprintf("%02d",$date_array[1])]." ".$date_array[0];
}

Welcome coders !

Hi, I'm simonced, and I just want to share some PHP codes I did.
I did some usefull you can use as you want. Just please, leave the comments and copyright in the code. If you use it on a professional website or for personnal project, please feel free to let me know.

Then, I let you explore my small world, and I think you'll find some interresting stuff.
Sorry about some functions names, because they are in french.

Simonced.