JeuWeb - Crée ton jeu par navigateur
Vos ptites fonctions - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Vos ptites fonctions (/showthread.php?tid=1995)

Pages : 1 2 3 4 5 6 7


RE: Vos ptites fonctions - Eluox - 02-04-2008

Code PHP :
<?php 
function protect($string) {
return
mysql_real_escape_string(htmlentities(trim($string), ENT_QUOTES));
}

Puis dans la lancé des redirections Smile

Code PHP :
<?php 
function redirection($url, $methode = 'js', $inner = true, $temps = 0){
if(
$inner)
$url = $racine.$url; //Racine représente la racine du site en cours.
if( $methode === 'meta' )
echo
'<meta http-equiv="refresh" content="', $temps, '; url=', $url, '" />';
elseif(
$methode === 'js')
echo
'<script language="javascript" type="text/javascript">', "\n",
'<!--', "\n",
'window.location.replace("', $url, '");', "\n",
'-->', "\n",
'</script>';
else{
header('Location : '.$url);
exit;
}
}



RE: Vos ptites fonctions - Sephi-Chan - 02-04-2008

el[u a écrit :ox]
Code PHP :
<?php 
function protect($string) {
return
mysql_real_escape_string(htmlentities(trim($string), ENT_QUOTES));
}
Ça ne me paraît pas très bien…
J'ai pu lire à plusieurs reprises qu'il ne valait mieux ne pas altérer ce que l'on stockait en base de données avec les fonctions telles que htmlentities(), nl2br(), etc. et qu'il valait donc mieux les mettre à l'affichage.

De plus, il faudrait rendre ta fonction indépendante des guillemets magiques, même s'ils sont amenés à disparaître.

Je verrais donc plus quelque chose comme ça :
Code PHP :
<?php 
function protect($string){
if(
get_magic_quotes_gpc() == 1){
return
mysql_real_escape_string(stripslashes(trim($string)));
}
else {
return
mysql_real_escape_string(trim($string));
}
}


J'ajouterai une petite remarque. Comme vous pouvez le voir, le code de Phenix déforme l'apparence du forum. Cela est dû à des lignes trop longues.

La plupart des articles décrivant les bonnes pratiques de développement conseillent de ne pas excéder 80 à 90 (maximum de chez maximum) caractères par lignes.
Je conseille à ceux qui font des lignes à rallonge de suivre cette petite règle pour augmenter la lisibilité du code et surtout, pour pouvoir travailler sans être en plein écran.


Sephi-Chan


RE: Vos ptites fonctions - keke - 02-04-2008

Ha bon ?

Lorsque j'ai du bout de code HTML enregistré sur BDD, j'utilise systématiquement les htmlentities($var, ENT_QUOTES) afin qu'il n'y ai pas de caractère qui puisse foutre la grouille dans la bdd... j'avais à l'époque des soucis avec les ', les ", et les caractères accentués dès que je faisais une restauration de la base de donnée.

J'utilise en générale 3 fonctions :

Pour insérer dans la base de donnée :
htmltobdd ($var) qui appelle simplement htmlentities ()

puis pour extraire dans le HTML
bddtohtml ($var) qui fait un html_decode ()

ou pour extraire dans un formulaire
bddtoform ($var) qui fait un htmlspecialchar ( html_decode () )

Cette technique est toute personnelle (je ne l'ai jamais vue en tous les cas) et m'aide à n'avoir aucune incohérence de base, ni de bug d'affichage insolvable. Par contre, faut appeler les fonctions systématiquement à chaque fois qu'on utilise une variable.

Je te la soumets Sephi ^^ Dis moi ce que tu en penses.

kéké.
PS : pouvoir travailler avec ER à la fin ^^


RE: Vos ptites fonctions - Sephi-Chan - 02-04-2008

Ben personnellement, je trouve tout ça bien peu utile. Pour ma part je travaille avec un serveur dont je contrôle la configuration, donc j'utilise uniquement mysql_real_escape_string() en live dans mes sprintf(). Mon contrôleur termine le script si les guillemets magiques sont activés.

Voilà ce que donne un script (tu peux en voir de vrai sur [Wiki JeuPHP] Seelies - Sources) :
Code PHP :
<?php 
$query
= sprintf(
"INSERT INTO maTable (
monChampId,
monChampNom
)
VALUES(%d, '%s');"
,
(int)
$_POST['monId'],
mysql_real_escape_string($_POST['monNom'])
);
Bien sûr, les variables sont filtrées par le script au préalable.

