Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources, etc. pour PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 13/02/2006, 14h27   #21
XtofRoland
Membre éclairé
 
Avatar de XtofRoland
 
Inscription : août 2005
Messages : 357
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 357
Points : 333
Points : 333
Cette classe génère des formulaires d'après une requete sql.
ici en deux classes car j'ai deux bases de données diff.
je n'ai pas d'hebergeur...
en passant si qqn a la motivation de mettre un script de ce genre en ligne..
Citation:
<form>
<textarea name='code'>....</textarea>
</form>
<?
if (!isset($_POST['code'])) $_POST['code'] = "";

$tab = array('function','include','var', 'class');
foreach ($tab as $word) $_POST['code'] = ereg_replace($_POST['code'], $word, "|color=blue]".$word."|/color]");

$tab = array('mysql_..','substr','ldap_');
foreach ($tab as $word) $_POST['code'] = ereg_replace($_POST['code'], $word, "|color=red]".$word."|/color]");

echo $_POST['code']
?>
pour faciliter la lecture des codes afficher ici ;-)

Citation:
<?
//$obj->addCSS("f.css");
include "formabs.inc";
class formms extends formabs {
var $db;
function formms($SQL ){

$this->db = odbc_connect("secret","secret","secret");
$req = odbc_exec( $this->db,$SQL);

$fieldName = array();
$fieldLen = array();
$fieldType = array();
$fieldValue = array();

$count = odbc_num_fields( $req )+1;
for ($i=1;$i<$count ;$i++){
$fieldName[$i] = odbc_field_name($req, $i); // nom du champ
$fieldLen[$i] = odbc_field_len($req, $i); // longueur
$fieldType[$i] = odbc_field_type($req, $i); // type du champ
}


odbc_fetch_row($req);
for ($i=1;$i<$count ;$i++){
$fieldValue[$i] = "";
$fieldValue[$i] = odbc_result($req,$i);
}
$this->SQL = $SQL;
$SQL = strtoupper($SQL);
$SQL = str_replace(" FROM ", "[*%&]", $SQL );
$SQL = str_replace(" WHERE ", "[*%&]", $SQL);
list($fields,$this->table,$whereclause) = explode("[*%&]",$SQL);


$this->numfields = $count;
for ($i=1;$i< $this->numfields ; $i++){
$this->fieldErrMsg[$i] = "";
$this->test[$i] = "";
$row = new row($fieldName[$i], $fieldLen[$i],$fieldType[$i]);
$row->fieldValue= $fieldValue[$i];
$this->rows[$fieldName[$i]] = $row ;
}
parent::formabs();
}//end construct
function nextSequence($col){
$tab = $this->table ;
$SQL = "select max(".$col.") from ".$tab;
$req = odbc_exec( $this->db,$SQL);
odbc_fetch_row($req);
return odbc_result($req,1) + 1;
}

}//end class
?>
voici la deuxieme:
Citation:
<?
//$obj->addCSS("f.css");
//array_keys
define("CONSULT", 0);
define("MODIFY", 1);
define("ADD", 2);

class row{
/*

*/
var $label = ""; //
var $fieldName = ""; //nom du champs en db
var $fieldLen = "";
var $fieldType = "";
var $fieldValue = "";//sera envoyé a la database
var $visibleValue="";//sera affiché
var $fieldErrMsg= "";
var $visible = true;/*Un champ peut etre invisible
- pour permettre des tests
- car rempli automatiquement et pour le design */
var $protected = false;
var $key = false;
var $list = array();
var $auto = "";

function row($fieldName, $fieldLen, $fieldType ){
$this->fieldName = $fieldName;
$this->label = $fieldName;
$this->fieldLen = $fieldLen;
$this->fieldType = $fieldType;
}
function toDB( ){
$rtn = $this->fieldValue;
$rtn = addslashes($rtn);
return $rtn;
}
function show( $mode ){
$rtn = "";
if ($mode && !$this->protected ){
switch($this->fieldType){
case 'text':
$rtn = "<TEXTAREA name='".$this->fieldName."' rows=4 cols=40>".nl2br($this->fieldValue)."</TEXTAREA>";
break;
default:
$rtn = "<input type=text name='".$this->fieldName."' value='".$this->fieldValue."'>";
break;

}
}else{//consult
/*if ($this->fieldName == $this->primaryKey){
$form .= "<input name=".$this->rows[$i]->fieldName." type=hidden value=".$this->rows[$i]->fieldValue.">";
if ( ! $this->fieldValue ) $form .= " automatique ";
}*/

$rtn = ($this->fieldValue == '' && $this->auto )?'automatique':$this->fieldValue;
}
return $rtn;
}//end show
function test( ){

}
}//end class

class formabs{
var $mode = CONSULT;
var $table = "";
var $SQL = "";
var $rows = array();
var $numfields = 0 ; //nombre de rows
var $ErrMsg = "";

function formabs( ){
if (isset($_POST)){
foreach ($_POST as $key => $val) {
if(isset($this->rows[$key])) $this->rows[$key]->fieldValue = $val;
}
}
}//end _construct
function nextSequence($col, $tab){}//end abstract fct
function mode($mode ){
$this->mode = $mode;
}//end mode
function protect($field ){
$this->rows[$field]->protected = true;
}//end protect
function setAuto($field, $fct ){
$this->protect($field);
$this->rows[$field]->auto = $fct;
}//end setAuto
function primary($field ){
$this->rows[$field]->key = true;
$this->setAuto($field, 'nextSequence');
}//end primary
function traduction($dico ){
foreach ($dico as $key => $val) if (isset($this->rows[$key]) && $val != "")$this->rows[$key]->label = $val;
}//end traduction
function getValue($field){
return (isset($this->rows[$field]))? $this->rows[$field]->fieldValue: O;
}//end getValue
function show(){
$count = $this->numfields;
$form = "<form method=POST action=".$_SERVER['PHP_SELF']."?mode=".$this->mode."> ";
$form .= "<table width=500 cellSpacing=0 cellPadding=0><TBODY>";
$i = 0;
foreach ($this->rows as $key => $row) {
if ($row->visible){
//libellé
$i++;
$form .= "<tr class=data".(($i % 2) + 1) ."><td>".$row->label."</td>";
//icone
$form .= "<td width=16>";
if ( $row->fieldErrMsg != "" ) $form .= "<img src='"._HOMEPAGE."/Img/b_drop.png'>";
$form .= "</td>";
//champ
$form .= "<td>";
$form .= $row->show($this->mode) ;
$form .= "</td><td>&nbsp;</td></tr>";
}
}
$form .= "<TBODY></table>";

if ( $this->mode == MODIFY || $this->mode == ADD ){
$form .= " <table width=100%><tr><td>";
if ( $this->ErrMsg ) $form .= "<marquee>".$this->ErrMsg."</marquee>" ;
$form .= "</td><td width=86 height=29><input type=image src='"._HOMEPAGE."OO/form_bval.gif'></td></tr></table>";
}
$form .= "</form>";
return $form;
}// end show
function test( ){
$test = true;
for ($i=1;$i< $this->numfields ; $i++){
$this->fieldErrMsg[$i] = eval ($this->test[$i]);
if ( $this->fieldErrMsg[$i] != "" ) $test = false;
}
return $test;
}//end test
function fillAutoField(){
foreach ($this->rows as $key => $row) {
if ($row->auto){
switch($row->auto){
case 'nextSequence':
$temp = '$temp = $this->nextSequence("'.$key.'");';
eval($temp);
$this->rows[$key]->fieldValue = $temp;
break;

}
}
}
}//end fillAutoField
function getSQLSyntax(){
$rtn = "";
$into = "";
$values = "";
$set = "";
$where = "";
foreach ($this->rows as $key => $row) {
if ($row->key){
$where .= ($where == "" )? "" :" and ";
$where .= $key."=".$row->toDB()." ";
}else{
$set = "";
}
$into .= ','.$key;
$values .= ','.$row->toDB();
}
//retirer la premiere ','
$into = substr($into,1);
$values = substr($values,1);

switch ($this->mode){
case MODIFY:
$rtn = "update ".$this->table." set ".$set." where ".$where.";";
break;
case ADD:
$rtn = "insert into ".$this->table."(".$into.") values(".$values.");";
break;
}
return $rtn;
}//end getSQLSyntax
function sql_exec($SQL ){
return false; //abstract
}
function commit( ){
$this->fillAutoField();
$SQL = $this->getSQLSyntax();

if ($this->sql_exec($SQL)){
switch ($this->mode){
case MODIFY:
$this->ErrMsg = "<font color=green><b>Enregistrement modifié</b></font>";
break;
case ADD:
$this->ErrMsg = "<font color=green><b>Enregistrement ajouté</b></font>";
break;
}
$this->mode = CONSULT;
}else{
$this->ErrMsg = "<font color=red><b>Modification annulée</b></font>";
}
}//end commit
}//end class
?>
et voici une page qui utilise ces classes.
Citation:
<? session_start();
include "../OO/page.inc";//la mise en page
include "../OO/formms.inc";
$mode = (isset($_GET['mode']))? $_GET['mode']:CONSULT;
$body = "<img src='../Accueil/helpdesk.jpg' >";

$SQL = "select ...mes champs... from Matable ";
if ($mode == ADD){
$SQL .= " where 1 = -1";
$body .="<b> Ajout d'un trackit </b><br />";
}else{
$SQL .= " where XX_NUM = ".$_GET['num'];
$body .="<b> Détail du trackit ".$_GET['num']."</b><br />";
}
$obj_form = new formms($SQL); //Création du formulaire
$obj_form->mode($mode);

$traduction = array ( "XX_NUM"=>"N° appel: ", "brol"=>"Récapitulatif: ", ... "NOTE"=>"Note: ", "STATUS"=>"Etat: " );
$obj_form->traduction($traduction);
$obj_form->primary("XXID");
$obj_form->setAuto("XX_NUM","nextSequence");
if ( $obj_form->test() && count($_POST)>0) $obj_form->commit();
$body .= $obj_form->show();
$page->addhtmlbody($body);
$page->show();
?>
la mise en page depend d'un css, mais il "suffit" d'adapter le fonction ->show() pour modifier la mise en page.
vs pouvez bien entendu signaler des bug ou proposer des améliorations.
a venir : la possibilité de proposer une liste de choix pour un champs(option select)
XtofRoland est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2006, 17h34   #22
Mr N.
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 418
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 418
Points : 5 832
Points : 5 832
plutot que la couleur, je préfère l'indentation grâce aux balises [code]
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2006, 09h44   #23
titoumimi
Expert Confirmé Sénior
 
