Blog of ChristoPHPe !
Bienvenue sur mon Blog !

Blog of ChristoPHPe !

[PHP] Récupérer les valeurs d’un tableau (array) en objet

20 mai 2009 à 20:07, par Christophe

Bonsoir tout le monde !

Je vais vous délivrer une manière (qui peut plaire à certains) de récupérer les valeurs d’un tableau array, de la même façon qu’il est possible de les récupérer en objet !

Voici une démonstration:

$tableau = array(
'Cle1' => 'Ceci est le contenue de ma clé n°1',
'Cle2' => 'Ça, la clé 2',
'Cle3' => 'Et là, la 3ème !'
);
 
$tableau = (object) $tableau; // LA ligne qui change tout :)
 
echo $tableau->Cle1; // Renvoi "Ceci est le contenue de ma clé n°1"
echo $tableau->Cle2; // Renvoi "Ça, la clé 2"
echo $tableau->Cle3; // Renvoi "Et là, la 3ème !"

Enjoy ! :)

[PHP] Simple Calendrier mensuel

24 octobre 2008 à 20:41, par Christophe

Bonsoir !

Voilà quelque chose de bien interressant, le code est assez simple à comprendre, mais… j’avoue pas très facile, servez-vous de ça ! :)

Voilà l’aperçu en image :

(Cliquez sur l’image pour voir le calendrier marcher en réel !)

Ce calendrier est doté de deux langues : Français et Anglais !
Attention ! Il ne marche Exclusivement sous PHP5 !

