JeuWeb - Crée ton jeu par navigateur

Version complète : Vos ptites fonctions
Vous consultez actuellement la version basse qualité d'un document. Voir la version complète avec le bon formatage.
Pages : 1 2 3 4 5 6 7
Salut à tous,
JeuPHP étant un forum d'entraide et de partage je lance ce sujet pour partager nos ptites fonctions (pas assez complexes que pour allez dans script) et qui peuvent nous simplifier la vie.

En voici deux (et leurs applications) :
Code PHP :
//Cette fonction à pour but de voir si une entrée existe déja dans une table
function UniqueEntry($entry$field$table){
    
$SQLQuery mysql_query("SELECT $field FROM $table WHERE $field='$entry'");
    
$SQLFetch mysql_fetch_array($SQLQuery);
      if(empty(
$SQLFetch)){
        return 
TRUE;
      }
      else{
        return 
FALSE;
      }
}

//... (connexion sql nécessaire)

//Exemple d'application :
$Utilisateur $_POST['usr_name']; 
 
$Utilisateur ucwords(strtolower($Utilisateur));
 
$Utilisateur mysql_real_escape_string($Utilisateur);

    if(
UniqueEntry($Utilisateur'Usr_Name''Usr_Data')){
      
mysql_query("INSERT INTO user_data VALUES('', '$Utilisateur', '$Passwd')");
    } 