Avatar de titoumimi
 
Inscription : décembre 2003
Messages : 3 716
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : décembre 2003
Messages : 3 716
Points : 6 016
Points : 6 016
Suite à de nombreuses demandes sur le forum, voici un petit script de lecture / écriture de fichier. Ici, nous ouvrons un fichier distant, en lisons le contenu, et l'enregistrons en local.

Code :
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
 
<?php
    // ---------------- Ouverture et lecture du fichier distant ----------------
    //Ouverture du fichier $fichier
    $fichier = "http://www.google.fr/intl/fr_fr/images/logo.gif";
    $fichierouvert = fopen ($fichier, "r");
    // Initialisation de la variable contenu
    $contenu ="";
    //Mise en mémoire du fichier dans une variable $contenu
    while (!feof($fichierouvert)) {
      $contenu .= fread($fichierouvert, 8192);
    }
    fclose ($fichierouvert);
 
    // ---------------- Création et écriture du fichier local ----------------
    //Répertoire de destination
    $dirname = "";  
    // Fichier de destination
    $filename = "carte.gif";
    //Ouverture du répertoire de destination
    $fichierouvert = fopen ($dirname.$filename, "w+");
    //Copie du fichier
    if ( !fwrite($fichierouvert, $contenu)) {
      echo "Impossible d'écrire dans le fichier ($filename)";
      exit;
    }
    //Fermeture du fichier
    fclose ($fichierouvert);
?>
Au moment de la lecture du fichier, on pourrait simplifier en remplacant le while par
Code :
1
2
 
$contenu = fread ($fichier_ouvert, filesize($filename));
mais il semble que la propriété filesize ne soit pas accessible à chaque fois.

Pour la création et l'écriture dans un fichier, pensez bien à vérifier que vous avez les droits requis dans le répertoire donné et sur le fichier.


Pour les modes d'ouverture du fichier, faites bien attention :
Citation:
'r' Ouvre en lecture seule, et place le pointeur de fichier au début du fichier.
'r+' Ouvre en lecture et écriture, et place le pointeur de fichier au début du fichier.
'w' Ouvre en écriture seule ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.
'w+' Ouvre en lecture et écriture ; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer.
'a' Ouvre en écriture seule ; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
'a+' Ouvre en lecture et écriture ; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer.
'x' Crée et ouvre le fichier en lecture seule ; place le pointeur de fichier au début du fichier. Si le fichier existe déjà, fopen() va échouer, en retournant FALSE et en générant une erreur de niveau E_WARNING. Si le fichier n'existe pas, fopen() tente de le créer. Ce mode est l'équivalent des options O_EXCL|O_CREAT pour l'appel système open(2) sous-jacent. Cette option est supportée à partir de PHP 4.3.2 et fonctionne uniquement avec des fichiers locaux.
'x+' Crée et ouvre le fichier en lecture et écriture ; place le pointeur de fichier au début du fichier. Si le fichier existe déjà, fopen() va échouer, en retournant FALSE et en générant une erreur de niveau E_WARNING. Si le fichier n'existe pas, fopen() tente de le créer. Ce mode est l'équivalent des options O_EXCL|O_CREAT pour l'appel système open(2) sous-jacent. Cette option est supportée à partir de PHP 4.3.2, et fonctionne uniquement avec des fichiers locaux.
titoumimi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2006, 15h00   #24
Canard0
Invité de passage
 
Inscription : février 2006
Messages : 2
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 2
Points : 1
Points : 1
Par défaut Charger ds 1 variable le contenu d'1 page protégée par login

Charger dans une variable le contenu d'une page protégée par un login

Ce script est spécialement utile pour faire de l'extraction de données dans un site nécéssitant un login.

Le script est assez court, mais la difficulté résidait dans la création du contexte correct pour faire transiter les informations de login en POST et le maintien du numéro de session.

Pour illustrer le fonctionnement, voici le script sécurisé ( supposé être dans l'alias de dossier de publication http://localhost/php/ et s'appeler main.php ):

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
   session_start();
   if ($_POST[user]=="Moi" && $_POST[pass]=="AJE")
   {
     $_SESSION[accept]="OK";
     echo "Enregistrement ok.<br><a href='main.php'>Contenu</a>";
   }
   else if ($_SESSION[accept]=="OK")
   {
     echo "BRAVO. Vous avez accédé au contenu";
   }
   else
   {
     echo '<form name="mainform" method="post">';
     echo 'User:<input type="text" name="user" value="Moi" size="20" /><br>';
     echo 'Pass:<input type="password" name="pass" value="AJE" size="20" /><br>';
     echo '<input type="submit" name="Envoi" /></form>';
   }
?>
et voici la solution:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
// Référence pour les contextes http://fr.php.net/stream
$opts = array ('http'=>array ('method' => 'POST',
                              'content'=> 'user=Moi&pass=AJE',
                              'header' => "Accept-language: en\r\n".
                                          "Cookie: PHPSESSID=9d5c2d1c8cfab4094283887a2623a0c4" )
              );
$context = stream_context_create($opts);
$fichier = fopen('http://localhost/php/main.php', 'r', false, $context);
fclose($fichier);
$opts = array ('http'=>array ('method' => 'GET',
                              'header' => "Accept-language: en\r\n".
                                          "Cookie: PHPSESSID=9d5c2d1c8cfab4094283887a2623a0c4" )
              );
$context = stream_context_create($opts);
$fichier = fopen('http://localhost/php/main.php', 'r', false, $context);
while ($str=fread($fichier, 16))
{
  $src .="$str";
}
fclose($fichier);
echo $src;
?>
Je n'en suis pas peu fier, j'ai dû bien chercher...

Que le code soit avec toi.
Canard0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2006, 20h09   #25
zulot
Membre éclairé
 
Inscription : décembre 2004
Messages : 662
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 662
Points : 319
Points : 319
alors moi je vais porter ma ptite pierre toute toute petite à l'édifice

On veut souvent vérifier dans un forulaire qu'un mail est bien correcte, un '.' et un '@ et sans ';' en geral donc voila une ptite focntion pour ca

Code :
1
2
3
4
5
6
7
8
9
10
11
//Verifier la presence de caractere interdit dans une chaine pour un mail 
function falsemail($email){  
if( strpos($email,'.') === false || strpos($email,'@') == false || strpos($email,';') == true )  
 
return(true); 
 
else 
 
 
return(false); 
}

Sinon j'ai voulu changer la fonction pour n'importe quel chaine et avec n'importe quel type de caractere a interdir, en gros un tableau de caractere interdit

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
// verifie la presence de caractere interdit (variable $tab) pour une chaine 
function falsechaine($chaine,$tab){  
$ereur = false; 
 
for($i=0;$i<sizeof($tab) && $ereur == false;$i++){  
 
if( strpos($chaine,$tab[$i]) != false )  
 
 
$ereur = true;
 
 
} 
 
return($ereur); 
}
voila j'espere ca en aidera certains


/!\ En faisant des test plus poussé je viens de m'apercevoir d'un bug.
Si le caractere interdit se trouve en 1ere position il n'est pas detexté!!!! donc rajouté un espace dans la variable de chaine a tester en tout debut ce qui permet d'éviter ce bug.
zulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2006, 21h30   #26
Anduriel
Membre Expert
 
Avatar de Anduriel
 
Homme
Étudiant
Inscription : février 2004
Messages : 2 217
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2004
Messages : 2 217
Points : 1 354
Points : 1 354
Class d'upload

Cette classe permet de charger (normalement) simplement un ou des fichiers sur un serveur distant ou local, supprimer, créer des dossiers.
Je l'ai faite sans trop l'utiliser mais ça peut servir

Code :
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
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
<?php
/****************************************************/
/*  Class FileManager par Krak @ Anduriel
****************************************************/
 
