Aller à la page 1 2
nuki -
posté le 05/11/2010 à 19:16:25 (0 messages postés)
| | Ca pourrait être cool, j'ai toujours rêver de savoir comment les vraiment bon codeurs procèdent dans certains cas, alors partageons ne ressources.
Je propose ce paradigme pour publier les sources:
1
2
3
4
5
6
7
8
9
10
|
[b]Titre[/b]
[i]Déscription[/i]
[right]Listes des obliagtions (extensions, version de PHP)[/right]
CODE
Explications potentielles
|
En couleur vous pouvez effectuer une requête !
|
zebrot -
posté le 06/11/2010 à 17:34:09 (1601 messages postés)
| Troller lvl 1 | C'est une idée géniale en fait.
Dommage pour le bide, je vais peut-être mettre un ou deux scripts pour remplir tout ça.
Et bah je vais même commencer par poser une petite question: comment vous géreriez une base de données de compétences?
Je suis en train de programmer mon système de combat, et jusqu'alors j'utilisais une fonction pour exécuter du code qui se trouvait dans ma bdd.
Cependant, au niveau de la sécurité c'est très loin d'être géniale: une simple injection SQL suffit à bousiller tout mon site (vu que le hackeur n'a qu'à modifier un champ pour faire exécuter ce qu'il veut).
Donc j'ai repris ma stratégie avec des includes cette fois-ci (j'include une page avec pour titre le nom de la compétence, etc...), mais ça va devenir très chiant si je dois coder une page/compétence.
Des idées?
Bien sûr, il est inimaginable de coder toutes mes compétences sur une seule page, ce serait vraiment trop lourd comme code.
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
nuki -
posté le 06/11/2010 à 18:21:33 (0 messages postés)
| | Ta question est particulièrement peu précise. Concrètement, que veux tu faire?
Essaye de mettre ton texte en couleur stp.
Les inbjections SQL sont probablement les choses les plus facile à éviter. Notamment avec les requêtes préparées.
|
zebrot -
posté le 06/11/2010 à 18:31:30 (1601 messages postés)
| Troller lvl 1 | Soyons concrets alors^^.
Je réalise un système de combat qui fait appel à des compétences.
J'ai donc réalisé la boucle permettant l'appel des skills et toussa, mais maintenant, j'aimerais savoir ou stocker mes infos sur les skills (sachant que ces infos doivent être du code.)
Avant, je les stockais dans ma BDD, mais il est peu recommandé de stocker dans sa BDD du code exécuté par le serveur (niveau sécurité c'est moyen).
J'ai donc pensé à le faire en include, mais ça va être très lourd de faire une page/compétence.
Donc voila, qui saurait comment Ranger du code ailleurs que dans une BDD.
EDIT: C'est mieux, pour les couleurs? =P
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
nuki -
posté le 06/11/2010 à 18:32:49 (0 messages postés)
| | Tu vas me prendre pour un idiot mais je ne comprend pas comment fonctionne les compétences :S
Edit: Ah ! Oké, je comprend. Et bien soit tu stocque ton code que tu interprète avec EVAL, ne laissant pas aux utilisateurs l'a possibilité de faire des transactions sur cette table. Soit tu le prépare au moyens de tableaux et de Switchs.
|
zebrot -
posté le 06/11/2010 à 18:39:47 (1601 messages postés)
| Troller lvl 1 | Bah le fonctionnement des skills n'est pas automatique: le code que je cherche à ranger contient toutes les infos sur les skills, y comprend la manière dont elles doivent agir (dégâts infligés à l'adversaire,etc...)
Bon, mon code est trèèès brouillon,mais bon, tu y verras peut-être plus clair:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Page d'accueil</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="design.css" />
</head>
<body>
<p>
<div class="corps">
<?php
#Je charge les données sur le héros et l'ennemi#
$nom='sdkj';
$nomE = $_POST['nom'];
#J'ouvre ma BDD#
$bdd = new PDO('mysql:host=localhost;dbname=jeu', 'root', '');
try
{
$bdd = new PDO('mysql:host=localhost;dbname=jeu', 'root', '');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}
$reponse = $bdd->query('SELECT*FROM combo WHERE Joueur=\''.$nom.'\'');
$donnees = $reponse->fetch();
$ID = explode(',', $donnees['Combo']); #Les combos sont contenus dans la bdd sous la forme de chaine de caractères.Les IDs de chaque sort sont séparés par des virgules.#
#Ici, je coupe la chaîne de caractères à chaque virgule et j'en fais un tableau grâce à la fonction explode#
$x=0;
while ($x<10) #Condition inutile.Juste pour éviter la loop infinie si quelqu'un crack ma BDD#
{
$reponses = $bdd->query('SELECT*FROM sorts WHERE ID=\''.$ID[''.$x.''].'\''); #Je charge les données de chaque sort dont l'ID est dans le tableau précédemment créé#
$donnee=$reponses->fetch();
if ($donnee['Nom'] != '') #Si il y a un sort#
{
include(''.$donnee['ID'].'.php'); #J'include une page avec l'ID du sort en nom.C'est ici que j'aurais besoin de conseils.#
$x++;
}
else
{
$x++;
}
}
$reponse->closecursor(); #Je ferme la BDD#
?>
</div>
</body>
</html> |
EDIT:Ah bah j'me fais chier à commenter ton code et entre-temps tu réponds^^
enfin bref: Citation:
Et bien soit tu stocque ton code que tu interprète avec EVAL, ne laissant pas aux utilisateurs l'a possibilité de faire des transactions sur cette table. Soit tu le prépare au moyens de tableaux et de Switchs. |
Avant j'utilisais EVAL, mais niveau sécurité ça craint vraiment.
Même sans laisser les utilisateurs toucher à la table, on peut y accéder depuis une injection SQL d'une autre table (dans l'absolu, je suis protégé des injections SQL, mais on sait jamais^^)
Tableaux et switchs=code trèèès long.
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
nuki -
posté le 06/11/2010 à 18:42:31 (0 messages postés)
| | Le code est effectivement mal structuré, d'ailleurs quand tu récupéres tes données de saisie (POST), je t'invite à préparer ta requete pour l'exécutée ensuite.
Ta méthode est pas mauvaise même si je conseillerai un simple switch qui exécute la commande adéquate pour ne pas multiplier les pages.
1
| include(''.$donnee['ID'].'.php') |
mouais :
1
| include $donnee['ID'].'php'; |
me semble suffisant et fait bien attention, en terme de lisibilité je te conseille de mieux séparer ton code par couche.
|
zebrot -
posté le 06/11/2010 à 18:44:21 (1601 messages postés)
| Troller lvl 1 | Citation: Ta méthode est pas mauvaise même si je conseillerai un simple switch qui exécute la commande adéquate pour ne pas multiplier les pages. |
Avec quelques centaines de compétences, contenant chacune des dizaines de lignes, mon code va vite devenir illisible. Et si je dois toucher une compétence, je vais galérer^^
EDIT: J'ai pris l'habitude de mettre tout entre parenthèses et de toujours ouvrir mes guillemets simples(même si je les referme juste après.) c'est peut-être inutile, mais c'est une habitude^^
De plus, les parenthèses sont obligatoires car c'est un paramètre de la fonction
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
nuki -
posté le 06/11/2010 à 18:47:53 (0 messages postés)
| | Si tu le dis, fait comme tu le sens, les includes fonctionneront dans ce cas. Bonne chance.
Un captcha "puissant
Un captcha est un test de Turing qui permet de (normalement), différencier un homme d’une machine. Par exemple, lors de l’inscription sur un site, il est préférable de vérifier que l’humain est bien un humain car cela évite les inscriptions de robots (de plus en plus présents sur la toile) et les inscriptions massives de petits pervers voulant détruire votre joli site.
Il en existe plusieurs déjà préconçu dont un des plus célèbre est le fameux reCAPTCHA, qui utilise la force de l’humanité pour faire des calcules car chacun des utilisateur entrant un mot permet une contribution à la numérisation de livre.
La librairie GD m’ayant toujours un peu amusé, je me suis dit : »pourquoi ne pas créer mon propre systeme? » et c’est chose faite, pour le projet Music-all (http://www.music-all.be) où je suis développeur pour la version 2.
Mon systeme de Captcha est donc polymorphe et permet 4 choses: La reconnaissance d’une combinaison, la résolution d’une addition, celle d’une équation simple et la reconnaissance des formes/couleurs. Il change de manière aléatoire et équilibré. La génération du code a recopier modifie le traçage des lettres via un mini moteur de particule.
Il génère un fond relativement complexe (basé sur des fonction mathématique alourdie) et n’affiche pas le texte de manière droite, ses longueurs et positions sont aléatoires et il utilise les sessions.
Il est composé de 2 fonctions, une (ini_captcha()) à appeler en première lors de l’initialisation du formulaire, c’est celle-ci qui se chargera de créer le facteur de chance et de générer la question.
1
2
3
| <?php
$question = ini_captcha();
?> |
Et donc en affichant $question, vous affichez la question requise, ensuite il vous faudra une page appelant la 2eme fonction (captcha()) qui elle transformera votre page en image. En vous rendant dans la page ou ini_captcha() est appelée, il vous suffit d’afficher l’image.php ou vous avez appelé captcha().
Sachez que ce captcha n’offre pas les fonctionnalité de rafraichissement (même si pour le projet initiale, elles seront mise en place) mais je ne m’occupe pas de javascript, mon code se limite à la génération de l’image et de la question/réponse. La réponse du captcha se trouve dans $_SESSION['reponse'].
Je vous invite à regarder le code sans pour autant le copier/coller.
Si vous avez des commentaires Enjoy
Il faut donc obligatoirement GD2 installé
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
|
<?php
session_start();
/**
* Fonctions de génération de captcha image
* @author NUKI /Xavier Van de Woestyne (Music-all.be)
* @desc Génère un captcha multiple
*/
//Définition des constantes (pour les langues)
define("_Q_1_", "Recopiez le code ci-dessous.");
define("_Q_2_", "Résolvez le calcul suivant.");
define("_Q_3_", "Résolvez l'équation suivante.");
define("_Q_4_", "De quelle couleur est le carré?");
define("_Q_5_", "De quelle couleur est le cercle?");
define("_Q_6_", "De quelle couleur est le triangle?");
/**
* Intialisation du captcha
* @author NUKI /Xavier Van de Woestyne (Music-all.be)
* @desc A utiliser avant captcha() obligatoirement
* @return Array(int, int, int)
*/
function ini_captcha(){
$type = mt_rand(0,3);
switch($type){
case 0:$q = _Q_1_;
$_SESSION['typeCaptcha'] = array($type, false);
break;
case 1:$q = _Q_2_;
$_SESSION['typeCaptcha'] = array($type, false);
break;
case 2:$q = _Q_3_;
$_SESSION['typeCaptcha'] = array($type, false);
break;
case 3:
$facteur1 = mt_rand(0,2);
switch($facteur1){
case 0:$q = _Q_4_;
$_SESSION['typeCaptcha'] = array($type, $facteur1);
break;
case 1:$q = _Q_5_;
$_SESSION['typeCaptcha'] = array($type, $facteur1);
break;
case 2:$q = _Q_6_;
$_SESSION['typeCaptcha'] = array($type, $facteur1);
break;
}
break;
}
return $q;
}
/**
* Création de l'image
* @author NUKI /Xavier Van de Woestyne (Music-all.be)
* @desc Transforme la page ou est appelé la fonction en image unique
*/
function captcha(){
//Génération de l'image
if(!isset($_SESSION['typeCaptcha']))die("where is ini_captcha?");
$type = $_SESSION['typeCaptcha'][0];
$h = 50;
$w = 170;
$image = imagecreate($w,$h);
//Color Set
$fond = imagecolorallocate($image, 255, 255, 255);
$corps = imagecolorallocate($image, 000, 000, 000);
$ligne = imagecolorallocate($image, 240, 240, 240);
$ligne2 = imagecolorallocate($image, 170, 170, 170);
//Valeur génériques
$font = 'base.ttf';
$coeff = mt_rand(-3, 3);
$nombres = array("zero", "un", "deux", "trois", "4", "cinq", "six", "sept", "huit", "neuf", "dix",
"onze", "12", "treize", "14", "quinze", "seize", "17", "18", "19", "vingt");
$colors = array("rouge" => imagecolorallocate($image, 255, 000, 00),
"vert" => imagecolorallocate($image, 000, 255, 000),
"bleu" => imagecolorallocate($image, 000, 000, 255));
$matrix_blur = array(
array(1,2,1),
array(2,4,2),
array(1,2,1));
//Dispatchement des actions
switch($type){
case 0:
//Cas de recopier une combinaison
$caracteres = "abcefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ123456789";
$caracteres = str_shuffle($caracteres);
$combinaison = "";
$combinaisonAffichage = "";
$taille = mt_rand(4,6);
for($i=0;$i<$taille;$i++){
$combinaison .= $caracteres[$i];
$combinaisonAffichage .= $caracteres[$i]." ";
}
$_SESSION['reponse'] = $combinaison;
$xText = ($taille == 4)?25:5;
imagefttext($image, 20, $coeff, $xText, 25, $corps, $font, $combinaisonAffichage);
//Recuperer tableau
$matrice = array();
for($i=0;$i<$w;$i++){
for($j=0;$j<$h;$j++){
if(imagecolorat($image, $i, $j) == $corps){
$matrice[] = array($j,$i);
}
}
}
//Effacage
ImageFilledRectangle ($image, 0, 0, $w, $h, $fond);
//fond
$precY = $h/2;
$precX = 0;
for($i=0;$i<$w;$i++){
$coordX = $i+mt_rand(-2,2);
$coordY = (((tan($i+mt_rand(-3,8)))*mt_rand(7,30)))+$h/2+mt_rand(-2,2)+sin($i*3);
imagesetpixel($image, $coordX, $coordY, $ligne);
imageline($image, $precX, $precY, $coordX, $coordY, $ligne);
$precY = $coordY;
$precX = $coordX;
}
//Particuleur
$iterateur = 1;
$prec = $matrice[0][1];
foreach($matrice as $point){
$parite = (($iterateur%2)==0);
$facteur = mt_rand(3,4)+3;
$coeff2 = mt_rand(-1, +1);
if(($point[1] - $prec) > 10){
$newX = $point[1]+$facteur+($coeff2);
$newY = ($parite)?$point[0]+$facteur+$coeff2-10:$point[0]+$facteur+$coeff2+10;
}else{
$newX = $point[1]+$facteur;
$newY = $point[0]+$facteur;
}
$prec = $point[1];
imagesetpixel($image, $newX, $newY, $corps);
$iterateur++;
}
//Traitement Final
imageconvolution($image, $matrix_blur, 16, 0);
break;
case 1:
//cas Addition Simple
$nombre1 = mt_rand(0, 10);
$nombre2 = mt_rand(0, 10);
$_SESSION['reponse'] = $nombre1+$nombre2;
$operation = $nombres[$nombre1].' + '.$nombres[$nombre2].' = ?';
//Fond complexe
$precY = $h/2;
$precX = 0;
for($i=0;$i<$w;$i++){
$coordX = $i+mt_rand(-2,2);
$coordY = (((tan($i+mt_rand(-3,8)))*mt_rand(7,30)))+$h/2+mt_rand(-2,2)+sin($i*3);
imagesetpixel($image, $coordX, $coordY, $ligne);
imageline($image, $precX, $precY, $coordX, $coordY, $ligne);
$precY = $coordY;
$precX = $coordX;
}
imagefttext($image, 15, $coeff, 5, 25, $ligne2, $font, $operation);
break;
case 2:
//Cas d'équation simple
$nombre1 = mt_rand(0, 10);
$nombre2 = mt_rand(0, 10);
$resultat = $nombre1+$nombre2;
$_SESSION['reponse'] = $nombre2;
$operation = $nombres[$nombre1].' + ? = '.$nombres[$resultat];
//Fond complexe
$precY = $h/2;
$precX = 0;
for($i=0;$i<$w;$i++){
$coordX = $i+mt_rand(-2,2);
$coordY = (((atan($i+mt_rand(-3,8)))*mt_rand(7,30)))+$h/2-mt_rand(-2,2)+tan($i*3)-35;
imagesetpixel($image, $coordX, $coordY, $ligne);
imageline($image, $precX, $precY, $coordX, $coordY, $ligne);
$precY = $coordY;
$precX = $coordX;
}
imagefttext($image, 15, $coeff, 5, 25, $ligne2, $font, $operation);
break;
case 3:
//reconnaissance des formes
//Fond complexe
$precY = $h/2;
$precX = 0;
for($i=0;$i<$w;$i++){
$coordX = ($i*2)+mt_rand(-2,2);
$coordY = (((atan($i*10+mt_rand(-3,8)))*mt_rand(7,30)))+$h/2-mt_rand(-2,2)+tan($i*3)-35;
imagesetpixel($image, $coordX, $coordY, $ligne);
imageline($image, $precX, $precY, $coordX, $coordY, $ligne);
$precY = $coordY;
$precX = $coordX;
}
$facteur1 = mt_rand(0,2);
switch($facteur1){
case 0: $carre = "rouge"; $cercle = "vert"; $triangle = "bleu";break;
case 1: $carre = "vert"; $cercle = "bleu"; $triangle = "rouge";break;
case 2: $carre = "bleu"; $cercle = "rouge"; $triangle = "vert";break;
default:$carre = "rouge"; $cercle = "vert"; $triangle = "bleu";break;
}
$facteur2 = $_SESSION['typeCaptcha'][1];
switch($facteur2){
case 0:
//A trouver carré
//triangle
$xTriangle = mt_rand(0,$w-30);
$yTriangle = mt_rand(20, $h);
$coordTriangle = array($xTriangle, $yTriangle, $xTriangle+15, $yTriangle, $xTriangle, $yTriangle-15);
ImageFilledPolygon($image, $coordTriangle, 3, $colors[$triangle]);
//cercle
$xCercle = mt_rand(7,$w-15);
$yCercle = mt_rand(7, $h-15);
ImageFilledEllipse($image, $xCercle, $yCercle, 15, 15, $colors[$cercle]);
//carre
$xCarre = mt_rand(0,$w-15);
$yCarre = mt_rand(0, $h-15);
ImageFilledRectangle($image, $xCarre, $yCarre, $xCarre + 15, $yCarre+15, $colors[$carre]);
$_SESSION['reponse'] = $carre;
break;
case 1:
//A trouver cercle
//triangle
$xTriangle = mt_rand(0,$w-30);
$yTriangle = mt_rand(20, $h);
$coordTriangle = array($xTriangle, $yTriangle, $xTriangle+15, $yTriangle, $xTriangle, $yTriangle-15);
ImageFilledPolygon($image, $coordTriangle, 3, $colors[$triangle]);
//carre
$xCarre = mt_rand(0,$w-15);
$yCarre = mt_rand(0, $h-15);
ImageFilledRectangle($image, $xCarre, $yCarre, $xCarre + 15, $yCarre+15, $colors[$carre]);
//cercle
$xCercle = mt_rand(7,$w-15);
$yCercle = mt_rand(7, $h-15);
ImageFilledEllipse($image, $xCercle, $yCercle, 15, 15, $colors[$cercle]);
$_SESSION['reponse'] = $cercle;
break;
case 2:
//A trouver triangle
//carre
$xCarre = mt_rand(0,$w-15);
$yCarre = mt_rand(0, $h-15);
ImageFilledRectangle($image, $xCarre, $yCarre, $xCarre + 15, $yCarre+15, $colors[$carre]);
//cercle
$xCercle = mt_rand(7,$w-15);
$yCercle = mt_rand(7, $h-15);
ImageFilledEllipse($image, $xCercle, $yCercle, 15, 15, $colors[$cercle]);
//triangle
$xTriangle = mt_rand(0,$w-30);
$yTriangle = mt_rand(20, $h);
$coordTriangle = array($xTriangle, $yTriangle, $xTriangle+15, $yTriangle, $xTriangle, $yTriangle-15);
ImageFilledPolygon($image, $coordTriangle, 3, $colors[$triangle]);
$_SESSION['reponse'] = $triangle;
break;
}
break;
}
//Sauvegarde finale
header("content-type: image/png");
imagepng($image);
}
?>
|
Bonne chance
EDIT/
Non pas du tout, sans parenthèse tu interprète ton code en Instruction et plus en fonction, tu gagne donc du temps.
|
Lufia -
posté le 06/11/2010 à 19:04:36 (5792 messages postés)
| Un Oniromancien. PVs 1, Attaque 0, Défense 0. | Bon, au risque de répondre complètement à côté de la plaque...
Dans une BDD, je mets des données, et sûrement pas du code. Dans une table SQL de sorts, j'aurais donc plusieurs champs contenant les caractéristiques de ce sort (MP consommés, élément, dégâts...) mais absolument rien concernant le déroulement du combat en lui même.
Donc, quand quelqu'un veut lancer un sort, j'appellerais une fonction, qui prendrait en argument l'id du sort lancé. Le calcul des dégâts infligés, l'affichage de je sais pas quoi à l'écran, etc., je l'écris dans ma fonction php, pas dans le fichier SQL.
Mais bon, je Ruby beaucoup plus que je ne PHP, donc je sais pas trop si ce que je dis est applicable ici.
lol, un captcha. Un message subliminal pour Sylvanor ?
|
Une signature ? Pour quoi faire ? |
nuki -
posté le 06/11/2010 à 19:06:05 (0 messages postés)
| | Tu as raison, maintenant, il faut parfois tricher.
|
zebrot -
posté le 06/11/2010 à 19:27:16 (1601 messages postés)
| Troller lvl 1 | Le problème c'est que les sorts dépassent les simples dégâts infligés-reçus.
Ainsi, un d'entre eux change la cible, un autre attaque à nouveau si l'ennemi a été tué...
Et c'est bien trop complexe pour en garder seulement quelques caractéristiques.
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
nuki -
posté le 07/11/2010 à 13:41:15 (0 messages postés)
| | En fait, ce n'est pas une rubrique Entraide en PHP, c'est un partage de scripte et de requêtes ciblant un sujet générique.
|
zebrot -
posté le 07/11/2010 à 18:18:39 (1601 messages postés)
| Troller lvl 1 | D'accord, compris.
Je vais donc laisser ce topic sombrer dans les ténèbres de l'oubli Oniromanciens dont j'avais, dans un élan de charité honorable, tenté de l'extirper
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
nuki -
posté le 07/11/2010 à 23:32:13 (0 messages postés)
| | Proposez une manière élégante d'afficher des images aléatoires contenues dans un dossier !
|
Joke -
posté le 07/11/2010 à 23:47:16 (5090 messages postés)
| Bilouteux fou | J'ai envie de dire :
1
2
3
4
5
| <?php
$bilou = 'images/';
$forever = glob($bilou.'*.{jpg,jpeg,gif,png}',GLOB_BRACE);
echo '<img src="'.$forever[rand(0, (count($forever) - 1))].'" alt="Master !" />';
?> |
|
biloumaster.fr, mon joli site ouèb tout bô tout frai ! |
nuki -
posté le 07/11/2010 à 23:48:53 (0 messages postés)
| | Joli, je pense que c'est comme ça que j'aurais fait.
As-tu seulement des défaut l'ami?
|
Joke -
posté le 07/11/2010 à 23:52:24 (5090 messages postés)
| Bilouteux fou | Il parait que j'ai des défauts, mais ce n'est qu'une rumeur... Pour le reste... Je suis le BilouMaster !
|
biloumaster.fr, mon joli site ouèb tout bô tout frai ! |
zebrot -
posté le 08/11/2010 à 21:13:20 (1601 messages postés)
| Troller lvl 1 | Joke fait aussi du PHP?
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
nuki -
posté le 08/11/2010 à 22:51:51 (0 messages postés)
| | Dingue non? C'est lui qui me l'a appris.
|
zebrot -
posté le 09/11/2010 à 09:05:50 (1601 messages postés)
| Troller lvl 1 | Joke je te vénère.
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
nuki -
posté le 09/11/2010 à 23:41:10 (0 messages postés)
| | http://www.biloucorp.com/Nukinews/
BETA, bientot l'API
|
zebrot -
posté le 10/11/2010 à 15:51:36 (1601 messages postés)
| Troller lvl 1 | C'est un flux rss consacré au making?
Ca a l'air de roxxer du poney, malgré la laideur maladive du truc
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
nuki -
posté le 10/11/2010 à 16:30:41 (0 messages postés)
| | En fait, c'est basé sur une classe appelée RSSFactory qui permet de créer super rapidement des flux RSS dynamique et de les lires super facilements.
En fait, quand on "fetch" un flux, il retourne un objet Flux RSS qui contient un "Channel" avec toutes ses infos et un tableau de Items.
Pour ajouter un flux, il suffit donc de faire feed($fluxRSS); et j'ai toutes les informations nécéssaires.
|
zebrot -
posté le 10/11/2010 à 18:26:58 (1601 messages postés)
| Troller lvl 1 | Ou comment apprendre un truc méga intéressant en parlant à Nuki =O
|
01010011 01110101 01100011 01100101 00100000 01101101 01101111 01101001 00100000 00111100 00110011 |
Aller à la page 1 2Index du forum > Vos créations > Partageons nos scriptes/astuces PHP
|