Et je n'ai aucun problème d'encodage (je fais du tout UTF-8) ou de caractères non souhaités. Dans le cas où je ne contrôle pas le serveur, j'utilise la fonction citée dans mon message précédent.

Et à l'affichage, je filtre avec des htmlentities ou autre fonctions, selon mes besoins. Smile

keke a écrit :PS : pouvoir travailler avec ER à la fin ^^
Damed, shocked by moi-même ! Comment j'ai pu faire cette faute là !? J'crois que c'est à cause de l'heure que j'ai passé récemment à regarder des Skyblogs en riant des loques qui y écrivent… :O


Sephi-Chan


RE: Vos ptites fonctions - Lanwin - 02-04-2008

Tant qu'on y est dans les fonctions à la con Tongue

Sans doute pas optimisé, pas simplifiée au maximum, peut-être pas trop lisible non plus, mais bon... (En plus il se peut que cette fonction existe déjà en interne... J'ai pas vérifié ^^)

Code PHP :
<?php 
function explode_chiffres($a)
{
// Explose les chiffres en paquet de 3 pour une meilleure visibilité.
// Exemple : explode_chiffres(1000) retourne : "1 000"
// Attention : $a doit être un nombre de type INTEGER, tandis que la valeur retournée est de type STRING.
$puissances = array(12, 9, 6, 3, 0);
$b = "";
for(
$i=0;$i<5;$i++)
{
if(
$a >= pow(10, $puissances[$i]))
{
$c = floor($a/(pow(10, $puissances[$i])));
if(
$a >= 1000) $b = $b . $c ." ";
else
$b = $b . $c ;
if(
$puissances[$i] == 0) break;
$a = $a - (pow(10, $puissances[$i]));
if(
$a < 100) $b = $b . "0";
if(
$a < 10) $b = $b . "0";
if(
$a == 0) $b = $b . "0";
}
}
return
$b;
}

Amicalement, Smile


RE: Vos ptites fonctions - pascal - 02-04-2008

Lanwin a écrit :Tant qu'on y est dans les fonctions à la con Tongue

Sans doute pas optimisé, pas simplifiée au maximum, peut-être pas trop lisible non plus, mais bon... (En plus il se peut que cette fonction existe déjà en interne... J'ai pas vérifié ^^)

Code PHP :
<?php 
function explode_chiffres($a)
{
// Explose les chiffres en paquet de 3 pour une meilleure visibilité.
// Exemple : explode_chiffres(1000) retourne : "1 000"
// Attention : $a doit être un nombre de type INTEGER, tandis que la valeur retournée est de type STRING.

}

Amicalement, Smile

un peu comme number_format en fait.

A+

Pascal


RE: Vos ptites fonctions - Eluox - 02-04-2008

Comme number format ou :

Code PHP :
<?php 
function nbstyle($nombre)
{
$resultat = '';
$nb_len = strlen($nombre);
$nb_tab = chunk_split($nombre);
for(
$a=0;$a<=$nb_len;$a++)
{
$resultat .= $nb_tab[$a];
if(!((
$nb_len - $a -1)%3))
{
$resultat .= ' ';
}
}
return
$resultat;
}



RE: Vos ptites fonctions - Sephi-Chan - 02-04-2008

C'est vrai qu'on a souvent tendance à réinventer la roue…


RE: Vos ptites fonctions - Roworll - 02-04-2008

Quelques trucs qui n'intéressent peut être que moi

Gerer les tranformations XSL en local ou via un fichier externe et renvoie le résultat vers le navigateur du client
Code PHP :
<?php 
function sendXSLT($sXml, $sXfile, $bclient=true) {
//$sXML est une chaine contenant le XML sans l'entête <?xml...
//$sXFile est l'emplacement du fichier XSL
//$bClient indique si la transformation doit se faire sur le client (true) ou sur le serveur (false)
if($bClient){
$xslt = new XSLTProcessor();
$xml = new domDocument();
$xml -> loadXml($sXml);

$xsl = new domDocument();
$xsl -> load($sXfile);
$xslt -> importStylesheet($xsl);
header ('content-type: text/html');
echo
$xslt -> transformToXml($xml);
} else {
$_xml ='<?xml version="1.0" encoding="UTF-8"?>'.LF;
$_xml.='<?xml-stylesheet type="text/xsl" href="'.$sXfile.'"?>'.LF;
$_xml.=$sXml;

header ('content-type: text/xml');
echo
$_xml;
}
}

Générer des noms aléatoires en utilisant Inspiration Pad Pro.
Cette fonction renvoie un tableau avec le nombre de noms/valeurs demandées.
Code PHP :
<?php 
function GenName($file,$n=1,){
//$file est le nom du fichier ipt à utiliser
//$n est le nombre d'éléments à générer
//Version Linux/Unix
$Names=shell_exec('./gen/ipadcgi "./gen/'.$file.'.ipt" '.$n);
//Version Windows
//$Names=shell_exec('.\gen\ipadcgi ".\gen\\'.$file.'.ipt" '.$n);
$Names=utf8_encode($Names);
$Names=preg_match_all('/class="(rowon|rowoff)" >(.*?)<\/div>/',$Names,$aNames);
return
$aNames[2];
}

Comme on est pas sectaire, un peu de XSL
Un template pour remplacer des valeurs récursivement
Code PHP :
<?php 
<xsl:template name="string-replace">
<
xsl:param name="str" />
<
xsl:param name="search" />
<
xsl:param name="replace" />
<
xsl:choose>
<
xsl:when test="$search and contains($str, $search)">
<
xsl:value-of select="substring-before($str, $search)" />
<
xsl:value-of select="$replace" />
<
xsl:call-template name="string-replace">
<
xsl:with-param name="str" select="substring-after($str, $search)" />
<
xsl:with-param name="search" select="$search" />
<
xsl:with-param name="replace" select="$replace" />
</
xsl:call-template>
</
xsl:when>
<
xsl:otherwise>
<
xsl:value-of select="$str" />
</
xsl:otherwise>
</
xsl:choose>
</
xsl:template>

Deux fonctions JS pour finir.
La première prend en entrée un responseText et retourne un objet XML
Je l'utilise dans le cadre de mes développements ajaX
Code PHP :
<?php 
function parseText(s){
if (
window.ActiveXObject) {
var
doc=new ActiveXObject("Microsoft.XMLDOM");
doc.async="false";
doc.loadXML(s);
} else {
// Mozilla, Firefox, Opera, etc.
var parser=new DOMParser();
var
doc=parser.parseFromString(s,"text/xml");
}

return
doc.documentElement;
}

La deuxième renvoie les positions top/left sur la page de l'élément passé en paramètre.
Code PHP :
<?php 
function findPos(obj) {
var
curleft = curtop = 0;
if (
obj.offsetParent) {
curleft = obj.offsetLeft;
curtop = obj.offsetTop-obj.scrollTop;
while (
obj = obj.offsetParent) {
curleft += obj.offsetLeft;
curtop += obj.offsetTop-obj.scrollTop;
}
}
return [
curleft,curtop];
}



RE: Vos ptites fonctions - Loetheri - 02-04-2008

Sephi-Chan a écrit :C'est vrai qu'on a souvent tendance à réinventer la roue

Je ne te le ferais pas redire.
Cela dit, peut-on s'abstenir d'agrandir ce massacre de fonctions inutiles ?
Heureusement, il y a du bon et de bonnes idées dans certaines.