Bon, maintenant, voilà le code complet est fonctionnel (sous PHP5 hein ^^) :

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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Calendrier</title>
<style type="text/css">
.calendar tr, td { border:#4A4A4A 1px solid; text-align:center; }
.calendar td { width:25px; }
.calendar a img { border:0px; }
.calendar .caption,.navigation a:link,a:visited { font-weight:bold; }
.calendar .caption { border-left:0px; border-right:0px; }
.calendar .head .border_right { border-right:0px; }
.calendar .head .border_left { border-left:0px; }
.caption { text-align:center; }
.calendar .navigation a:link,a:visited { color:#333333; }
.calendar .head { background-color:#E1E1E1; }
.calendar .days_list { background-color:#EEEEEE; }
.calendar .days { background-color:#F9F9F9; }
</style>
</head>
 
<body>
<?php
// french ; english
$language_selection = 'french';
 
### French
$calendar_txt['french']['mois'] = array('', 'Janvier', 'F&eacute;vrier', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Ao&ucirc;t', 'Septembre', 'Octobre', 'Novembre', 'D&eacute;cembre');
$calendar_txt['french']['jours'] = array('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche');
$calendar_txt['french']['voc'] = array('Ann&eacute;e pr&eacute;c&eacute;dente', 'Mois pr&eacute;c&eacute;dent', 'Mois suivant', 'Ann&eacute;e suivante');
### English
$calendar_txt['english']['mois'] = array('', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October','November', 'December');
$calendar_txt['english']['jours'] = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
$calendar_txt['english']['voc'] = array('Last year', 'Last month', 'Next month', 'Next year');
 
 
// Récupére la date par GET ou date courante
$jourActuel = (int)( $_GET['jour'] ? $_GET['jour'] : date('d') );
$jourActuel = (int)( $jourActuel < 1902 ? date('d') : $jourActuel );
$jourActuel = (int)( $jourActuel > 2036 ? date('d') : $jourActuel );
$moisActuel = (int)( $_GET['mois'] ? $_GET['mois'] : date('m') );
$anneeActuelle = (int)( $_GET['annee'] ? $_GET['annee'] : date('Y') );
 
$nomMoisActuel = $calendar_txt[$language_selection]['mois'][$moisActuel];
$dateActuelle = strtotime( sprintf('%s-%s-%s', $anneeActuelle, $moisActuel, $jourActuel) );
 
// Récupére le nombre de jours dans le mois
$nbJoursMois = date('t', $dateActuelle);
 
// Menu de navigation annee/mois
$nextAnnee = date('Y', strtotime('+1 year', $dateActuelle) ); // Année suivante
$prevAnnee = date('Y', strtotime('-1 year', $dateActuelle) ); // Année précédente
$nextMois = date('m', strtotime('+1 month', $dateActuelle) ); // Mois suivant
$prevMois = date('m', strtotime('-1 month', $dateActuelle) ); // Mois précédent
 
// Affichage
$numJourSemaine = 1;
$jour = 1;
$base_jours = $calendar_txt[$language_selection]['jours'];
$base_mois = $calendar_txt[$language_selection]['mois'];
$base_voc = $calendar_txt[$language_selection]['voc'];
 
// Génération du tableau
echo '<table class="calendar" cellpadding="3" cellspacing="0">
<tr class="head"><td colspan="1" class="navigation border_right">
<a href="?annee='.$prevAnnee.'&amp;mois='.$moisActuel.'" title="'.$base_voc[0].'"><img src="./images/last_year.png" alt="&lt;&lt;"></a><br /> 
<a href="?annee='.$anneeActuelle.'&amp;mois='.$prevMois.'" title="'.$base_voc[1].'"><img src="./images/last_month.png" alt="&lt;"></a></td>
<td colspan="5" class="caption">'.$nomMoisActuel.'&nbsp;'.$anneeActuelle.'</td>
<td colspan="1" class="navigation border_left">
<a href="?annee='.$nextAnnee.'&amp;mois='.$moisActuel.'" title="'.$base_voc[3].'"><img src="./images/next_year.png" alt="&gt;&gt;"></a><br />
<a href="?annee='.$anneeActuelle.'&amp;mois='.$nextMois.'" title="'.$base_voc[2].'"><img src="./images/next_month.png" alt="&gt;"></a>
 
</td></tr>
<tr class="days_list"><td title="'.$base_jours[0].'">'.$base_jours[0][0].'</td><td title="'.$base_jours[1].'">'.$base_jours[1][0].'</td><td title="'.$base_jours[2].'">'.$base_jours[2][0].'</td><td title="'.$base_jours[3].'">'.$base_jours[3][0].'</td><td title="'.$base_jours[4].'">'.$base_jours[4][0].'</td><td title="'.$base_jours[5].'">'.$base_jours[5][0].'</td><td title="'.$base_jours[6].'">'.$base_jours[6][0].'</td></tr><tr class="days">';
 
// Affichage des jours
while( $jour <= $nbJoursMois ){
    // Date du jour traité
    $dateTraitee = sprintf("%d-%d-%d", $anneeActuelle, $moisActuel, $jour);
    $numJourSemaineDateTraitee = (int)date("N", strtotime($dateTraitee) );
    // Afficher le jour à son emplacement par rapport au jour de la semaine
    if( $numJourSemaineDateTraitee == $numJourSemaine ){
        // Couleur de fond du jour actuel
        if( $jour == $jourActuel && $moisActuel == date('m') && $anneeActuelle == date('Y') ){
			$couleurFond = ' background-color:yellow; font-weight:bold;';
		} else {
			$couleurFond = '';
		}
 
		if( $language_selection == 'french' ){
			$complete_date = $base_jours[$numJourSemaineDateTraitee-1].' '.$jour.' '.$base_mois[$moisActuel].' '.$anneeActuelle;
		} elseif( $language_selection == 'english' ){
			$complete_date = $base_jours[$numJourSemaineDateTraitee-1].', '.$base_mois[$moisActuel].' '.$jour.date('S', $jour).' '.$anneeActuelle;
		} else {
			$complete_date = $base_jours[$numJourSemaineDateTraitee-1].' '.$jour.' '.$base_mois[$moisActuel].' '.$anneeActuelle;
		}
 
        // Afficher le jour à son empalcement
        echo '<td style="'.$couleurFond.'" onclick="alert(\''.$complete_date.'\')" title="'.$complete_date.'">'.$jour.'</td>'; 
 
        $jour++; // Passer au jour suivant du mois
    } else {
		echo '<td>&nbsp;</td>'; // Emplacement vide
	}
    // Passer au jour suivant de la semaine
    $numJourSemaine++;
 
    if ( $numJourSemaine > 7 ) { // Au-delà de Dimanche 
        echo '</tr><tr class="days">';
        $numJourSemaine = 1; // Retour au Lundi
    }
}
 
// Complession des dernières cellules 
$fin_tableau = 7-($numJourSemaine-1);
if($fin_tableau < 7) for($i=1;$i<=$fin_tableau;$i++) echo '<td>&nbsp;</td>';
 
echo '</tr></table>'; 
?>
</body>
</html>

Attention, il y a des images (4) :

Et voilà !
Amusez-vous bien !

Les REGEX

2 septembre 2008 à 00:45, par Christophe

Bonsoir ;)

Juste 2 petits liens concernent les REGEX.

Les voici:

Voilà :)

[PHP] Le regiter_globals

18 août 2008 à 13:55, par Christophe

Bonjour tout le monde !
Je vais vous parler du register_globals, je trouve que c’est un point important de PHP.

Tout d’abord, je vous conseil de lire cela

Si vous avez bien compris, cette directive permet de donner une égalité entre $_GET['variable'] et $variable
Regardez cet exemple (source: php.net) :

<?php
// $authorized = true uniquement si l'utilisateur est identifié
if (authenticated_user()) {
    $authorized = true;
}
 
// Comme nous n'avons pas initialisé $authorized avec false, cette dernière
// peut être définie via register_globals, comme avec l'URL GET auth.php?authorized=1
// Tout le monde peut facilement être reconnu comme identifié!
if ($authorized) {
    include "/donnees/critiques/data.php";
}
?>

Embêtant non ?
C’est pour ce genre de faille que je (et pas que moi) vous conseil de mettre register_globals à OFF !

De plus, si plus tard vous voulez passer à PHP 6, vous n’êtes pas sortie d’avance, puisque il vous faudra convertir votre code… (register_globals a été supprimé dans PHP 6, et c’est tant mieux !)

Donc si vous souhaitez récupérer un variable en provenance de l’URL, vous devez faire :

echo $_GET['variable'];

et non pas

echo $variable;

Sinon, que votre hébergeur ou votre serveur ai register_globals activé, ce n’est pas grave, il faut déjà ne pas l’utiliser, mais même, je vous conseil de le désactiver d’office si vous pouvez éditer votre php.ini :)
Si vous n’avez pas accès au php.ini, vous pouvez le désactiver via un .htaccess de cette façon

php_flag register_globals off

Non au register_globals

[PHP5] SuperGlobale $_SERVER[]

15 août 2008 à 00:44, par Christophe

Bonsoir,

On a régulièrement besoin de SuperGlobale comme $_SERVER[] pour savoir des choses comme le script courant, l’adresse IP du client, etc…

Les voici toutes décrites :

echo $_SERVER['HTTP_HOST'];

Retourne l’hôte courant.
Exemples : www.chrislabricole.fr, blog.chrislabricole.fr

echo $_SERVER['HTTP_USER_AGENT'];

Retourne le contenu de l’en-tête User_Agent du navigateur utilisé par le client.
Exemple : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.16) Gecko/20080702 Firefox/2.0.0.16

echo $_SERVER['DOCUMENT_ROOT'];

Retourne la racine sous laquelle le script courant est exécuté.
Exemple : /var/www/

echo $_SERVER['HTTP_ACCEPT'];

Retourne le contenu de l’en-tête Accept de la requête courante s’il y en a une.

echo $_SERVER['HTTP_ACCEPT_CHARSET'];

Retourne le contenu de l’en-tête Accept-Charset de la requête courante si elle existe.
Exemple : ISO-8859-1,utf-8;q=0.7,*;q=0.7

echo $_SERVER['HTTP_ACCEPT_ENCODING'];

Retourne le contenu de l’en-tête Accept-Encoding de la requête courante si elle existe.
Exemple : gzip,deflate

echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];

Retourne le contenu de l’en-tête Accept-Language de la requête courante si elle existe.
Exemple : fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3

echo $_SERVER['HTTP_CONNECTION'];

Retourne le contenu de l’en-tête Connection de la requête courante si elle existe.
Exemple : keep-alive

echo $_SERVER['REMOTE_ADDR'];

Retourne l’adresse IP du client.
Exemple : 56.58.236.89

echo $_SERVER['REMOTE_PORT'];

Retourne le port utilisé par la machine cliente pour “communiquer” avec le serveur Web.

echo $_SERVER['SCRIPT_FILENAME'];

Retourne le chemin absolu vers le fichier contenant le script en cours d’exécution.

echo $_SERVER['SERVER_ADDR'];

Retourne l’adresse IP du serveur.

echo $_SERVER['SERVER_ADMIN'];

Retourne l’adresse e-mail de l’administrateur du site Web ou de l’hébergement…

echo $_SERVER['SERVER_NAME'];

Retourne le nom du serveur spécifié dans les configurations du VirtualHost de Apache
Exemple : chrislabricole.fr

echo $_SERVER['SERVER_PORT'];

Retourne le port utilisé par le serveur Web.
Pour HTTP : 80

echo $_SERVER['SERVER_SIGNATURE'];

Retourne le signature du serveur Web.

echo $_SERVER['SERVER_SOFTWARE'];

Retourne la version du serveur.
Exemple : Apache/1.3.34

echo $_SERVER['GATEWAY_INTERFACE'];

Retourne le numéro de révision de l’interface CGI du serveur.
Exemple : CGI/1.1

echo $_SERVER['SERVER_PROTOCOL'];

Retourne le nom et révision du protocole de communication.
Exemple : HTTP/1.1

echo $_SERVER['REQUEST_METHOD'];

Retourne la méthode de requête utilisée pour accéder à la page
Exemple : GET, HEAD, POST, PUT

echo $_SERVER['QUERY_STRING'];

Retourne la chaîne de requête, si elle existe, qui est utilisée pour accéder à la page
Exemple : page=2

echo $_SERVER['REQUEST_URI'];

Retourne l’URI qui a été fourni pour accéder à cette page.
Exemple : /repertoire/index.php?param=valeur

echo $_SERVER['SCRIPT_NAME'];

Retourne l’URI qui a été fourni pour accéder à cette page mais sans les paramètres.
Exemple : /repertoire/index.php

echo $_SERVER['PATH_TRANSLATED'];

Chemin dans le système de fichiers (pas le document-root) jusqu’au script courant, une fois que le serveur a fait une traduction chemin virtuel -> réel.
Exemple : var/www/repertoire/index.php

La liste des SuperGlobales de base est terminée, maintenant, voici se que l’on peux faire grâce à cela :
Obtenir seulement le nom du fichier:

echo basename($_SERVER['SCRIPT_NAME']);

Exemple : index.php

Pour obtenir l’hôte grâce à l’adresse IP du client par exemple :

echo gethostbyaddr($_SERVER['REMOTE_ADDR']);

Exemple : ug-in-f147.google.com (IP de Google)

Voilà, après, à vous de faire vos montages pour obtenir le résultat que vous souhaitez :)

« Articles précédents  | 




-->