Et voici la deuxieme :
Code PHP :
//permet de vérifier si la variable est un nombre
function is_number($var){
    if(
preg_match("#^[0-9]+$#"$var)){
    return 
TRUE;
    }
    else{ return 
FALSE; }


Voila pour moi 34
La première peut être utile, même si on peut utiliser les mécanismes de la base de donnée (la clause UNIQUE) peut suffire.

La seconde, en revanche, est totalement inutile puisqu'il existe is_numeric. 2


Sephi-Chan
Oui mais c'est utile par exemple lorsque l'on plcae un joueur sur une map, si on utilise ma fonction, on peut générer une autre place sur la map
Code PHP :
$X_coord mt_rand(0120);
$Y_coord mt_rand(0120);
$XY_coord $X_coord '-' $Y_coord;
if(
UniqueEntry($XY_coord'coordonnées''users')){
//rentrer les coordonnes dans mysql
}
else{
unset(
"$X_coord"); unset("$Y_coord"); unset("$XY_coord"); 
$X_coord mt_rand(0120);
$Y_coord mt_rand(0120);
$XY_coord $X_coord '-' $Y_coord;
//rentrer les coordonnes dans mysql


et on peux également retourner un message d'erreur plus agréable qu'une erreur Sql à l'utilisateur.

is_numeric autorise les + et les -, is_number autorise uniquement les nombres.
Psykose a écrit :Oui mais c'est utile par exemple lorsque l'on plcae un joueur sur une map, si on utilise ma fonction, on peut générer une autre place sur la map, et on peux également retourner un messaage d'erreur plus agréable qu'une erreur Sql à l'utilisateur.

is_numeric autorise les + et les -, is_number autorise uniquement les nombres.
Un nombre non signé équivaut à un nombre positif. Ta fonction est moins flexible qu'un is_numeric couplé à un $var > 0. Elle est aussi beaucoup plus gourmande en temps d'exécution (même si ça ne se voit pas à notre échelle 16).

Quand à la fonction qui vérifie les duplicatas, tu as la possibilité de faire ça avec SQL, en faisant en sorte que si tu as une erreur SQL de type duplicata, tu lances une autre opération.

Exemple :
Code PHP :
$query sprintf(
    
"INSERT INTO flight_collect_ressource (
        flight_id,
        territory_id,
        seelie_id,
        ressource_id,
        quantity,
        uniqueness
    )
    VALUES (%d, %d, %d, %d, %d, '%s')
    ON DUPLICATE KEY
        UPDATE    quantity    = %5\$d,
                seelie_id    = %3\$d;"
,
    
$this->flightId,
    
$this->territoryId,
    
$this->id,
    (int) 
$ressource,
    (int) 
$quantity,
    (string) (
$this->flightId.$this->territoryId.(int) $ressource)
); 

Ça me permet de créer une entrée qui dit : Sur ce territoire, le Vol (c'est le nom des guildes dans mon jeu) récolte x% des ressources de type R auquel il a le droit. C'est donc une entrée unique, et en gros, quand une Seelie du Vol édite ces préférences, on ne peut pas savoir si l'entrée existe déjà (auquel cas il faut la modifier plutôt que d'en insérer une nouvelle). Et bien avec mon script, ça fait ça de manière transparente. Et cela sans lancer 2 requêtes séparément.

Concernant les messages d'erreurs, un jeu (ou même un site) en production ne doit jamais les afficher, donc déjà à la base, tu n'auras pas à le faire. Et ensuite, après un UPDATE/INSERT ou un SELECT dans ta fonction, il faut faire :

Pour un UPDATE ou INSERT :
Code PHP :
$sql mysql_query($query);
if(
mysql_affected_rows() > 0){ return TRUE; }
else { return 
FALSE; } 

Pour un SELECT :
Code PHP :
$sql mysql_query($query);
if(
mysql_num_rows($sql) > 0){ return TRUE; }
else { return 
FALSE; } 

Comme ça, dans ton code, tu fais :
Code PHP :
if(taFonction()){ echo "C'est bon."; }
else { echo 
"Une erreur est survenue." 


Sephi-Chan
Quitte à proposer des fonctions qui pour ma part sont inutiles, autant qu'elle soit propre, et optimisée...
Code PHP :
function UniqueEntry($entry$field$table){
    
$SQLQuery mysql_query('SELECT `'.$field.'` FROM `'.$table.'` WHERE `'.$field.'` = `'.$entry.'`');
    if(
mysql_num_rows($SQLQuery) !== 1)
        return 
false;

    return 
true;


Ben oui unique c'est un résultat pas deux... et en plus c'est magnifique mysql te fournit une fonction pour connaitre le nombre de lignes retournée ! C'est quand même bien pensé...
Tant qu'on ai dans les fonctions en mousse :

Code PHP :
function doquery($query$fetch false
{
    global 
$link$root_path;
        if(!
$link
        {
            require(
$root_path.'includes/config.php');
            
$link mysql_connect($dbsettings["server"], $dbsettings["user"], $dbsettings["pass"])
or die (
"Erreur de connexion a la bdd: ".mysql_error());
            
mysql_select_db($dbsettings["name"],$link) or die ("Erreur de selection de bdd: ".mysql_error());
        }
        
    
$result mysql_query($query) or die ('Erreur SQL: '.mysql_error().'<br />Requete: '.$query);
        if(
$fetch
        {
            
$result mysql_fetch_assoc($result);
        }
    return 
$result;
}

function 
pretty_number($n,$floor=true)
{
    if(
$floor)
    {
        
$n floor($n);
    }    
    return 
number_format($n,0,",",".");
}

function 
array_search_multidim($array$sub_key$sub_value) {
    
$result "N/D";
    foreach(
$array as $key => $sub_array) {
        if(
$sub_array[$sub_key] == $sub_value) {
            
$result $key;
            break;
        }
    }
    return 
$result;



[php]
...

Multidimensionnel ?
A deux niveaux, mais a 3 ou 4 ?
Aller vu que je suis un gros producteur de fonction a la con je mis met aussi 10:


Code PHP :
//Détecter l'ip
function get_ip() 
    {
        return (isset(
$_SERVER['HTTP_X_FORWARDED_FOR'])) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
    }

//fonction de calcule de %tage

function pourcent($nombre,$pourcent

    {

        
$nbr = ($nombre*$pourcent)/100;

        return 
round($nbr);

    }
//Crée une barre de statut
function statut_barre($valeur,$max,$echelle)

    {

        
$size = ($valeur/$max)*$echelle;

        return 
'<div style="height:13px; width:'.$echelle.'px; float:left; background-color:#FF0000; 
-moz-border-radius:15px;"><div style="float:left; height:10px; width:' 
$size 
'px; background-color:#008000;border:#006400 2px solid; -moz-border-radius:15px;">&nbsp;</div></div>';

    }

//Fontion affichage de message alerte

function alert($mess)

    {

        echo 
'<script language=\'javascript\'>alert(\'',str_replace('"','\"',str_replace('\'','\\\'',$mess)),'\');</script>';

    }

//Fonction bbcode    

function bbcode($t

    {

        
$t preg_replace("!\[(url|email)\](.+)\[/(?:url|email)\]!Ui","[$1=$2]$2[/$1]",$t);

        
$t preg_replace("!\[url=([^\]]+)\](.+)\[/url\]!Ui","<a href=\"$1\" target=\"_blank\">$2</a>",$t);

        
$t preg_replace("!\[email=([^\]]+)\](.+)\[/email\]!Ui","<a href=\"mailto:$1\" target=\"_blank\">$2</a>",$t);

        
$t preg_replace("!\[img\](.+)\[/img\]!Ui","<img src=\"$1\" alt=\"\" border=\"0\">",$t);

        
$t preg_replace("!\[(/?[biu])\]!mi","<$1>",$t);

        
$t preg_replace("!\[color=([^\]]+)\]!mi","<font style=\"color: $1;\">",$t);

        
$t preg_replace("!\[size=([^\]]+)\]!mi","<font style=\"font-size: $1px;\">",$t);

        
$t preg_replace("!\[/(?:color|size)\]!i","</font>",$t);

        
//$q1 et $c1 sont à personnaliser...

        
$q1 "<table align=center border=0 cellpadding=3 cellspacing=1 width=90%><tbody><tr><td><span style=\"font-size : 11px\"><b>";

        
$q2 "</b></span></td></tr><tr><td style=\"font-family: Verdana, sans-serif; font-size: 11px; color: #444444; 
background-color: #FAFAFA; border: #D1D7DC; border-style: solid; border-width: 1px\">"
;

        
$q3 "</td></tr></tbody></table>";

        
$t preg_replace("!\[quote=([^\]]+)\](.+)\[/quote\]!Umi","$q1 $1 a écrit :$q2 $2 $q3",$t);

        
$t preg_replace("!\[quote\](.+)\[/quote\]!Umi","$q1 Citation : $q2 $1 $q3",$t);

        
$c1 "<table align=center border=0 cellpadding=3 cellspacing=1 width=90%><tbody>
<tr><td style=\"font-family: TimesNewRoman, sans-serif; font-size: 11px; 
color: #444444; background-color: #FAFAFA; 
border: #D1D7DC; border-style: solid; border-width: 1px\">"
;

        
$t preg_replace("!\[code\](.+)\[/code\]!Umi","$c1 $1 $q3",$t);

        
$t preg_replace("!\[list\](.+)\[/list\]!Umi","<ul> $1 </ul>",$t);

        
$t preg_replace("!\[\*\](.+)(?=(\[\*\]|</ul>))!Umi","<li>$1</li>",$t);

        return 
$t;

    }

//Fonction de redirection

function redirect($url)

    {


        echo 
'<script language=\'javascript\' type=\'text/javascript\'>

            <!--

            window.location.replace(\''
,$url,'\');

            -->

            </script>'
;

        exit;

    }
//Fonction qui supprime tout les saut de ligne (dans tout les OS !)

function new_trim($src)

    {

        
$src str_replace(array("\r\n""\n""\r"), " "$src);

        return 
$src;

    }

//Detecter si un objet est proche d'un autre a partir de leur coordonnée
function isProche($xA,$yA,$xB,$yB,$d)
        {

             return 
max(abs($xA-$xB),abs($yA-$yB)) <= $d;

        }
//supprime les n° d'un chaine
function no_num($chaine

    {

           
$num  '1234567890'

           
$nonum'          '

           
$chaine strtr(trim($chaine),$num,$nonum);

           
$chaine str_replace(' '''$chaine);

           

           return 
$chaine

    } 


Y en a des très conne je sais 60

Phenix
pour nonum tu fais tout simplement :
Code PHP :
function no_num($chaine){
$chaine preg_replace("#[0-9]+#""");

return 
$chaine;

#rediriger()
Code PHP :
function rediriger($url_relative) {
    
header('location: http://'.$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['PHP_SELF']), '/\\').'/'.$url_relative);
    exit();

Cette fonction permet de rediriger une page avec une URL relative. Car normalement il faut mettre une URL absolue car certains hebergeur couplé à IE (ou FF je sais plus lequel) ne redirige pas dans le cas contraire...

Le exit(); est peut être de trop, en fait il est toujours justifié sauf avec une méthode de mise à jour assynchrone situé derriere une redirection...

#ses_debut()
Code PHP :
function ses_debut() {    
    if (!isset(
$_SESSION['start'])) {
        
session_start();
        
$_SESSION['start']=true;
    }

Fonction qui evite le message d'erreur lorsqu'on lance 2 session_start d'affiler (par exemple avec une inclusion)

#get_var()
Code PHP :
function get_var($id,$sql=false) {
    if (
$sql) return mysql_real_escape_string((!isset($_POST[$id]))?@$_GET[$id]:$_POST[$id]);
    else return (!isset(
$_POST[$id]))?@$_GET[$id]:$_POST[$id];

Permet de recuperer une variable transmise par POST ou par GET , et de la proteger contre l'injection sql si elle est destinée à une fonction sql
En fait je suis en train de faire bien mieux avec une classe, d'ailleur pour des questions de sécurité les id devraient être dynamique...
Pages : 1 2 3 4 5 6 7
URLs de référence