define ("FTP_CONNECTSSL_FAILED", "<b>Erreur critique:</b> connection au serveur 
impossible. Vérifiez si l' OpenSSL est installé.");
define ("FTP_CONNECT_FAILED", "<b>Erreur critique:</b> connection au serveur imp
ossible.");
define ("LOGIN_FAILED", "<b>Erreur critique:</b> impossible de se connecter, vér
ifiez les paramètres d'accès.");
define ("NO_FILE_UPLOADED", "<b>Erreur:</b> le fichier n'a pas été téléchargé su
r le serveur.");
define ("ERR_FILESIZEINI", "<b>Erreur:</b> la taille d'un des fichiers dépasse l
a limite fixée dans votre php.ini.");
define ("ERR_FILESIZE", "<b>Erreur:</b> la taille d'un des fichiers dépasse la l
imite fixé par le formulaire.");
define ("ERR_PARTIALDL", "<b>Erreur:</b> un des fichiers a été téléchargé partie
llement dans le dossier temporaire.");
define ("ERR_NOFILEDL", "<b>Erreur:</b> un des fichiers n'a pas été téléchargé d
ans le dossier temporaire");
define ("ERR_NOFOLDER", "<b>Erreur:</b> dossier temporaire introuvable.");
define ("ERR_CANTWRITE", "<b>Erreur:</b> impossible d'écrire le fichier dans le 
dossier temporaire.");
define ("CANT_CHANGEDIR", "<b>Erreur:</b> impossible d'entrer dans le dossier ")
;
define ("CANT_CREATEDIR", "<b>Erreur:</b> impossible de créer le dossier demandé
.");
define ("SSL_NOTINSTALLED", "<b>Erreur:</b> l'ouverture sécurisée SSL n'est pas 
disponible.");
define ("CANT_DELETEFILE", "<b>Erreur:</b> impossible de supprimer le fichier sp
écifié.");
define ("INVALID_FILE", "<b>Erreur:</b> fichier spécifié invalide ou introuvable
.");
define ("NO_DELETE", "<b>Erreur:</b> fichier non supprimé. Il se peut qu'aucun d
ossier n'ait été spécifié.");
define ("CANT_CHMOD", "<b>Erreur:</b> impossible de changer le chmod du dossier/
fichier spécifié.");
define ("CANT_RENAME", "<b>Erreur:</b> impossible de changer le nom du dossier s
pécifié.");
define ("CANT_LIST", "<b>Erreur:</b> impossible de lister le répertoire.");
 
class FileManager {
   var $envars;
   var $openftp;
   var $file_destination = '.';
   var $force;
 
  /***************************************************************
*********/
  /* Function d'enregistrement des variables
  /* setftpvars(urlserver, accessname, acesspass [, mode])
  /*  - urlserver = url du ftp sans www et sans slasch (ftpperso.free.fr)
  /*  - accessname = pseudo de connection
  /*  - accessspass = mot de passe de connection
  /*  - mode = Tranfert des fichiers: ASCII ou BINARY
  /***************************************************************
********/
   function setftpvars($server, $username, $userpass, $mode="ASCII") {
      $this->envars['ftp_server'] = $server;
      $this->envars['ftp_pass'] = $userpass;
      $this->envars['ftp_login'] = $username;
      $this->envars['ftp_transfert'] = constant('FTP_'.$mode);
   }
  /***************************************************************
*********/
  /* Se place dans un dossier spécifique
  /* setftpdir(dir, force)
  /*  - dir = dossier dans lequel charger les fichiers
  /*  - force = crée le dossier s'il est inexistant
  /***************************************************************
********/
   function setftpdir($dir, $force=false) {
      $this->file_destination = $dir;
      $this->force = $force;
   }
  /***************************************************************
*********/
  /* Créé un dossier
  /* createdir(dir [, chmod] [, dest])
  /*  - dir = dossier à crée
  /*  - chmod = droit d'accès au dossier. Par défaut 0777
  /*  - dest = true pour créer sur un serveur distant
  /***************************************************************
********/
   function createdir($dir, $chmod=0777, $dest=false) {
      if (!is_dir($dir) && $dest == false) {
         @mkdir($dir, $chmod) or die (CANT_CREATDIR);
      }
     elseif (!is_dir($dir) && $dest != false) {
         @ftp_mkdir($this->openftp, $dir) or die (CANT_CREATDIR);
      }
   }
  /***************************************************************
*********/
  /* Function de connection à un serveur distant
  /* opensslftp(openmode)
  /*  - openmode = true pour une ouverture sécurisée SSL
  /***************************************************************
********/   
   function openftp($sslopen=false) {
      if ($sslopen == true) {
         if (!function_exists("ftp_ssl_connect")) {
            echo SSL_NOTINSTALLED;
            exit;
         }
         if (!$this->openftp = @ftp_ssl_connect($this->envars['ftp_server'])) {
            echo FTP_CONNECTSSL_FAILED;
            exit;
         }
      } else {
         if (!$this->openftp = @ftp_connect($this->envars['ftp_server'])) {
            echo FTP_CONNECT_FAILED;
            exit;
         }
      }
      @ftp_login($this->openftp, $this->envars['ftp_login'], $this->envars['ftp_
pass']) or die (LOGIN_FAILED);
   }
  /***************************************************************
*********/
  /* Charge les fichiers issus d'un formulaire
  /* uploadfiles(input, destination)
  /*  - input = nom du champ de type file. Il peut être un tableau.
  /*  - destination = true pour les charger sur un serveur distant
  /***************************************************************
********/     
   function uploadfiles($inputname="", $specialftp="") {
      if (!empty($_FILES[$inputname])) {
         foreach($_FILES[$inputname]['name'] As $key => $file) {
            if ($file != '') {
               $lastfile = ' (Fichier concerné: <b>'.htmlspecialchars($file).'</
b>)<br>';
               switch($_FILES[$inputname]['error'][$key]) {
                  case 1:
                     echo ERR_FILESIZEINI.$lastfile;
                     exit;
              case 2:
                    echo ERR_FILESIZE.$lastfile;
                    exit;
                  case 3:
                     echo ERR_PARTIALDL.$lastfile;
                     exit;
                  case 4:
                     echo ERR_NOFILEDL.$lastfile;
                     exit;
                  case 6:
                     echo ERR_NOFOLDER.$lastfile;
                     exit;
                  case 7:
                     echo ERR_CANTWRITE.$lastfile;
                     exit;
                  default: break;
               }
               $filename = basename($_FILES[$inputname]['name'][$key]);
               if (empty($specialftp)) {
                  if ($this->force == true) $this->createdir($this->file_destina
tion);
                  if (!$is_moved = @move_uploaded_file($_FILES[$inputname]['tmp_
name'][$key], $this->file_destination.'/'.$filename)) {
                     echo NO_FILE_UPLOADED.$lastfile;
                  }
               } else {
                  $fp = fopen($_FILES[$inputname]['tmp_name'][$key], 'r');
                  if ($this->force == true) $this->createdir($this->file_destina
tion, 0777, true);
                  @ftp_chdir($this->openftp, $this->file_destination) or die(CAN
T_CHANGEDIR.$this->file_destination);
                  if (!$is_moved = @ftp_fput($this->openftp, $filename, $fp, $th
is->envars['ftp_transfert'])) {
                     echo NO_FILE_UPLOADED.$lastfile;
                  }
                  else {
                     fclose($fp);
                  }
               }
            }
         }
      }
   }
  /***************************************************************
*********/
  /* Supprime un fichier ou des fichiers
  /* deletetfile(file [, destination]])
  /*  - file = fichier à supprimer. Pour plusieurs fichiers metter un tableau
  /*    Ce fichier sera supprimé du dossier setftpdir() si le dossier n'est pas 
spécifié
  /*    dans un tableau:
  /*    => array('file1.txt' => 'dir/dir', 'file2.exe' => '../dir2', 'file3.html
')
  /*  - destination = true pour les supprimer d'un serveur distant
  /***************************************************************
********/
   function deletefile($file, $specialftp="") {
      $lastfile = (!is_array($file)) ? ' (Fichier concerné: <b>'.htmlspecialchar
s($file).'</b>)<br>' : ' (Tableau de fichier)';
  if (!is_array($file) && is_file($this->file_destination.'/'.$file)) {
     if (empty($specialftp)) {
        return @unlink($this->file_destination.'/'.$file) or die (CANT_DELETEFIL
E.$lastfile);
     } else {
        return @ftp_delete($this->openftp, $this->file_destination.'/'.$file) or
 die (CANT_DELETEFILE.$lastfile);
     }
  }
  elseif (is_array($file)) {
     foreach($file as $dir => $to_delete) {
        $lastfile = ' (Fichier concerné: <b>'.htmlspecialchars($to_delete).'</b>
)<br>';
        $dir = (is_numeric($dir)) ? $this->file_destination : $dir;
        if (is_file($dir.'/'.$to_delete)) {
           if (empty($specialftp)) {
              @unlink($dir.'/'.$to_delete) or die (CANT_DELETEFILE.$lastfile);
           } else {
              @ftp_delete($this->openftp, $dir.'/'.$to_delete) or die (CANT_DELE
TEFILE.$lastfile);
           }
        } else {
           echo INVALID_FILE.$lastfile;
        }
     }
  }
  else {
     echo NO_DELETE.$lastfile;
  }
   }
  /***************************************************************
*********/
  /* Change le Chmod d'un dossier ou d'un fichier
  /* changechmoddir(dir, chmod, destination)
  /*  - dir = dossier dont le chmod est à modifier
  /*  - chmod = droit d'accès au dossier.
  /*  - destination = true si le fichier ou dossier est sur un serveur distant
  /***************************************************************
********/
   function changechmod($filedir, $chmod, $specialftp="") {
      if (empty($specialftp)) {
         @chmod($filedir, $chmod) or die (CANT_CHMOD);
      }
      else {
         @ftp_chmod($this->openftp, $filedir, $chmod) or die (CANT_CHMOD);
      }
   }
  /***************************************************************
*********/
  /* Renomme un dossier/fichier
  /* changenamedir(dirfile, newname, destination)
  /*  - dirfile = dossier/fichier dont le nm est à modifier
  /*  - newname = nouveau nom
  /*  - destination = true si le fichier ou dossier est sur un serveur distant
  /***************************************************************
********/
   function changename($dirfile, $name, $specialftp="") {
      if (empty($specialftp)) {
         @rename($dirfile, $name) or die (CANT_RENAME);
      }
      else {
         @ftp_rename($this->openftp, $dirfile, $name) or die (CANT_RENAME);
      }
   }
  /***************************************************************
*********/
  /* Liste un répertoire
  /* listrepertory(repertory, destination)
  /*  - destination = true si le dossier est sur un serveur distant
  /***************************************************************
********/
   function listrepertory($repertory, $specialftp="") {
      if (empty($specialftp)) {
         if ($handle = @opendir($repertory)) {
            while (false !== ($file = @readdir($handle))) {
               if ($file != "." && $file != "..") {
                  if (is_file($file)) $prefix = ' (fichier)';
                  if (is_dir($file)) $prefix = ' (dossier)';
                  echo '- '.$file.$prefix.'<br>';
               }
           }
         closedir($handle);
         } else echo CANT_LIST;
      }
      else {
         $contents = ftp_nlist($this->openftp, '.');
         var_dump($contents);
         foreach ($contents AS $file) {
            if (is_file($file)) $prefix = 'Type: fichier, nom: ';
            if (is_dir($file)) $prefix = 'Type: dossier, nom: ';
            echo $prefix.$file.'<br>';
         }
      }
   }
}
Anduriel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 20h15   #27
Swoög
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 050
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : janvier 2003
Messages : 6 050
Points : 8 221
Points : 8 221
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Parsage d'un fichier csv (séparateur paramétrable)

possibilité de condiérer la première ligne comme en-tête...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function parse_csv($file, $head = false, $sep = ';')
{
   $content = file($file);
   $headers = NULL;
   if($head)
   {
      $headers = array_shift($content);
      $headers = explode($sep, $headers);
   }
   foreach($content as $k => $v)
   {
        $content[$k] = explode($sep, $v);
        if($head) foreach($content[$k] as $num_col => $value)
            $content[$k][$headers[$num_col]] = $value;
   }
   return $content;
}
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 21h15   #28
Swoög
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 050
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : janvier 2003
Messages : 6 050
Points : 8 221
Points : 8 221
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Création d'un chemin jusqu'à un répertoire (crée un répertoire et éventuellement ses dossiers parents) pour ceux qui ont pas PHP5
Code :
1
2
3
4
5
6
7
8
9
10
11
function recur_mkdir($path)
{
   $path = preg_split('<([/\\])>', $path, -1, PREG_SPLIT_DELIM_CAPTURE)
   $curr = '';
   for($i = 0; $i < count($path); $i += 2)
   {
      $curr .= $path[$i].$path[$i+1];
      if(!is_dir($curr) && !mkdir($curr)) return false;
   }
   return true;
}
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2006, 00h14   #29
gtraxx
Membre expérimenté
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 31
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 515
Points : 515
bon vu que je débute en php je ne peux que poster un simple code que j'avais poster sur mon site .

tester si une DTD est valide via un script php (utilse pour le locale)

Code :
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
<html>
 
<head>
 
//la declaration
 
<meta http-equiv="Content-Type" content="text/html; charset="iso-8859-1">
 
<title>Validation DTD d'un document XML en PHP</title> </head>
 
<?php
 
//le tableau qui contiendra les erreurs
 
$erreurs = array();
 
//Pour la lecture et l'interpretation du fichier xml
 
//remplacer "http://localhost/xml/......." par le nom de votre fichier XML a valider.
 
//Attention : saisissez le chemin complet d'accès au fichier sur
 
//le serveur web pour que cela fonctionne
 
$parseur_dom = xmldocfile("http://localhost/xml/.......",DOMXML_LOAD_VALIDATING, $erreurs);
 
//Le document est il bien formé?
 
if(!is_objet($parseur_dom))
 
 {
   echo("Le document XML n'est pas bien formé!<br>");   die(print_r($error));}
 
//le document est il valide selon sa DTD?
 
if(!domxml_doc_validate($parseur_dom, $erreurs))
 
{
 
 echo"Le document n'est pas valide<br>"; print_r($erreurs);}
 
else
 
{
 
    echo"Le document est bien formé et valide!<br>";}
 
?>
 
<body>
 
</body>
 
</html>
Par contre je cherche la meilleur façon de mettre en oeuvre un fil rss via un script php .
Genre ce script qui me laisse perplex .(il n'est pas de moi):
Code :
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
<?php 
 
# Configuration 
 
$fichier_xml = "monfichier.xml";
$nombre_limite = 20;
 
# Affichage du Flux 
$file = fopen($fichier_xml,"r"); 
if ($file) { 
while (!feof($file))$raw .= fread($file,32000); 
fclose( $file ); 
 
if(eregi("<item>(.*)</item>",$raw,$rawitems)){ 
$items = explode("<item>", $rawitems[0]); 
$nb = count($items); 
$maximum = (($nb-1) < $nombre_limite) ? ($nb-1) : $nombre_limite; 
 
for ($i=0;$i<$maximum;$i++) { 
eregi("<title>(.*)</title>",$items[$i+1], $title); 
eregi("<link>(.*)</link>",$items[$i+1], $link); 
echo "- <a href=\"".$link[1]."\" target=\"_blank\">".$title[1]."</a><br />"; 
} 
} 
} 
?>
si quelqu'un a s une idée ???
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 01h54   #30
Kioob
Membre chevronné
 
Avatar de Kioob
 
Olivier Bonvalet
Inscription : septembre 2004
Messages : 550
Détails du profil
Informations personnelles :
Nom : Olivier Bonvalet
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : septembre 2004
Messages : 550
Points : 723
Points : 723
Envoyer un message via MSN à Kioob
Donc, voici une petite classe qui "limite" les possibilités de vol de session. J'utilise cette classe au sein d'un framework, et ait donc été obligé d'enlever pas mal de trucs afin de la rendre portable, j'éspère que je n'en ai pas trop enlevé

Deux mécanismes sont utilisés :
1) vérification de la durée de la session
2) controle d'un ID transmis en même temps que l'ID de session, mais qui change à chaque hit. Pour les accès concurrents, un timeout de 10 secondes est utilisé.

Je ne vais pas trop détailler le code, qui n'est d'ailleurs que très peu commenté... mais bon... utilisez le si ça peu vous aider, pour ma part je n'assure aucun support dessus.

Ah je précise : dans cette version l'ID est changé au moment du "session_close()". Et il faut qu'il soit appelé avant que du contenu soit envoyé. Cela ne devrait pas poser de problème sur un site "bien construit"... mais ce n'est pas toujours le cas
Dernier point : la classe est à utilisée comme singleton... débrouilez vous comme vous voulez, mais ne l'instanciez pas deux fois hein...


Donc le mode d'emploi :
Code :
1
2
3
// ouverture de la session
$session = new k_session();
$session->enabled();
puis :
Code :
1
2
// fermeture de la session
$session->close();
-----------------------------------------

Code :
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
<?php
class k_session
{
    var $is_new = true;
    var $enabled = false;
 
    var $concurrency_timeout = 10 ;
    var $history_trigger_nb = 5 ;
    var $history_expire = 60 ;
 
    function k_session()
    {
        if( !empty( $_COOKIE[ session_name() ] ) )
        {
            $this->start();
        }
    }
 
    function start()
    {
        if( $this->enabled === true ) return;
        $this->enabled = true;
 
        $random_id = @ $_COOKIE[ 'K_SID' ];
        $start_time = time();
 
        session_start();
 
        $valid = true;
 
        // Expiration checking
        if( $valid and isset( $_SESSION['_k_time'] ) )
        {
            if( $_SESSION['_k_time'] + ini_get( 'session.gc_maxlifetime' ) < time() )
            {
                $valid = false;
            }
        }
 
        // Random ID checking
        if( $valid and isset( $_SESSION[ '_k_random_id' ] ) )
        {
            if( $random_id === $_SESSION[ '_k_random_id' ][ 'current' ] )
            {
                // Ok.
 
            }
            elseif( $time = @ $_SESSION[ '_k_random_id' ][ 'old' ][ $random_id ] )
            {
                if( $time < $start_time )
                {
                    $valid = false;
                }
            }
            else
            {
                $valid = false;
            }
 
            // Clean up the history
            if( count( $_SESSION[ '_k_random_id' ][ 'old' ] ) >= $this->history_trigger_nb )
            {
                foreach( $_SESSION[ '_k_random_id' ][ 'old' ] as $idx => $time )
                {
                    if( $time + $this->history_expire < $start_time )
                    {
                        unset( $_SESSION[ '_k_random_id' ][ 'old' ][ $idx ] );
                    }
                }
            }
        }
 
        // Is not valid ?
        if( ! $valid )
        {
            $_COOKIE[ 'K_SID' ] = NULL;
            $_SESSION = array();
            session_destroy();
            session_id( md5( uniqid( mt_rand(), true ) ) );
            session_start();
        }
 
        // Set some vars
        $this->is_new = ( count( $_SESSION ) > 0 );
        $_SESSION['_k_time'] = time();
    }
 
    function destroy()
    {
        if( $this->enabled !== true ) return;
        $this->enabled = false;
        session_destroy();
 
        setcookie( 'K_SID', NULL, NULL, '/', ini_get( 'session.cookie_domain' ) );
        setcookie( session_name(), '', NULL, '/', ini_get( 'session.cookie_domain' ) );
    }
 
    function change_id()
    {
        if( $this->enabled !== true ) return;
 
        static $already_done = false;
        if( $already_done !== false ) return;
        $already_done = true;
 
        if( ! isset( $_SESSION[ '_k_random_id' ] ) )
            $_SESSION[ '_k_random_id' ] = array( 'current' => NULL, 'old' => array() );
 
        // Change the ID
 
        // Set to keep the current ID for some seconds
        $old_id = $_SESSION[ '_k_random_id' ][ 'current' ];
        if( $old_id !== NULL )
        {
            $_SESSION[ '_k_random_id' ][ 'old' ][ $old_id ] = time() + $this->concurrency_timeout ;
        }
 
        // Set the new ID
        $new_id = md5( uniqid( mt_rand(), true ) );
        $_SESSION[ '_k_random_id' ][ 'current' ] = $new_id;
 
        setcookie( 'K_SID', $new_id, NULL, '/', ini_get( 'session.cookie_domain' ) );
    }
 
    function close()
    {
        if( $this->enabled !== true ) return;
        $this->enabled = false;
 
        $this->change_id();
        session_write_close();
    }
}
?>
__________________
Google is watching you !
Kioob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2006, 13h25   #31
CrazyCat
Membre régulier
 
Inscription : juin 2004
Messages : 94
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 94
Points : 74
Points : 74
Par défaut Génération d'un mot de passe

La petite fonction ci-dessous le réalise mais offre quelques options qui ne sont pas dépourvues d'intérêt:
* choix de la longueur du mot de passe (8 par défaut)
* choix du type de lettres (majuscules ou minuscules)
* Possibilité d'épeler le mot de passe (désactivé par défaut)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
function mkpassword($len=8, $min=true, $spell=false) {
   $ok_chars = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "Alpha", "Bravo", "Charlie", "Delta", "Echo", "Foxtrot", "Golf", "Hotel", "India", "Juliet", "Kilo", "Lima", "Mike", "November", "Oscar", "Papa", "Quebec", "Romeo", "Sierra", "Tango", "Uniform", "Victor", "Whisky", "X-ray", "Yankee", "Zulu");
   // Le tableau des caractères utilise le code phonétique international
   $password["string"] = "";
   $password["litteral"] = "";
   for ($i=0; $i<$len; $i  ) {
      $val = rand(0,count($ok_chars) - 1);
      $password["string"] .= $ok_chars[$val]{0} ;
      $password["litteral"] .= $ok_chars[$val]." ";
   }
   if ($min == true)
      $password["string"] = strtolower($password["string"]);
   $password["litteral"] = trim($password["litteral"]);
   if ($spell == true) {
      return $password;
   } else {
      return $password["string"];
   }
}
?>
La fonction peut être appelée de quatres manières différentes et renverra deux types de données:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
/* Cas 1: appel simple */
$mypass = mkpassword();
// Renvoit une chaîne de 8 caractères, chiffres et lettres minuscules
 
/* Cas 2: choix de la longueur du mot de passe */
$mypass = mkpassword(16);
// renvoit une chaîne de 16 caractères, chiffres et lettres minuscules
 
/* Cas 3: lettres majuscules */
// *** Atention *** Il faut obligatoirement donner une longueur
$mypass = mkpassword(8, false);
// renvoit une chaîne de 8 caractères, chiffres et lettres majuscules
 
/* Cas 4: Mot de passe épelé */
$mypass = mkpassword(8, true, true);
// renvoit un tableau contenant le mot de passe et son épelation
echo $mypass["string"]." => ".$mypass["litteral"];
CrazyCat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/06/2006, 14h46   #32
NiHiL
Membre régulier
 
Avatar de NiHiL
 
Inscription : juin 2006
Messages : 102
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 102
Points : 88
Points : 88
Par défaut [SCRIPT] Clide, gestion de fichiers

Bonjour,

Je viens vous présenter un script que j'ai créé.
Il s'agit d'un script en PHP qui remplace les pages (moches) générées par Apache dans une arborescence web destinée au stockage de fichiers, par une interface graphique beaucoup plus agréable et personnalisable.

Fonction et caractéristiques :

- Skin une arborescence http dédié au stockage de fichiers
- Modifications & Intégration très simple du design
- Player intégré pour les vidéos, les flashs, les flv, les mp3 les fichiers éditables et les images
- Gestion des Exifs par le player
- Affichage et Highlight de la sources des fichiers PHP dans le player
- Module d'administration pour uploader/supprimer des fichiers et créer des dossiers
- Possibilité de créer des comptes pour uploader
- Possibilité de ne pas afficher des fichiers ou des répertoires
- URLs semi réécrite pour une meilleure visualisation et un meilleur référencement sur les moteurs de recherche
- Création d'avatar dynamique automatique via l'administration
- xHTML 1.1 & CSS valid

Démo
Télécharger Clide

Vos remarques sont les bienvenues
NiHiL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2006, 16h30   #33
SnakemaN
Membre Expert
 
Avatar de SnakemaN
 
Bidouille-tout Android
Inscription : juillet 2006
Messages : 871
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Bidouille-tout Android

Informations forums :
Inscription : juillet 2006
Messages : 871
Points : 1 059
Points : 1 059
CALCUL DE DUREE EN PHP

Voici le code d'un petit truc que j'avais bricolé car je galérais à calculer les dates...
C'est un formulaire permettant la saisie de 2 Heures puis calcul la différence entre les deux quelques soit la difference entre les heures dans le temps

Sur recommandation de Mr Kerod voici :

[edit] : maj cause oubli de gestion de variable super-globale
Citation:
<?php
/************************************************************************************
* COde PHP montrant un peu la gestion des Dates en Heures en php *
* notament le calcul entre deux heures indifferement dans le temps, *
* l'heure 1 peut etre plus tôt ou plus tard que l'heure 2 et inversement, le script *
* fera le calcul suivant un journée de 24h *
* Notes : Le format utilisé est le format 24h avec hh:mm:ss *
* mais on peut le changer facilement ;p *
* *
*@author =)C!S(=_SnaKemaN *
*@version 1.0 *
*@version 1.2
+ Contrôle des variable super-globale (php 4.3.10 oblige...) *
************************************************************************************/
//Controle des valeurs, c'est certes aberrant mais c'est un exemple apres vous gerez
//comme vous voulez
if(isset($_POST['heure1']))
$my_strh1=$_POST['heure1'];
else
$_POST['heure1'] = "00-00-00";

if(isset(
$_POST['heure2']))
$my_strh2=$_POST['heure2'];
else
$_POST['heure2'] = "00-00-00";

if(!isset(
$h3))
$h3 = 0;

echo
"<TABLE cellpadding=5 cellspacing=0 align=center border=1>";
echo
"<TR>";
echo
"<TD>";
//note Changer le "action" pour avoir le nom de votre page ou se fera le traitement
echo "<FORM method=\"POST\" name=\"mf\" action=\"./calcul_date.php\">";
echo
"<TABLE cellpadding=5 cellspacing=0 align=center border=1>";
echo
"<TR>";
echo
"<TD><strong>Heure 1:</strong></TD>";
//Une heure est deja présaisie pour faciliter le test
echo "<TD><INPUT type\"text\" name=\"heure1\" value=\"07:00:00\"></TD>";
echo
"</TR>";
echo
"<TR>";
echo
"<TD><strong>Heure 2 :</strong></TD>";
//Une heure est deja présaisie pour faciliter le test
echo "<TD><INPUT type\"text\" name=\"heure2\" value=\"17:00:00\"></TD>";
echo
"</TR>";
echo
"<TR>";
echo
"<TD colspan=2 align=center>";
echo
"<INPUT type=\"submit\" name=\"go\" value=\"Valider\">";
echo
"</TD>";
echo
"</TR>";
echo
"</TABLE>";
echo
"</FORM>";
echo
"</TD>";
echo
"<TD>";
echo
"<strong>Date et heure courante :</strong><br>";
echo
date('d/m/Y @ H:i:s',time());
echo
"<br>";
echo
"</TD>";
echo
"<TD>";
$my_strh1=$_POST['heure1'];
$my_strh2=$_POST['heure2'];
//Conversion des heures en TimeStamp
$h1=strtotime($my_strh1);
$h2=strtotime($my_strh2);
//Si la deuxieme heure est bien plus tard que la premiere
if($h2 > $h1)
{
$h3=($h2-$h1);
}
//Si c'est la premiere heure qui est plus tard que la deuxieme
if($h1 > $h2)
{
$h3=86400-($h1-$h2)-3600;
}
echo
"<strong>Heure 1 :</strong>".$my_strh1."<br>";
@
$date1 = getdate($h1);
//Controle du format de l'heure h 00 < hh < 24 ; 00 < mm < 59 ; 00 < ss < 59
if($h1 == -1 ){
echo
"Heure_1 incorrecte ! <br>";
}else{
echo
"Heure_1 OK <br>";

echo
"<strong>Heure 2 :</strong>".$my_strh2."<br>";
//Controle du format de l'heure h 00 < hh < 24 ; 00 < mm < 59 ; 00 < ss < 59
@$date2 = getdate($h2);
if(
$h2 == -1 ){
echo
"Heure_2 incorrecte ! <br>";
}else{
echo
"Heure_2 OK <br>";

echo
"<strong>Valeur de h1 :</strong>".$h1."<br>";
echo
"<strong>Valeur de h2 :</strong>".$h2."<br>";
$h3=$h3-3600;//Retrait d'une heure de decalage o_O
echo "<strong>Valeur de h3 :</strong>".$h3."<br>";
echo
"<strong>Decalage heure :</strong>";
//reconversion du timestamp en heure préformatée (ici H M)
echo strftime("%H:%M",$h3);
}
//Fin if else heure 2
}//Fin if else heure 1
echo "<br>";
echo
"</TD>";
//Et vouala ^_^
echo "</TR>";
echo
"</TABLE>";
?>
Colorez votre code PHP sur les forums grâce à Developpez.comBonne journée

SKN
SnakemaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2006, 17h27   #34
guitou12
Membre Expert
 
Avatar de guitou12
 
Homme Guillaume
Inscription : juillet 2006
Messages : 810
Détails du profil
Informations personnelles :
Nom : Homme Guillaume
Âge : 30
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juillet 2006
Messages : 810
Points : 1 005
Points : 1 005
Envoyer un message via MSN à guitou12
Une petite fonction sans prétentions mais qui me sert grandement

Récupération rapide des variables de formulaire/sessions/Url/Cookies

Code :
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
/********************
      RECUP VAR
*********************/
/** 
* Récupère les vars d'url, de session suivant les paramètres passés
* get (resp. post) convertit en majuscules les valeurs alors que get_lower (resp.post_lower) recupere la valeur brute
* @param $param Le type de récupération (get / post / session etc)
* @param $nom_var Le nom de la variable à récupérer
* @param $defaut_val La valeur par défaut de retour si la variable n'est pas définie
* @return La valeur de la variable
*/
function recup_var($param,$nom_var,$defaut_val)
{
    switch($param)
    {
        case 'get':
            if (isset ($_GET[$nom_var])) $res=$_GET[$nom_var]; else $res=$defaut_val; break;
        case 'post':
            if (isset ($_POST[$nom_var])) $res=$_POST[$nom_var]; else $res=$defaut_val; break;
        case 'session':
            if (isset ($_SESSION[$nom_var])) $res=$_SESSION[$nom_var]; else $res=$defaut_val; break;
               case 'cookie':
            if (isset ($_COOKIE[$nom_var])) $res=$_COOKIE[$nom_var]; else $res=$defaut_val; break;
    }
    return $res;
}
guitou12 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2006, 20h47   #35
Are-no
Membre du Club
 
Inscription : juillet 2006
Messages : 145
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : juillet 2006
Messages : 145
Points : 42
Points : 42
Avoir la date en Français

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
// Avoir la date en Français
// <a href="mailto:are-no@emiloo.com">are-no@emiloo.com</a>
// Ca marche comme la fonction date()
 
function date_fr($format){
if (func_num_args()=="2"):$horodatage=func_get_arg(1);else:$horodatage=time();endif;
$date_fr = date($format, $horodatage);
$traduction = array( 
"Monday" => "Lundi", "Tuesday" => "Mardi", "Wednesday" => "Mercredi", "Thursday" => "Jeudi", "Friday" => "Vendredi", "Saturday" => "Samedi", "Sunday" => "Dimanche",
"Mon" => "Lun", "Tue" => "Mar", "Wed" => "Mer", "Thu" => "Jeu", "Fri" => "Ven", "Sat" => "Sam", "Sun" => "Dim",
"January" => "janvier", "February" => "fevrier", "March" => "mars", "April" => "avril", "May" => "mai", "June" => "juin", "July" => "juillet", "August" => "août", "September" => "septembre", "October" => "octobre", "November" => "novembre", "December" => "decembre",
"Jan" => "jan", "Feb" => "fev", "Mar" => "mar", "Apr" => "avr", "May" => "mai", "Jun" => "jui", "Jul" => "juil", "Aug" => "aoû", "Sep" => "sep", "Oct" => "oct", "Nov" => "nov", "Dec" => "dec"
);
$date_fr = strtr($date_fr , $traduction); 
return($date_fr);
}
Are-no est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 11h03   #36
berceker united
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 3 030
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 3 030
Points : 3 991
Points : 3 991
Comment envoyer plusieurs pièce jointe dans un mail ?
Généralement il y a des tutoriaux pour un fichier mais plus c'est assez rare. Donc je me suis un peut pris la tête dessus mais j'ai finit par y arriver. Voici le code.
Il faut créer un répertoire "tmpimg"
1 - Upload de tous les fichiers
2 - Contrôle les extensions.
3 - Construction de l'entête pour le mail.
4 - Envoy du mail
5 - Suppresion des fichiers.

Code :
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
 
//PREMIER FICHIER.
<? $nbFile = 3; ?>
<html>
<body>
<form action="mail.php" method="POST" enctype="multipart/form-data" name="formulaire">
   <br><br>
   <table style="border:1px solid #000000" align="center">
     <tr>
       <td colspan="2" class="en-tete">Envoyer vos informations concernant le produit</td>
     </tr>
     <tr>
       <td colspan="2">
         <textarea name="message"></textarea>
       </td>
     </tr>
<? for($i=0;$i<$nbFile;$i++){ ?>
     <tr>
       <td>Fichier image <? echo $i+1; ?> :</td>
       <td><input type="file" name="fichier<? echo $i; ?>" value="">
     </tr>
<? } ?>
     <tr>
       <td align="center" colspan="2"><input type="submit" name="action" value="Envoyer"></td>
     </tr>
   </table>
   <input type="hidden" name="nbfile" value="<? echo $nbFile; ?>">
</form>
</body>
</html>
 
//FICHIER MAIL.
//$filename : chemin du fichier.
function get_extension($filename){
   $parts = explode('.',$filename);
   $last = count($parts) - 1;
   $ext = $parts[$last];
   return $ext;
}
 
 
if($_SERVER['REQUEST_METHOD'] == 'POST'){  //Détecte si c'est le post provient d'un POST.
  $isConform        = false;
  $attachment       = array();
  $arrNameFile      = array();
  $arrSource        = array();
  $arrExtension     = array();
  $arrType          = array();
  $arrInfoManu      = array();
  $arrExtensionCTRL = array('jpg','jpeg','bmp','psd','png','gif','tif','tiff');
  $boundary = "-----=".md5(uniqid(rand()));
  $extensionTemp    = '';
  $file             = '';
  $attachment       = '';
 
  $destinataire     = 'mail destinataire';
  $from             = 'votre mail';
  $reponse          = 'votre mail réponse';
  $sujet            = 'Votre sujet';
  $repertoire       = 'tmpimg'; //Répertoire ou ce trouverons les fichiers attachées.
  $fp               = null;
  $type             = 'text/plain';
  $message          = trim($_POST['message']);
 
  if($_POST['action'] == 'Envoyer'){
    for($i=0;$i<$_POST['nbfile'];$i++){ //Boucle sur le nombre de champs de type file
      $extensionTemp = get_extension($_FILES['fichier'.$i]['name']); // Récupère l'extension du fichier
      if($_FILES['fichier'.$i]['name'] != ''){  //Détecte si il y a eu un fichier d'envoyé.
        if(in_array(strtolower($extensionTemp), $arrExtensionCTRL)){ //Regarde si l'extension est valide.
          $arrNameFile[$i] = $_FILES['fichier'.$i]['name'];  //Nom du fichier
          $arrSource[$i]   = $_FILES['fichier'.$i]['tmp_name']; //Fichier temporaire :: contenu.
          $isConform = true;  //Il est donc conforme.
        }else{
          $isConform = false; //Il n'est pas conforme
        }
      }
    }
  }
 
  //Redirection dans le cas ou il y a une extension non valide.
  if($isConform == false){
    header('Location:page_erreur.php?erreur=true');
    exit();
  }
  //Boucle sur le nombre de fichier valide.
  for($i=0;$i<count($arrNameFile);$i++){
    copy($arrSource[$i], $repertoire.'/'.$arrNameFile[$i]); //Copie le fichier dans une zone précise du disque
    $arrExtension[$i] = strtolower(get_extension($arrNameFile[$i])); //récupère l'extension
    if($arrExtension[$i] == 'gif')                                     $arrType[$i] = 'image/gif';  //gif
    else if($arrExtension[$i] == 'bmp')                                $arrType[$i] = 'image/bmp';  //bmp
    else if($arrExtension[$i] == 'png')                                $arrType[$i] = 'image/png';  //png
    else if($arrExtension[$i] == 'psd')                                $arrType[$i] = 'image/psd';  //psd
    else if($arrExtension[$i] == 'jpg' || $arrExtension[$i] == 'jpeg') $arrType[$i] = 'image/jpeg'; //jpg
    else if($arrExtension[$i] == 'tif' || $arrExtension[$i] == 'tiff')  $arrType[$i] = 'image/tiff'; //tif
  }
 
//----------------------------------
// Construction de l'entête
//----------------------------------
 
  $header = "MIME-Version: 1.0\r\n";
  $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
  $header .= "\r\n";
 
  $msg = "Je vous informe que ceci est un message au format MIME 1.0.\r\n";
 
  $msg .= "--$boundary\r\n";
 
  $msg .= "Content-Type: $type; charset=\"iso-8859-1\"\r\n";
 
  $msg .= "Content-Transfer-Encoding:8bit\r\n";
  $msg .= "\r\n";
  $msg .="===================VOTRE MESSAGE===================\r\n\r\n";
  $msg .= $message;
  $msg .= "\r\n";
 
  for($i=0;$i<count($arrNameFile);$i++){
    $file = $repertoire.'/'.$arrNameFile[$i];
 
    $fp = fopen($file, 'rb');
    $attachment = fread($fp, filesize($file));
    fclose($fp);
    $attachment = chunk_split(base64_encode($attachment));
 
    $msg .= "--$boundary\r\n";
    $msg .= "Content-Type: ".$arrType[$i]."; \r";
    $msg .= "name=\"".$arrNameFile[$i]."\"\r\n";
    $msg .= "Content-Transfer-Encoding: base64\r\n";
    $msg .= "Content-Disposition: inline;\r\n filename=\"".$arrNameFile[$i]."\"\r\n";
    $msg .= $attachment . "\r\n";
 
    $msg .= "\r\n";
    $msg .= "\r\n\r\n";
    unlink($file);
  }
  $msg .= "--$boundary--\r\n";
  if(mail($destinataire, $sujet , $msg,"Reply-to: $reponse\r\nFrom: $from\r\n".$header)){
    echo "OK";
  }else{
    echo "ERREUR";
  }
}
?>
Je précise que le code date et qu'il est largement possible de le simplifier. Il semblerais qu'il ne fonctionne pas dans tous le cas de figure.

------------------------------------

Comment réaliser un diaporama d'image?

Code :
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
 
<?php
$arrFichier = array();
$i=0;
$directory='images/';
// Ouvre un dossier bien connu, et liste tous les fichiers
if (is_dir($directory)) {
  if($dh = opendir($directory)) {
    while (($file = readdir($dh)) !== false) {
     $extension = pathinfo($directory.$file);
      if($file!='..' && $file!='.' && strtolower($extension['extension'])=='jpg'){//N'affiche pas le . et ..
        $arrFichier[$i] = $file; //PLace les fichier dans un tableau
        $i++;
      }
    }
  }
  closedir($dh); //Il est vivement conseiller le repertoire pour toute autre opération sur le systeme de fichier.
}
 
//Initalisation.
if($_GET['index']!=''){
  $index = $_GET['index'];
}else{
  $index = 0;
}
 
//Affichage des liens précédent et suivant.
if($index > 0){ //N'affiche pas le boutton au premier
  echo '<input onClick="window.location=\''.$_SERVER['SCRIPT_NAME'].'?index='.($index-1).'\'" type="button" name="precedent" value="<<">';
}
 
echo '<img src="'.$directory.'/'.$arrFichier[$index].'">'; //Affichage de l'image
 
if($index < (count($arrFichier)-1)){ //N'affiche pas le boutton suivant lorsqu'il y a pas d'image apres
  echo '<input onClick="window.location=\''.$_SERVER['SCRIPT_NAME'].'?index='.($index+1).'\'" type="button" name="suivant" value=">>">';
}
?>
---------------------------------------------------------
Comment faire une pagination clés en main ?

Code :
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
 
<?php
//FONCTION
//fonction permettant de récupérer le nombre maximum d'image présente dans la table.
function nbElement(){
  $rs = null;
  $data = array();
  $rs = mysql_unbuffered_query("SELECT COUNT(idimage) FROM image");
  $data = mysql_fetch_row($rs);
  return $data[0];
}
 
 
// INITALISATION
$nbRec    = 10; // Nombre d'image qui s'affichera par page
$position = 0; //Position de lecteur sur le jeux d'enregistrement(param1).
$data     = array();
$image    = array();
$rs       = null;
$nbData   = 0;
$i        = 0;
if($HTTP_GET_VARS['position']!='') $position = $HTTP_GET_VARS['position'];
//Pas la peine d'exécuter x fois la même fonction je le fais passer en paramètre.
if($HTTP_GET_VARS['nbelement']!='')$nbElement = $HTTP_GET_VARS['nbelement'];
else $nbElement = nbElement();
 
//OPERATION SQL
$requette = "SELECT nom, width, height FROM image ORDER BY nom LIMIT ".$position.",".$nbRec;
$rs = mysql_unbuffered_query($requette,$rsConnexion);
while($data = mysql_fetch_row($rs)){
  $image[$i]['nom']   = $data[0];
  $image[$i]['width'] = $data[1];
  $image[$i][height]  = $data[2];
  $i++;
}
$nbData = $i //Récupère le nombre d'enregistrement.
mysql_free_result($rs);
unset($requette,$data,$i); //Pour taper un style! ;)
mysql_close($rsConnexion); //Nous avons plus besoin de connexion
?>
...html
<table>
  <tr>
    <td>
<? // Pour le bouton précédent 
if(($position-8)>=0){
echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?nbelement='.$nbElement.'&position='.($position+$nbRec)">Précédent</a> 
}else{ 
  echo '&nbsp;';
} 
?>
    </td>
    <td>&nbsp;</td>
    <td>
<? //Pour le bouton suivant 
  if(($position+$nbRec)<=$nbElement){ 
    echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?nbelement='.$nbElement.'&position='.($position+$nbRec)">Suivant</a> 
}else{ 
  echo '&nbsp;';
} 
?>  
    </td>
  </tr>
  <tr>
    <td>Nom</td>
    <td>Largeur</td>
    <td>Hauteur</td>
  </tr>
<? for($i=0;$i<$nbData;$i++){ ?>
  <tr>
    <td><img height="<? echo $image[$i]['height']; ?>" width="<? echo $image[$i]['width']; ?>" src="<? echo $image[$i]['nom']; ?>"></td>
    <td><? echo $image[$i]['width']; ?></td>
    <td><? echo $image[$i]['height']; ?></td>
  </tr>
<? } ?>
</table>
Pour ceux qui veulent des liens de type:
[1-10][11-20][21-30] ...
Code :
1
2
3
4
5
6
7
<?for($i=0;$i<ceil($nbElement/$nbRec);$i++) {
    $sup = ($i+1)*$nbRec;
    $inf = ($sup-$nbRec)+1;
    if($position == ($i*$nbRec)) echo '<a href="#" style="color:#FF0000;">['.$inf.' - '.$sup.']</a>'.chr(13);
    else echo '<a href="'.$_SERVER['SCRIPT_NAME'].'?nbelement='.$nbElement.'&position='.($i*$nbRec).'">['.$inf.' - '.$sup.']</a>'.chr(13);
}
?>
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2006, 23h45   #37
ePoX
Membre Expert
 
Inscription : juillet 2004
Messages : 1 028
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 028
Points : 1 040
Points : 1 040
Dans le cadre d'un développement j'avais besoin de créer un système de *plug in*.
Pour cela j'avais besoin de créer dans mes classes des points d'entrées utilisable par des classes externes que je connais pas encore.

Donc le but est de faire cummuniquer une classe A avec une classe B, sans que A ne connaisse B.

Pour cela j'ai fait une petite classe d'evenement. C'est surement améliorable, les vieux de la vieille me feront signe
Mais bon sa remplit le but fixer dans le paragraphe du dessus.

Code :
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
 
class Evenement
{
    //////////////////////////////////////////////////
    //    propriétés
    //////////////////////////////////////////////////
    protected $p_abonnes;
 
 
    public function __construct()
    {
        $this->p_abonnes = new ArrayObject();
    }
 
    public function attacherUnAbonne( $classe , $methode )
    {
        $this->p_abonnes[] = new Evenement_Abonne($classe , $methode);
    }
 
    public function detacherUnAbonne( $classe , $methode )
    {
        foreach( $this->p_abonnes as $cle => $abonne )
            if( $abonne->classe == $classe && $abonne->methode == $methode)
                unset($this->p_abonnes[$cle]);
    }
 
    public function declencher()
    {
        $args = func_get_args();
 
        foreach( $this->p_abonnes as $abonne )
            if( method_exists($abonne->classe, $abonne->methode ) )
                call_user_func_array(array($abonne->classe,$abonne->methode), &$args); 
    }
}
 
class Evenement_Abonne
{
    //////////////////////////////////////////////////
    //    propriétés
    //////////////////////////////////////////////////
    protected $p_classe;
    protected $p_methode;
 
    //////////////////////////////////////////////////
    //    
    //////////////////////////////////////////////////
    public function __construct( $classe , $methode )
    {
        $this->p_classe     = $classe;
        $this->p_methode     = $methode;
    }
 
    //////////////////////////////////////////////////
    //
    //////////////////////////////////////////////////
    public function __get( $prop )
    {
        switch( $prop )
        {
            case "classe":
                return $this->p_classe;
            break;
            case "methode":
                return $this->p_methode;
            break;
        }
 
        throw new Exception("Propriété ".$prop." inconnue dans la classe ".(__CLASS__)."");
    }
 
    //////////////////////////////////////////////////
    //
    //////////////////////////////////////////////////
    public function __set( $prop , $value )
    {
        switch( $prop )
        {
            case "classe":
                $this->p_classe = $value;
            break;
            case "methode":
                $this->p_methode = $value;
            break;
            default:
                throw new Exception("Propriété ".$prop." inconnue dans la classe ".(__CLASS__)."");
            break;
        }
    }
}
Exemple d'usage :
Code :
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
 
class Papa
{
    public $lorsDeLappel; // levenement à declencher
 
    public function __construct()
    {
        $this->lorsDeLappel = new Evenement();
    }
 
    public function faireLAppel()
    {
        $Objet = new stdClass();
        var_dump($Objet);
        $this->lorsDeLappel->declencher($Objet);
    }
}
 
class Enfant
{
    public $nom;
 
    public function repondrePresent( $Objet )
    {
        echo "<br /><strong>".$this->nom." à répondu</strong> : je suis ici.<br />";
        var_dump($Objet); // verification que l'objet reçu est bien envoyé par référence
    }
}
 
$Papa = new Papa();
for( $i=0; $i< 15; $i++)
{
    $Enfant = new Enfant();
    $Enfant->nom = $i;
    $Papa->lorsDeLappel->attacherUnAbonne( $Enfant , "repondrePresent" );
}
 
$Papa->faireLAppel();
Enfin sa reste qu'un callback amélioré hein. Rien d'exceptionnel c'est extremement rudimentaire.

bbye
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2006, 00h05   #38
paterson
Membre confirmé
 
Matthieu
Étudiant
Inscription : septembre 2004
Messages : 393
Détails du profil
Informations personnelles :
Nom : Matthieu
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2004
Messages : 393
Points : 295
Points : 295
Comment se créé un espace membre ( sans verification de l'addresse email)

conex.ini.php
Code :
1
2
3
4
<?php
mysql_connect('localhost','root','');
mysql_select_db(nombase);
?>
inscription.php
Code :
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
<?php
//Avez vous envoyer le formulaire 
if(isset($_POST['login']))
	{
	$login=$_POST["login"];
	$pass=$_POST["pass"];
	$pass2=$_POST["pass2"];
	$nom=$_POST["nom"];
	$nom=trim($nom);
	$login=trim($login);
	$pass=trim($pass);
	$pass2=trim($pass2);
	if($pass==$pass2)
		{
	$mail=$_POST["mail"];
	$clogin=strlen($login);
	$cpass=strlen($pass);
	$cnom=strlen($nom);
// on demande que le nom , login , et le passe fasse plus de 3 caractére 
	if($clogin>3&$cpass>3&$cnom>3)
		{
		$pass=md5($pass);
		$cpass=strlen($pass);
//et qu'il fasse moin de 50 ou 30
		if($clogin<30&$cpass<50&$cnom<30)
			{ 
			include("conex.ini.php");
			$sql="SELECT id_client
            FROM `client`
            WHERE login = '$login'
            LIMIT 0,1";
            $res = mysql_query($sql)or exit(mysql_error());
            if( mysql_fetch_array($res) == false)
				{
				//inscription de 1 personne dans la base de donnée
				$sql="INSERT INTO `client` (`login` , `pass` , `mail`,`nom` )
				VALUES ('$login', '$pass' , '$mail' , '$nom' )";
				mysql_query($sql);
				echo"<script>alert(\"Vous pouvez vous conecter en tant que $login\");";
				echo"window.location.replace(\"index.php?m=1\");\n";
				echo"</script>";
				}
			else
				{
				echo"<script>alert(\"se login est deja utilisé\");";
				echo"window.location.replace(\"./index.php\");\n";
				echo"</script>";
				}
			}
		else
			{
			echo"<script>alert(\"se login ou mot de passe est trop grand\");";
			echo"window.location.replace(\"./index.php\");\n";
			echo"</script>";
			}
 
		}
	else
		{
		echo"<script>alert(\"Login ou mot de passe trop petit\");";
		echo"window.location.replace(\"./index.php\");</script>";
		}
		}
	else
		{
		echo"<script>alert(\"Vous devez confirmer le mot de passe avec le méme mot..\");";
		echo"window.location.replace(\"./index.php\");</script>";
		}
	}
else
	{
	$page="./inscription.php";
	echo"<h2>Inscription</h2>";
	echo"<table>";
	echo"<form action=\"$page\" method=\"POST\">";
	echo"<tr><td>Login</td><td><input type=\"text\"name=\"login\"></td></tr>";
	echo"<tr><td>nom</td><td><input type=\"text\" name=\"nom\"></td></tr>";
	echo"<tr><td>Pass</td><td><input type=\"password\" name=\"pass\"></td></tr>";
	echo"<tr><td>Confirmation</td><td><input type=\"password\" name=\"pass2\"></td></tr>";
	echo"<tr><td>email</td><td><input type=\"text\" name=\"mail\"></td></tr>";
	echo"<tr><td></td><td><input type=\"submit\" value=\"s'inscrire\" style=\"width: 100%\"></form></td></tr></table>";
	}
?>
conection.php

Code :
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
<?php
if(isset($_POST['login']))
	{
	//destruction des données précédentes 
	session_start();
	session_destroy();
	//récuperation des valeurs
	$login=trim($_POST['login']);
	$pass=trim($_POST['pass']);
	$pass=md5("$pass");
	//requéte SQL pour avoir le n° de client de cette personne
	include("conex.ini.php");
	$sql="SELECT id_client
	FROM `client`
	WHERE login = '$login'AND pass = '$pass'";
	$res = mysql_query($sql)or exit(mysql_error());
	$client=0;
	$nbclient=0;
	while ($row = mysql_fetch_row($res))
		{
		for ($j = 0; $j < count($row); $j++)		
			{
			$client=$row[$j];
			$nbclient++;
			}
		}
	if($nbclient>1)
		{
		echo"<script>alert(\"il as plusieurs personnes sur se login\nvous devez contacter l'admin\");</script>";
		}	
	else
		{
		if($client=="0")
			{
			echo"<script>alert(\"Votre login ou pass est faux\");\n";
			echo"window.location.replace(\"./index.php\");\n";
			echo"</script>";
			}
		else
		{
			//Script de connection
			session_start();
			$_SESSION['client']=$client;
			echo"<script>\n";
			echo"window.location.replace(\"./p2.php\");\n";
			echo"</script>";
			}
		}
	}
else
	{
	//formulaire d'inscription
	$page="./conection.php";
	echo"<h2>Identification</h2>";
	echo"<table>";
	echo"<form action=\"$page\" method=\"POST\">";
	echo"<tr><td>Login</td><td><input type=\"text\"name=\"login\"></td></tr>";
	echo"<tr><td>Pass</td><td><input type=\"password\" name=\"pass\"></td></tr>";
	echo"<tr><td></td><td><input type=\"submit\" value=\"se conecter\" style=\"width: 100%\"></form></td></tr></table>";
	}	
?>
p2.php

Code :
1
2
3
4
5
6
<?
session_start();
if(isset($_SESSION['client']))
{//ta page
}
?>
J'ai créé sa moi méme , si sa vous semble interessant a l'ajouter , le remanier ( ps : envoyer un mp , que j'améliore chez moi aussi)

Je sait que $page=$_SERVER['PHP_SELF'];
aurait été mieu .....
Voila , je l'utilise et auccun probléme ( avec mes 3 visiteurs ...... )
paterson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2006, 17h02   #39
paterson
Membre confirmé
 
Matthieu
Étudiant
Inscription : septembre 2004
Messages : 393
Détails du profil
Informations personnelles :
Nom : Matthieu
Âge : 26
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2004
Messages : 393
Points : 295
Points : 295
Livre d'or a quelques problémes , donc , je l'ai corriger .

l'erreur <? je ne sait plus pourquoi faut plus l'utiliser .
et $valeur a la place de $_POST['valeur']
Et enfin , petit ajout de ma part , $mess=htmlspecialchars($mess); ( pour empécher les personnes qui conaissent le html de s'amuser a utiliser du javascript et du html)

Les pages :

écriture.php

Code :
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
<html><head><title>COMMENT CREER SON LIVRE D'OR</title>
<META NAME="reply-to" CONTENT="ludo@informaticien.com">
<META NAME="copyright" CONTENT="GIAMBIASI ludovic">
<script>
function test_form(mess, expe) {
   if(mess.value=="") { alert('Vous devez tapez un message !')
       mess.focus();return false }
	 if(expe.value=="") { alert('Vous devez tapez votre nom !')
       expe.focus();return false }
   return true}
   // script permettant de tester si les champs de saisie sont bien remplis...
</SCRIPT>
</head>
<body>
<?php
include ("connexion.php"); // ouverture de la connexion
if(isset($_GET[test])) { // on regarde si la variable test = "ok"...
							// si l'on n'a pas envoyé le formulaire cette variable n'est pas égale à ok
							// dès que l'on a envoyé le formulaire, cette variable = ok donc 
							// On enregistre le message dans la bd et on affiche
							// l'information comme quoi le message a bien été enregistré...
   $Date  = date("Y/m/d"); // on récupère la date à laquelle le message est posté
   $mess=$_POST['mess'];
   $mess=htmlspecialchars($mess);
   $expe=$_POST['expe'];
   $query = "INSERT INTO livre(codelivre, message, expediteur, date)"; // cette requette dit
   $query .= " VALUES('', '$mess','$expe', '$Date')"; 				 				 // d'envoyer les éléments du formulaire dans la base
   $result = mysql_query($query); // on enregistre
   echo"<b>	<font face=\"Arial, Helvetica, sans-serif\" color=\"#3344cc\" size=\"3\">Votre message a &eacute;t&eacute; correctement enregistr&eacute;</font></b><br /><br />";
   }
?>
   <!-- Affichage du résultat... -->
 
<font size="3"><a href="livre.php"><b>Lire les messages</b></a></font>
<?php
$test=$_GET['test']; // fin du premier test
if ($test!="ok"){ // première ouverture du fichier ecriture... on remplie le formulaire
// cette partie est cachée lorsque l'on a envoyé le message...
?>
<b>	<font face="Arial, Helvetica, sans-serif" color="#3344cc" size="3">ECRIRE UN MESSAGE</font></b><br />
<!-- notre formulaire... action : on retourne dans ce même fichier avec en plus la
variable test qui prend la valeur ok et toutes les infos du formulaire...
Le onSubmit sert à vérifier si le contenu du formulaire n'est pas vide... (voir function
js appelée)
-->
<form method="post" onSubmit="return test_form(this.mess, this.expe)" action="ecriture.php?test=ok">
	 		 		 <table cellpadding="0" cellspacing="0" width="100%">
	 				 				<tr><td align="center" valign="top">
	 				 								<font size="2" face="Arial, Helvetica, sans-serif" color="#3344cc"><b>Votre nom</b></font></td>
	 				 			 			<td align="center" valign="top">
													<input type="text" name="expe" size="30"><!-- on nomme expe le nom de l'expéditeur... -->
													<font size="1" face="Arial, Helvetica, sans-serif;" color="#3344cc"><b>(pr&eacute;nom ou pseudo accept&eacute;)</b></font></td></tr>
									<tr><td align="center" colspan="2">						 
													<hr color="#3366cc"></td></tr>
									<tr><td align="center" valign="top">
	 				 								<font size="2" face="Arial, Helvetica, sans-serif" color="#3344cc"><b>Votre&nbsp;message :</b></font></td>
	 				 			 			<td align="center" valign="top"><!-- on nomme mess le message de l'expéditeur... -->
													<textarea cols="50" rows="10" name="mess"></textarea></td></tr>
									<tr><td align="center" colspan="2">						 
													<hr color="#3366cc"></td></tr>
									<tr><td align="center" colspan="2">						 
													<input type="submit" name="ok" value="&nbsp;Envoyer&nbsp;" style="cursor:hand;"></td></tr></table>
</form>
 
<?php
}
mysql_close(); // on ferme la connexion 
?>	
</body>
</html>
livre.php

Code :
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
<html><head><title>COMMENT CREER SON LIVRE D'OR</title>
<META NAME="reply-to" CONTENT="ludo@informaticien.com">
<META NAME="copyright" CONTENT="GIAMBIASI ludovic">
 
</head>
<body>
<!--
***********************************************************************
Ce script est libre d'utilisation. Enjoy !
ludovic giambiasi
Pour tout problème...
		 ludo@informaticien.com
=========================================
COMMENT CREER SON LIVRE D'OR ?
Etape n°1 
		Vous devez créer une table dans votre base de données...
		#------
		CREATE TABLE livre (
		   codelivre int(11) NOT NULL auto_increment,
   			 message blob,
   			 expediteur varchar(100),
   			 date date,
   			 PRIMARY KEY (codelivre)
			 );
		#------
		Vous pouvez ajouter des champs... (e-mail, nom, prénom...)
 
Etape n°2		
		Vous devez changer les paramètres de connexion à votre base dans
		le fichier connexion.php	 
 
Etape n°3
		Adaptez le code du livre d'or au design de votre site.
		le fichier livre.php (celui-ci) contient le code pour lire les messages du livre d'or.
		le fichier ecriture.php permet l'écriture de messages...
		C'est fini.
 
Etape n°4
		Compréhension du code source du livre d'or... vous
		allez voir, ce n'est pas bien compliqué.
***********************************************************************		 
-->
<?php
include("connexion.php"); // ouverture de la connexion
 
 $sql = mysql_query("select count(*) from livre"); // pour connaître le nombre de messages...
 $total = @mysql_fetch_array($sql);	 							 // ...présents dans le livre d'or.
 $resder = $total[0];															 // le résultat sera stocké dans la variable $resder
 $sql = mysql_query("select * from livre order by date desc"); // voici la requette permettant d'aller chercher les messages...
 																 			 // ...triés par date
?>
 
<font face="arial" size="2">
<a href="ecriture.php">Ecrire un message</a><hr /> 
Nombre de messages : <b>
<?php
echo $resder; // on affiche le nombre de message 
?>
</b>
<br /><br />
<!-- pour se repérer... -->
<table width="600">
			 <tr><td width="200" align="center">
			 				 <b><font color="#3344cc" size="2" face="Arial, Helvetica, sans-serif;">
							 Exp&eacute;diteur /<br /> Date </font></b></td>
			 				 <td width="400" align="center">
							 <b><font color="#3344cc" size="3" face="Arial, Helvetica, sans-serif;">
							 Message</font></b></td></tr></table>
 
<?php
while($valeurlud = @mysql_fetch_array($sql)){ // début de la boucle qui se terminera à la fin des enregistrements
 
list($a,$m,$j)=explode("-",$valeurlud["date"]); // gestion de la date : voir le tutoriel
$date="$j-$m-$a";																// "gestion date" pour comprendre... 
?>
 			<table border="2" bordercolor=black width="600">
						 <tr bordercolor=white>
						 		 <td width="200" align=center bgcolor="white">
								 		 <font color="#3344cc" size="2" face="Arial, Helvetica, sans-serif;">
										 <b><?php echo $valeurlud["expediteur"]; ?></b></font>
										 <br /><font color="#3344cc" size="2" face="Arial, Helvetica, sans-serif;">
										 ( <?php echo $date; ?> )</font></td>
	 							<td width="400" align=center bgcolor="#88ccee">
										<font color="black" size="2" face="Arial, Helvetica, sans-serif;">
										<?php echo $valeurlud["message"]; ?></font></td></tr></table>
<?php
 } // on ferme la boucle 
?>
</font><!-- on affiche l'expéditeur, la date et le message... -->
<?php
mysql_close(); // on ferme la connexion
?>
</body>
</html>
et je savait pas qu'on pouvait inclure du html dans une boucle , s'est conceiller d'éviter ?
Fichiers attachés
Type de fichier : zip livre d'or.zip (4,1 Ko, 12 affichages)
paterson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 18h44   #40
LDDL
Membre habitué
 
Inscription : juillet 2003
Messages : 196
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 196
Points : 118
Points : 118
Par défaut class champs & formulaire

Créez dynamiquement des champs et/ou formulaires.

Refonte du code version 3 (update du 31/08/09)
LDDL est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h55.


 
 
 
 
Partenaires

Hébergement Web