dimanche 19 février 2006

Voilà, les détails en texture ne sont pas ajoutés, en fait, il est bien comme ça. J'ai surtout bossé sur la texture. Posted by Picasa

vendredi 17 février 2006

Colt Elite 10mm Suite

Voici une mise à jour. Les sécurités sont ajoutées. Mais il manque le viseur au dessus de la cullasse.
Sinon, les textures sont à l'étude, ça devrait êter bien ;)

A suivre... Posted by Picasa

jeudi 16 février 2006

Colt Elit 10mm

Voilà ma première arme.
Il manque encore quelques détails qui vont arriver.
Les finitions seront faites dans les textures.

Comments bienvenus. Posted by Picasa

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.