Académique Documents
Professionnel Documents
Culture Documents
HTML5/CSS3,
PHP ET MYSQL
WEB PROGRAMMING
Créer des liens :<a href=’’valeur’’></a> (la valeur de « href » indique l’adresse de la page cible.)
Création d'une figure (tous ce qui illustre un texte ou apporte plus amples information) :
<figure></figure>
- Ex : <figure>
<img src="images/blocnotes.png" alt="Bloc-Notes" />(l’image blocnotes.png fait office de figure)
<figcaption>Le logiciel Bloc-Notes</figcaption>(<figcaption>permet d’insérer une légende)
</figure>
Les balises universelles :<span></span>et<div></div>
Mettre en exposant :<sup>< /sup>
Insérer une légende :<figcaption></figcaption>
Appeler un script: <script src="monscript.js"></script>
POSITIONNEMENT
Les flottantes
Transformez vos éléments avec display
Valeurs Exemple Descriptions
Inline <a>, <em>,<span> Eléments d'une ligne. Se placent les uns à côté des autres.
Eléments en forme de blocs. Se placent les uns en-dessous des
block <p>, <div>,<section>…
autres et peuvent êtreredimensionnés.
Eléments positionnés les uns à côté des autres (comme les inlines)
Inline-block <select>,<input>
mais qui peuvent êtreredimensionnés (comme les blocs).
None <head>, <body> Eléments non affichés ou caché
NB :z-index est utilisé lorsque deux ou plusieurs éléments sont en absolu au même en droit et
devant se chevaucher. Celui qui possédera la valeur index la plus grande sera au-dessus de l’autre.
Exemple :
CODE :CSS
element
{
position: absolute;
right: 0px;
bottom: 0px;
}
Le positionnement fixe : identique au positionnement absolu mais, cette fois, l'élément reste
toujours visible, même si ondescend plus bas dans la page. C'est un peu le même principe que
background-attachment: fixed;
Exemple :
CODE :CSS
element
{
position: fixed;
right: 0px;
bottom: 0px;
}
Position s’accompagne de : top, bottom, right, left ; à qui on donne des valeurs en pixels.
NB :Un élément A positionné en absolu à l'intérieur d'un autre élément B (lui-même positionné en
absolu, fixe ou relatif) se positionnera par rapport à l'élément B, et non par rapport au coin en haut
à gauche de la page c'est-à-dire un bloc A en absolu dans un bloc B lui-même en absolu, fixe ou
relatif se positionnera par apport au coin supérieur gauche du bloc B.
AUTRES BALISES
Descriptions Propriétés valeurs
list-style-type - None : enlève les puces sur les listes
Pour les listes - url('images/ico_liensexterne.png') : permet
list-style-image: de définir une image à la place d’une puce
dans une liste
Les dégradés linear-gradient
Règles a respecter
Tous vos textes doivent en général être dans des balises de paragraphes. Il est interdit de mettre
du texte directement entre les balises <body></body>sans l'avoir entouré des fameux
<p></p>. Ceci est aussi valable pour les retours à la ligne <br />, qui doivent être à l'intérieur
de paragraphes. C'est une erreur ultra-courante chez les débutants.
Toutes vos images doivent comporter un attribut « alt »qui indique ce que contient l'image.
Vos balises doivent être fermées dans l'ordre.
Si vos liens comportent des &, vous devez les remplacer par le code & pour éviter toute
confusion au navigateur.
Les éléments de types block doivent être placé en dehors des paragraphes <p></p>
12
Alignement
Type Nom Valeurs Possible
Indiquer les noms de polices possibles par ordre de préférence :
Code : CSS
font-family: police1, police2, police3;
Si le visiteur a la police 1, il l'utilisera. Sinon, il regarde s'il a la
police 2, puis la police 3 etc.
Nom de police font-family Utilisez des guillemets si le nom de la police comporte des
espaces. Essayez de toujours mettre comme dernière police
possible "serif" ou "sans-serif".
Code : CSS
font-family: "Arial Black", Arial, Verdana,
serif;
left : à gauche (par défaut)
Alignement text-align center : centré
horizontal right : à droite
justify : texte justifié (prend toute la largeur de la page)
A utiliser dans des cellules de tableau, ou dans des éléments
inline-block.
Alignement vertical-align top : en haut
vertical middle : au milieu
bottom : en bas
Hauteur de ligne line-height Indiquer une valeur en pixels (px) ou en pourcentage (%)
Indiquez une valeur en pixels (px) pour définir l'alinéa de vos
Alinéa text-indent paragraphes.Les paragraphes commenceront avec le retrait
indiqué.
normal : le passage à la ligne est automatique (par défaut)
nowrap : pas de passage à la ligne automatique, à moins qu'une
balise HTML comme <br
Césure white-space /> ne soit présente.
pre : le passage à la ligne se fait tel que le texte a été saisi dans
le code source (comme la
balise <pre>)
Césure forcée word-wrap Avec la valeur break-word, le texte sera coupé s'il dépasse du
cadre.
Décalage vertical, décalage horizontal, adoucissement, couleur
Ombre de texte text-shadow text-shadow: 2px 2px 4px black;
13 IMAGE DE FOND
<cellule>Valeur entre 0 (transparence totale) et 1 (opacité totale). Exemple pour une transparence de 50%
:
Type Nom Valeurs Possible
Indiquer l'url de l'image (notation absolue ou relative)
Code : CSS
background-image:url("images/fond.png"); /* Notation
relative */
Image de fond background-image backgroundimage:
url("http://www.monsite.com/images/fond.png");
/* Notation absolue */
Il est possible de combiner plusieurs images de fond, en
séparant les déclarations par des virgules.
Fond fixé background- fixed : le fond reste fixe quand on descend plus bas sur la
attachment page
scroll : le fond défile avec le texte (par défaut)
repeat : le fond se répète (par défaut)
Répétition du background-repeat repeat-x : le fond ne se répète que sur une ligne,
fond horizontalement
repeat-y : le fond ne se répète que sur une colonne,
verticalement
no-repeat : le fond ne se répète pas, il n'est affiché qu'une fois
2 façons de faire :
En notant une distance en px ou %, par rapport au coin en
haut à gauche.
Code : CSS
background-position:50px 200px; /* 50 px à droite, 200px
en bas */
En utilisant des valeurs prédéfinies, une pour la verticale et
fond background-position une pour l'horizontale :
top : en haut, verticalement
center : au milieu, verticalement
bottom : en bas, verticalement
left : à gauche, horizontalement
center : au centre, horizontalement
right : à droite, horizontalement
Code : CSS
background-position : bottom right; /* en bas à droite */
Indiquer une ou plusieurs valeurs issues des propriétés
background-image, backgroundrepeat, background-
attachment, background-position.
L'ordre des valeurs n'a pas d'importance et on n’est pas
MARGES EXTERIEURES
Type Nom Valeurs Possible
Marge en haut margin-top Indiquer une valeur comme 20px, 1.5em...
Marge à gauche margin-left Idem
Marge à droite margin-right Idem
Marge en bas margin-bottom Idem
Indiquez de 1 à 4 valeurs à la suite. Selon le nombre de
valeurs que vous mettez, la signification change :
- 1 valeur : ce sera la marge pour le haut, le bas, la
gauche et la droite
Super-propriété margin - 2 valeurs : la première correspond à la marge pour le
de marge haut et le bas, la seconde pour la gauche et la droite
- 3 valeurs : la première correspond à la marge du haut,
la seconde aux marges à gauche et à droite, la
troisième à la marge du bas
- 4 valeurs : respectivement la marge du haut, de la
droite, du bas, de la gauche.
Code : CSS
margin:20px 5px; /* 20px de marge en haut et en
bas, 5px à gauche et à droite */
MARGES INTERIEURES
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
Type Nom Valeurs Possible
Marge intérieure padding-top Indiquer une valeur comme 20px, 1.5em...
en
haut
Marge intérieure à Padding-left Idem
gauche
Marge intérieure à Padding-right Idem
droite
Marge intérieure padding-bottom Idem
en
bas
15 Indiquez de 1 à 4 valeurs à la suite. Selon le nombre de
valeurs que vous mettez, la signification change :
- 1 valeur : ce sera la marge pour le haut, le bas, la
gauche et la droite
Super-propriété de - 2 valeurs : la première correspond à la marge pour le
marge intérieure padding haut et le bas, la seconde pour la gauche et la droite
- 3 valeurs : la première correspond à la marge du haut,
la seconde aux marges à gauche et à droite, la
troisième à la marge du bas
- 4 valeurs : respectivement la marge du haut, de la
droite, du bas, de la gauche
BORDURES
Type Nom Valeurs Possible
epaisseur de la border-width Indiquer une valeur en px.
bordure
couleur de la bordure border-color Indiquer une valeur de couleur.
none : pas de bordure (par défaut)
hidden : bordure cachée
solid : ligne pleine
double : ligne double (nécessite une taille de bordure de 3px
type de bordure border-style minimum)
dashed : en tirets
dotted : en pointillés
inset : effet 3D "enfoncé"
outset : effet 3D "surélevé"
ridge : autre effet 3D
Indiquer la couleur, l'épaisseur et le type de bordure pour la
bordure à gauche border-left bordure gauche.
L'ordre n'a pas d'importance. Exemple :
Code : CSS
border-left: 2px inset blue; /* Bordure bleue de 2px avec
effet 3D "enfoncé" */
bordure en haut border-top Idem
bordure à droite border-right Idem
bordure en bas border-bottom Idem
super-propriété border Indiquera l'apparence des bordures en haut, à droite, en bas et
de bordure à gauche.
bordure arrondie border-radius Indiquer une valeur en px, ou 4 valeurs pour chacun des
coins, en partant de celui en haut à gauche.
AUTRES PROPRIETES
Type Nom Valeurs Possible
auto : curseur automatique (par défaut)
default : curseur standard
pointer : curseur en forme de maintext : curseur utilisé quand
on pointe sur du texte
wait : curseur utilisé pour indiquer une attente (sablier)
progress : curseur utilisé pour indiquer une tâche de fond
(curseur avec sablier)
help : curseur en forme de point d'interrogation, indiquant une
aide
move : curseur en forme de croix, indiquant un déplacement
possible
Les transitions auront lieu automatiquement dès que les propriétés concernées seront modifiées pour cela
on peut utiliser les pseudo-formats.
Exemple :
- transition-delay ;
- transition-timing-function.
La première, transition-delay, permet de définir un délai avant que la transition n'ait lieu. Comme pour
transition-duration, il est possible de la définir en secondes (s) ou en millisecondes (ms), et sa valeur par
défaut est 0s.
Un autre exemple :
p{
/* Seules la couleur du texte et les dimensions de nos paragraphes auront une transition. */
width: 300px;
height: 200px;
background-color: #fff;
-moz-transition-property: background-color;
}
p:hover
{
width: 400px;
height: 100px;
background-color:#000;
}
p{
/* Il est possible de spécifier des valeurs différentes pour chaque propriété. */
transition: color 3s ease 1500ms, width 1s ease-in 0s, height 2s ease-out 0.2s;
}
23
Code : HTML
<figcaption>Tableau avec les en-têtes sous une même ligne </figcaption>
<table>
<tr>
<th>Nom</th>
<th>Âge</th>
<th>Pays</th>
</tr>
<tr>
<td>Carmen</td>
<td>33 ans</td>
<td>Espagne</td>
</tr>
<tr>
<td>Michelle</td>
<td>26 ans</td>
<td>États-Unis</td>
</tr>
</table>
CODE : HTML
<figcaption>Tableau avec les en-têtes sur une même colonne</figcaption>
<table>
<tr>
<th>Nom</th>
<td>Carmen </td>
<td>Michelle</td>
</tr>
<tr>
<th>Age</th>
<td> 33 ans </td>
<td> 26 ans </td>
</tr>
<tr>
<th>Pays < /th>
<td>Espagne</td>
<td>Etats-unis</td>
</tr>
</table>
Code : HTML
<td colspan="2">qui signifie : « Cette cellule est la fusion de deux cellules ».
CODE :CSS
table
{
border-collapse: collapse; /* Les bordures du tableau seront collées (plus joli) */
}
td
{
border: 1px solid black;
}
Les tableaux complexes (gros tableaux) : ils sont constitués de trois parties qui sont :
HTML
- l'en-tête (en haut) : il se définit avec les balises <thead></thead>;
- le corps (au centre) : il se définit avec les balises <tbody></tbody>;
- le pied du tableau (en bas) : il se définit avec les balises <tfoot></tfoot>.
- Pour le reste c’est exactement comme pour les petits tableaux.
LES FORMULAIRES
Créer un formulaire :<form></form> ; délimite le formulaire (contient les balises <input/>)
La balise <form>prend deux attributs qui sont :
- method: cet attribut indique par quel moyen les données vont être envoyées. Pour envoyer des
données sur le Web on lui donnera la valeur post. Ex : methode =‘’post’’.
- action: c'est l'adresse de la page ou du programme qui va traiter les informations. Cet attribut a
pour valeur le nom par exemple de la page qui traitera les informations.
Ex : action= ‘’traitement.php’’.
les zones de saisie basiques
les zones de texte monoligne (champs de saisie mono ligne) : <input />comme son nom
l'indique, on ne peut y écrire qu'une seule ligne. Elle sert à saisir des textes courts.
Les libélles :<label></label> permet d’indiquer à celui qui remplit le formulaire ce que doit
contenir un champ quelconque.
<label for=‘’pseudo’’> Votre pseudo : </label><input type= ‘’text’’ name= ‘’pseudo’’ id= ‘’pseudo’’/>
- Les zones d'options :<input type="radio" name="sexe"value=" " />pour un élément à cocher.
(donc on en rajoutera autant en fonction des choix possibles)
NB : un seul élément doit être sélectionné.
CODE :HTML
<form method="post" action="traitement.php">
<p> Veuillez indiquer votre sexe :<br />
<input type="radio" name="sexe" value="male" id="male"/><label for="male"> Homme </label><br />
<input type="radio" name="sexe" value="female" id="female" /><label for="female">Femme</label><br >
</p>
</form>
- Pour qu’un élément soit sélectionné par défaut on utilise l’attribut « selected».
- Vous pouvez aussi grouper vos options avec la balise <optgroup></optgroup>.
- <fieldset></fieldset> pour regrouper les champs.
Eléments cachés : <input type="hidden" name="pseudo" value="Mateo21" /> (cette case est visile
dans le code source)
Le bouton d’envoi : on le crée grâce à la balise<inputtype= ‘’valeur’’ value= ‘’ ’’/>les valeurs de l’attribut
type pouvant être :
- type="submit": le principal bouton d'envoi de formulaire. Le visiteursera conduit à la page indiquée dans
l'attribut action du formulaire.
- type="reset": remise à zéro du formulaire.
- type="image": équivalent du bouton submit, présenté cette fois sous forme d'image. Rajoutez
27 l'attributsrcpourindiquer l'URL de l'image.
- type="button": bouton générique, qui n'aura (par défaut) aucun effet. En général, ce bouton est géré en
JavaScriptpour exécuté des actions sur la page.
NB :La valeur de l’attribut « value » sera le texte affiché dans le bouton.
Ex : <input type="submit" value="Envoyer" />
NB : On peut proposer une solution de secours en flash comme Dewplay pour les navigateurs ne gérant pas
un format quelconque. Le code Dewplay est inséré entre les balises <audio></audio>
Exemples de requête
- /* Sur les écrans, quand la largeur de la fenêtre fait au maximum1280px */ @media screen and (max-width:
1280px)
- /* Sur tous types d'écran, quand la largeur de la fenêtre est comprise entre 1024px et 1280px */
@media all and (min-width: 1024px) and (max-width: 1280px)
- /* Sur les téléviseurs */@media tv
- /* Sur tous types d'écrans orientés verticalement */@media all and (orientation: portrait)
Pour éviter les bugs sur les anciennes versions IE une astuce consiste à utiliser le mot-clé only que ces
vieilles versions ne connaissent pas :
Ex : « @media only screen » ne provoquera pas de bug sur les vieux navigateurs
pour la résolution des écrans de mobile on utilisera : max-device-width plutôt que max-width
29
PHP
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
- <?php ?> balise à l’intérieur de laquelle on écrit le code PHP
- <?php/* Le code PHP se met ici */ ?> d’autres balises sont : <? ?>et <% %>.
AFFICHER DU TEXTE
- <?php echo "Ceci est du texte"; ?> (on affiche du texte grâce à l’instruction echo, il se termine
obligatoirement par un point-virgule ( ;) )
- Il est aussi possible d’afficher les balises (introduire les balises html dans le code php)
Ex : <?php echo "Ceci est du <strong>texte</strong>"; ?>
- Pour afficher des guillemets on le précède d’un antislash(\)
30
LES COMMENTAIRES
- Les commentaires monolignes ;// ce qui suit est un commentaire monoligne
- Les commentaires multilignes : /* ce texte est un commentaire multiligne*/
Application
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Mon super site</title>
</head>
<body>
<?php include("entete.php"); ?> /* charge l’entête qui contient les principaux lien de
navigation*/
<?php include("menus.php"); ?>/* charge le menu*/
<!-- Le corps -->
<div id="corps">
<h1>Mon super site</h1>
<p>
Bienvenue sur mon super site !
</p>
</div>
<!-- Le pied de page -->
<?php include("pied_de_page.php"); ?>
</body>
</html>
LES VARIABLES
- Déclarer une variable :
<?php
$variable = 'Mon "nom" est Mateo21';
$variable = "Je m'appelle Mateo21";
?>
- Afficher le contenu d’une variable :<?php echo $variable; ?>
- Concaténer (assemblage) :
La structure if
<?php
$age = 8;
if ($age <= 12)
{
echo "Salut gamin !";
}
?>
La structure if…else
< ?php
$age = 8;
if ($age <= 12) // SI l'âge est inférieur ou égal à 12
{
echo "Salut gamin ! Bienvenue sur mon site !<br />";
$autorisation_entrer = "Oui";
}
else // SINON
{
echo "Ceci est un site pour enfants, vous êtes trop vieux pour pouvoir entrer. Au revoir
!<br />";
$autorisation_entrer = "Non";
}
echo "Avez-vous l'autorisation d'entrer ? La réponse est : $autorisation_entrer";
?>
La structure if…elseif…else
<?php
if ($autorisation_entrer == "Oui") // SI on a l'autorisationd'entrer
{
// instructions à exécuter quand on est autorisé à entrer
}
elseif ($autorisation_entrer == "Non") // SINON SI on n'a pasl'autorisation d'entrer
{
// instructions à exécuter quand on n'est pas autorisé à entrer
}
else // SINON (la variable ne contient ni Oui ni Non, on ne peutpas agir)
{
echo "Euh, je ne connais pas ton âge, tu peux me le rappeler s'il te plaît ?";
}
?>
CONDITION MULTIPLES
Mot-clé signification symbole
AND Et &&
OR Ou ||
L’ASTUCE BONUS (utilisable quand on veut inclure du html sur plusieurs lignes dans le code
php)
<?php
if ($variable == 23)
{
?>
<strong>Bravo !</strong>Vous avez trouvé le nombre mystère !
<?php
}
?>
LES BOUCLES
La boucle while :
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
<?php
while ($continuer_boucle == true)
{// instructions à exécuter dans la boucle }
?>
Exemple d’utilisation
<?php
$nombre_de_lignes = 1;
while ($nombre_de_lignes <= 100)
{
echo 'Je ne dois pas regarder les mouches voler quandj\'apprends le PHP.<br />';
$nombre_de_lignes++; // $nombre_de_lignes = $nombre_de_lignes +1
}
?>
33
Une boucle plus complexe : for
Exemples d’utilisation
<?php
for ($nombre_de_lignes = 1; $nombre_de_lignes <= 100;$nombre_de_lignes++)
{
echo 'Ceci est la ligne n°' . $nombre_de_lignes . '<br />';
}
?>
NB : On utilise la boucle for quand on sait exactement le nombre de fois que l’on veut que la boucle
ce répète, au cas contraire la boucle while est recommandé.
LES FONCTIONS
Une fonction est une série d’instructions qui effectue des actions et renvoie une valeur. Les
fonctions sont différentes des boucles dû au fait qu’elle s’adapte en fonction des paramètres.
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
Appeler une fonction(Quand on appel une fonction le plus souvent on lui donne le(s)
paramètre(s) avec le(s) quel(s) travailler)
<?php
ma_fonction(); // cette fonction ne prend aucun paramètre
?>
<?php
fonctionImaginaire(17, 'Vert', true, 41.7); // cette fonction prend 3 paramètres séparés par des
virgules.
?>
Récupérer la valeur retournée par une fonction(On peut récupérer la valeur de retour d’une
34 fonction dans une variable)
<?php
$variable = ma_fonction(paramètre(s)); // la valeur retournée par ma_fonction sera stocké dans $variable.
?>
NB : Une fonction ne peut renvoyer qu’une seul valeur. On peut contourner ce problème en
enregistrant nos valeurs dans un tableau (array) et c’est ce dernier que l’on enverra.
Exemple d’utilisation :
<?php
// Enregistrons les informations de date dans des variables
$jour = date('d');
●strtr($chaine,$rech,$rep)
Remplace dans $chaine toutes les occurrences de $rech par $rep
Généralité
< ?php
function NomDeFonction (paramètre1, paramètre2)
{
// Instructions
}
?>
LES TABLEAUX
Les tableaux (arrays) sont de grosse variable contenant d’autre variable. Il existe 2 types de
tableaux : Les tableaux numérotés et les tableaux associatifs.
36
Tableaux numérotés : Permettent de stocker des variables de même type. Considérons la
variable $prenom(un array) ne contiendra que des prénoms.
Clé Valeur
0 Bernard
1 Landry
Tableaux associatifs : Permet de découper une donnée en plusieurs sous éléments (au lieu de numéroté
les cases, elles seront étiquetés)
Clé Valeur
prenom François
nom Dupont
adresse 3 Rue du Paradis
<?php
$coordonnees['prenom'] = 'François';
$coordonnees['nom'] = 'Dupont';
Parcourir un tableau :
- La boucle for : pratique pour les tableaux numérotés.
Exemple :
<?php
37 // On crée notre array $prenoms
$prenoms = array ('François', 'Michel', 'Nicole', 'Véronique','Benoît');
// Puis on fait une boucle pour tout afficher :
for ($numero = 0; $numero < 5; $numero++){
echo $prenoms[$numero] . '<br />'; // affichera $prenoms[0],$prenoms[1] etc.
}
?>
Exemple2 :
<?php
$coordonnees = array (
'prenom' => 'François',
'nom' => 'Dupont',
'adresse' => '3 Rue du Paradis');
foreach($coordonnees as $element){
echo $element . '<br />';
}
?>
- Pour afficher un tableau juste pour voir ce qu’elle contient sans manière on utilise print_r (une
sorte d’echo spécialisé dans les arrays.) Comme elle ne revoie pas de code HTML comme <br>
on doit l’entourer de <pre></pre> pour un affichage correcte.
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
NB : utilisé pour le débogage
Exemple :
<?php
$coordonnees = array (
'prenom' => 'François',
'nom' => 'Dupont',
'adresse' => '3 Rue du Paradis');
echo '<pre>';
print_r($coordonnees);
echo '</pre>';
?>
38
RECHERCHER DANS UN TABLEAU (très utile pour savoir si un array contient ou non certaines informations)
- array_key_exists: pour vérifier si une clé existe dans l'array ;
- in_array: pour vérifier si une valeur existe dans l'array ;
- array_search: pour récupérer la clé d'une valeur dans l'array
Le principe est le même que array_key_exists… mais cette fois on recherche dans les valeurs.
in_array renvoie true si la valeur se trouve dans l'array, false si elle ne s'y trouve pas.
Exemple :
<?php
$fruits = array ('Banane', 'Pomme', 'Poire', 'Cerise', 'Fraise', 'Framboise');
if (in_array('Myrtille', $fruits)){
echo 'La valeur "Myrtille" se trouve dans les fruits !';
}
If (in_array('Cerise', $fruits)){
echo 'La valeur "Cerise" se trouve dans les fruits !';
}
?>
Exemple :
<?php
$fruits = array ('Banane', 'Pomme', 'Poire', 'Cerise', 'Fraise', 'Framboise');
$position = array_search('Fraise', $fruits);
echo '"Fraise" se trouve en position ' . $position . '<br />';
39 $position = array_search('Banane', $fruits);
Echo '"Banane" se trouve en position ' . $position;
?>
Exemple :
<?php
if (isset($_GET['prenom']) AND isset($_GET['nom'])) // On a le nom et le prénom{
echo 'Bonjour ' . $_GET['prenom'] . ' ' . $_GET['nom'] . ' !';
}
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
else // Il manque des paramètres, on avertit le visiteur{
echo 'Il faut renseigner un nom et un prénom !';
}
?>
Contrôler la valeur ou existence des paramètres :
<?php
if (isset($_GET['prenom']) AND isset($_GET['nom']) AND isset($_GET['repeter'])){
for ($i = 0 ; $i < $_GET['repeter'] ; $i++){
echo 'Bonjour ' . $_GET['prenom'] . ' ' . $_GET['nom'] . ' !<br/>';
}
}
else{
40 echo 'Il faut renseigner un nom, un prénom et un nombre de répétitions !
}
?>
Le code ci-dessus répète le nom et le prenom d’un visiteur un certain nombre de fois
<?php
$_GET['repeter'] = (int) $_GET['repeter']; //on lit l’instruction de la droite vers la gauche
?>
AU FINAL ON A
<?php
if (isset($_GET['prenom']) AND isset($_GET['nom']) AND isset($_GET['repeter']))
{
$_GET['repeter'] = (int) $_GET['repeter']; // 1 : On force la conversion en nombre entier
// 2 : Le nombre doit être compris dans une certaine plage de valeurs
if ($_GET['repeter'] >= 1 AND $_GET['repeter'] <= 100) entre 1 et 100
{
for ($i = 0 ; $i < $_GET['repeter'] ; $i++){
echo 'Bonjour ' . $_GET['prenom'] . ' ' . $_GET['nom'] . ' !<br/>';
}
}
else{
echo 'Il faut renseigner un nom, un prénom et un nombre de répétition !
}
}
?>
NB: Il est important d’échapper toutes les zones de saisie ou de retirer les balises.
<?php
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error']== 0)
{
// Testons si le fichier n'est pas trop gros
if ($_FILES['monfichier']['size'] <= 1000000)
{
// Testons si l'extension est autorisée
$infosfichier =pathinfo($_FILES['monfichier']['name']);
$extension_upload = $infosfichier['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
if (in_array($extension_upload,$extensions_autorisees))
{
// On peut valider le fichier et le stocker définitivement
move_uploaded_file($_FILES['monfichier']['tmp_name'], 'uploads/'
.basename($_FILES['monfichier']['name']));
echo "L'envoi a bien été effectué !";
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Codes d'accès au serveur central de la NASA</title>
</head>
<body>
<?php
// On teste si le mot de passe est bon
Les variables super globale ($_GET[‘name’] et POST[‘name’]) sont des arrays généré par php.
Pour afficher le contenu d'une super globale et voir ce qu'elle contient, le plus simple est d'utiliser
la fonction print_r, puisqu'il s'agit d'un array.
43
Exemple :
<pre>
<?php print_r($_GET);?>
</pre>
Quelques superglobales
- $_SERVER: ce sont des valeurs renvoyées par le serveur. Elles sont nombreuses et quelques-
unes d'entre elles peuvent nous être d'une grande utilité. Je vous propose de retenir au moins
$_SERVER['REMOTE_ADDR']. Elle nous donne l'adresse IP du client qui a demandé à voir la page,
ce qui peut être utile pour l'identifier.
- $_SESSION: on y retrouve les variables de session. Ce sont des variables qui restent stockées sur
le serveur le temps de la présence d'un visiteur. Nous allons apprendre à nous en servir dans ce
chapitre.
- $_COOKIE: contient les valeurs des cookies enregistrés sur l'ordinateur du visiteur. Cela nous
permet de stocker des informations sur l'ordinateur du visiteur pendant plusieurs mois, pour se
souvenir de son nom par exemple.
- $_GET: Variable qui contient les données envoyées en paramètres dans l'URL.
- $_POST: Variable qui contient les informations qui viennent d'être envoyées par un formulaire.
- $_FILES: elle contient la liste des fichiers qui ont été envoyés via le formulaire.
LES SESSIONS :
Les sessions permettent de transmettre des données à toutes les pages de son site.
Car elles ne seront pas détruite après la génération de la page comme quand les données
sont transmis avec $_GET et $_POST qui sont fait pour transmettre les données une seule
fois.
Fonctionnement des sessions
NB : session_start() doit être appelé sur chaque page où on veut utiliser des sessions et avant de
mettre le moindre code HTML.
44
Exemples d'utilisation des sessions
Exemple1 :
<?php
// On démarre la session AVANT d'écrire du code HTML
session_start();
// On s'amuse à créer quelques variables de session dans $_SESSION
$_SESSION['prenom'] = 'Jean';
$_SESSION['nom'] = 'Dupont';
$_SESSION['age'] = 24;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Titre de ma page</title>
</head>
<body>
<p>
Salut <?php echo $_SESSION['prenom']; ?>!<br />
Tu es à l'accueil de mon site (index.php). Tu veux aller sur
une autre page ?
</p>
<p>
<a href="mapage.php">Lien vers mapage.php</a><br />
<a href="monscript.php">Lien vers monscript.php</a><br />
<a href="informations.php">Lien vers informations.php</a>
</p>
</body>
</html>
Exemple2 :
<?php
session_start(); // On démarre la session AVANT toute chose
?>
<!DOCTYPE html>
<html>
<head>
La redirection :
<?php
header ("Content-type: page.php");
?>
Certaines de ces fonctions permettent de faire juste une recherche et d’autres recherche /
remplace
- preg_match: cette fonction renvoie un booléen : VRAI ou FAUX. Elle renvoie true (vrai) si elle a
trouvé le mot que vous cherchiez dans la chaîne, false (faux) si elle ne l'a pas trouvé. Elle permet
de vérifier qu’un texte possède bien certaines particularités grâce au REGEX.
Exemple :
<?php
if (preg_match("** Votre REGEX **", "Ce dans quoi vous faites la recherche")){
echo 'Le mot que vous cherchez se trouve dans la chaîne';
}
else{
echo 'Le mot que vous cherchez ne se trouve pas dans la chaîne';
}
?>
Exemple d’utilisation :
<?php
if (preg_match("#guitare#", "J'aime jouer de la guitare.")){
echo 'VRAI';
}
else{
echo 'FAUX';
}
?>
Exemple :
[abcdefghijklmnopqrstuvwxyz] (Classe)≡[a-z] (Intervalle de classe) aussi il en est de même avec
les chiffre exemple : [0123456789] ≡ [0-9]
Il est possible d’écrire deux plages ou plus à la fois exemple : [a-zA-Z0-9]
#<h[1-6]># : On y vérifie justement si la chaîne comporte une balise HTML de titre (<h1>ou
<h2>, etc., jusqu'à <h6>).
- Pour dire que je n'en veux pas :
Si vous ne voulez PAS des caractères que vous énumérez dans votre classe, vous devrez placer
le symbole «^» au début de la classe.
Si on le place à l'intérieur d'une classe, il sert à dire que vous ne VOULEZ PAS de ce qui se trouve
à l'intérieur de cette classe.
Ainsi, la regex suivante :
#[^0-9]#… signifie que vous voulez que votre chaîne comporte au moins un caractère qui ne soit
pas un chiffre.
Les quantificateurs
Les quantificateurs sont des symboles qui permettent de dire combien de fois peuvent se
répéter un caractère ou une suite de caractères.
{3,}: si vous mettez une virgule, mais pas de 2e nombre, ça veut dire qu'il peut y en avoir
jusqu'à l'infini. Ici, cela signifie « 3 fois ou plus ».
#a{3,}fonctionne pour « aaa », « aaaa », « aaaaa », « aaaaaa »,
On remarque que :
?revient à écrire {0,1} ;
+revient à écrire {1,} ;
*revient à écrire {0,}.
Méta caractères :
Dans le langage PCRE (des regex), les métas caractères qu'il faut connaître sont les suivants :
#!^$()[]{}?+*.\|
On peut échapper les caractères n’ayant rien avoir avec les métas caractères grâce à l’antislash (\)
Alors, comment faire pour faire comprendre qu'on recherche « Quoi ? » alors que le point
d'interrogation a déjà une signification ? On l’échapper c-a-d « Quoi \? »
Ici, l'antislash sert à dire que le point d'interrogation juste après n'est pas un symbole spécial, mais
bel et bien une lettre comme une autre !
Exemples :
Je suis impatient ! #impatient \!# VRAI
Je suis (très) fatigué #\(très\) fatigué# VRAI
J'ai sommeil… #sommeil\.\.\.# VRAI
Le smiley :-\ #:-\\#
Pas besoin d’échapper les symbole dans une classe e.g #[a-z?+*{}]# Elle signifie qu'on a le droit de
mettre une lettre, un point d'interrogation, un signe +, etc
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
- « -» (tiret) : encore un cas un peu particulier. Le tiret – vous le savez – sert à définir un intervalle
de classe (comme [a-z]). Et si vous voulez ajouter le tiret dans la liste des caractères possibles ?
50 Eh bien il suffit de le mettre soit au début de la classe, soit à la fin. Par exemple :
[a-z0-9-] permet de chercher une lettre, un chiffre ou un tiret.
APPLICATION :
<p>
51 <?php
if (isset($_POST['telephone']))
{
$_POST['telephone'] = htmlspecialchars($_POST['telephone']); // On rend inoffensives les balises
HTML que le visiteur a pu entrer
if (preg_match("#^0[1-68]([-. ]?[0-9]{2}){4}$#",$_POST['telephone'])){
echo 'Le ' . $_POST['telephone'] . ' est un numéro<strong>valide</strong> !';
}
else{
echo 'Le ' . $_POST['telephone'] . ' n\'est pas valide, recommencez !';
}
}
?>
</p>
<form method="post">
<p>
<label for="telephone">Votre téléphone ?</label><inputid="telephone" name="telephone" /><br />
<input type="submit" value="Vérifier le numéro" />
</p>
</form>
L’option s : pour que le « point » fonctionne aussi pour les retours à la ligne (pour que le texte
puisse être en gras sur plusieurs lignes) ;
<?php
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
class Membre
{
private $pseudo;
private $email;
private $signature;
private $actif;
}
?>
Exemple :
<?php
class Membre{
private $pseudo;
private $email;
private $signature;
private $actif;
La variable $pseudo est accessible dans les fonctions avec le préfixe $this->. Cela signifie : « Le
pseudo de cet objet ». En effet, souvenez-vous, on peut créer plusieurs objets à partir d'une classe. Il
peut y avoir plusieurs membres et chacun d'eux a un pseudo différent. Le préfixe $this-> permet
d'indiquer que c'est bien le pseudonyme du membre sur lequel on travaille que l'on veut récupérer.
- Le destructeur :__destruct
Pour détruire un objet, ou toute autre variable, on peut le faire à la main avec la fonction unset()
Exemple d’utilisation :
<?php
public function __destruct(){
echo 'Cet objet va être détruit !';
}
?>
L'HERITAGE :
L'héritage est probablement le concept le plus important de la programmation
orientée objet. C'est ce qui lui donne toute sa puissance. Cela permet de réutiliser des
classes pour en construire de nouvelles. On se sert de certaines classes « de base » pour
construire des classes plus complètes.
Il y a héritage entre deux classes quand on peut dire : « A est un B » donc A hérite de B
Exemples d’héritage:
- une voiture est un véhicule (Voiture hérite de Véhicule) ;
- un chirurgien est un docteur (Chirurgien hérite de Docteur) ;
En revanche on ne peut pas dire qu’un oiseau est un moineau donc on ne peut pas faire pas
d’héritage.
Exemple :
<?php
$membre = new Membre();
$membre->setPseudo('M@teo21'); // OK car setPseudo est public
$membre->pseudo = 'M@teo21'; // Interdit car $pseudo est private
?>
Protected est identique à private mais il y a une différence lorsqu'on hérite de la classe. Par
exemple, si on définit la variable $email comme protected dans la classe Membre, cela signifie que
les classes qui en héritent (comme Admin) auront le droit d'y accéder. Sinon, en private, elles
n'auraient pas pu les appeler directement.
- L'ENCAPSULATION :
Enoncé : Toutes les variables d'une classe doivent toujours être privées ou protégées.
Il est en général recommandé d'utiliser plutôt protected que private, surtout si vous pensez
hériter de la classe. En effet, leur fonctionnement est le même mais protected est plus souple si
vous avez un jour des classes filles. Le but de l'encapsulation est de masquer à la personne qui
utilise la classe son fonctionnement interne.
- Vue : cette partie se concentre sur l'affichage. Elle ne fait presque aucun calcul et se contente de
récupérer des variables pour savoir ce qu'elle doit afficher. On y trouve essentiellement du code
HTML mais aussi quelques boucles et conditions PHP très simples, pour afficher par exemple la
61 liste des messages des forums.
- Contrôleur : cette partie gère la logique du code qui prend des décisions. C'est en quelque sorte
l'intermédiaire entre le modèle et la vue : le contrôleur va demander au modèle les données, les
analyser, prendre des décisions et renvoyer le texte à afficher à la vue. Le contrôleur contient
exclusivement du PHP. C'est notamment lui qui détermine si le visiteur a le droit de voir la page
ou non (gestion des droits d'accès).
Modèle
Contrôleur
Utilisateur Vue
Il faut tout d'abord retenir que le contrôleur est le chef d'orchestre : c'est lui qui reçoit la requête du
visiteur et qui contacte d'autres fichiers (le modèle et la vue) pour échanger des informations avec
eux.
Dans chacun d'eux, vous pouvez créer un sous-répertoire pour chaque « module » de votre site :
forums, blog, minichat, etc. Pour le moment, créez un répertoire blog dans chacun de ces dossiers.
On aura ainsi l'architecture suivante :
- modele/blog : contient les fichiers gérant l'accès à la base de données du blog ;
- vue/blog : contient les fichiers gérant l'affichage du blog ;
- controleur/blog : contient les fichiers contrôlant le fonctionnement global du blog.
a) LE MODELE :
Créez un fichier get_billets.phpdans modele/blog. Ce fichier contiendra une fonction dont le rôle
sera de retourner un certain nombre de billets depuis la base de données. C'est tout ce qu'elle
fera.
Code : PHP
Il s'agit d'une fonction qui prend en paramètre un offset et une limite. Elle retourne le nombre de
billets demandés à partir du billet no offset. Ces paramètres sont transmis à MySQL via une requête
préparée.
Je n'ai pas utilisé la méthode traditionnelle à laquelle vous avez été habitués pour transmettre les
paramètres à la requête SQL. En effet, j'ai utilisé ici la fonction bindParam qui me permet de préciser que le
paramètre est un entier (PDO$\colon\colon$PARAM_INT). Cette méthode alternative est obligatoire dans le
cas où les paramètres sont situés dans la clause LIMIT car il faut préciser qu'il s'agit d'entiers.
b) LE CONTROLEUR :
Dans controleur/blog, créez un fichier index.php qui représentera la page d'accueil du blog
<?php
// On demande les 5 derniers billets (modèle)
include_once('modele/blog/get_billets.php');
$billets = get_billets(0, 5);
// On effectue du traitement sur les données (contrôleur)
// Ici, on doit surtout sécuriser l'affichage
foreach($billets as $cle => $billet){
$billets[$cle]['titre'] = htmlspecialchars($billet['titre']);
$billets[$cle]['contenu'] =nl2br(htmlspecialchars($billet['contenu']));
}
// On affiche la page (vue)
include_once('vue/blog/index.php');
c) LA VUE
Vous pouvez créer un fichier index.php dans vue/blog et y insérer le code suivant :
Code : PHP
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Mon blog</title>
<link href="vue/blog/style.css" rel="stylesheet" />
</head>
<body>
<h1>Mon super blog !</h1>
<p>Derniers billets du blog :</p>
<?php
Code : PHP
<?php
include_once('modele/connexion_sql.php');
if (!isset($_GET['section']) OR $_GET['section'] == 'index')
{
include_once('controleur/blog/index.php');
}
Avant d'enregistrer l'utilisateur dans la base de données, il faudra penser à faire un certain nombre
de vérifications.
else{
session_start();
Si le membre souhaite être reconnecté automatiquement (ce qu'il est conseillé de faire uniquement
sur un ordinateur personnel, et non sur un ordinateur partagé avec d'autres personnes !), je vous
invite à créer deux cookies qui stockeront respectivement :
- Le pseudonyme ;
- Le mot de passe haché.
Ainsi, si un visiteur non connecté qui possède ces deux cookies se présente, vous n'aurez qu'à
vérifier si un membre correspond à ces informations en base de données et vous pourrez le
connecter automatiquement, sans qu'il ait eu à utiliser le formulaire de connexion. Là encore, on
prend une certaine mesure de sécurité en stockant le mot de passe haché dans un cookie et non le
vrai mot de passe.
LA PAGE DE DECONNEXION
Au bout d'un certain temps d'inactivité, la session du membre est automatiquement détruite
et il se retrouve déconnecté. S'il charge à nouveau une page du site, il apparaîtra donc
déconnecté, à moins qu'il ait activé la connexion automatique qui aura pour effet de le
reconnecter immédiatement et de manière transparente grâce à ses cookies.
<?php
session_start();
// Suppression des variables de session et de la session
$_SESSION = array();
session_destroy();
// Suppression des cookies de connexion automatique
setcookie('login', '');
setcookie('pass_hache', '');
- Proposez au membre s'il le souhaite de changer ses identifiants : son pseudonyme et son mot de
passe. Il est courant qu'un membre désire changer de pseudonyme quelque temps après s'être
inscrit, mais surtout il est vital qu'il puisse changer son mot de passe à tout moment au cas où
celui-là serait compromis ! Même si le membre est déjà connecté, je vous conseille de lui
demander à nouveau son mot de passe actuel avant de l'autoriser à en changer, par mesure de
sécurité.
- Donnez au membre la possibilité de choisir parmi plusieurs options de navigation. Tout le
67 monde n'utilise pas votre site web de la même manière, peut-être que certains souhaiteraient
avoir un menu en haut des pages plutôt qu'un autre, peut être que d'autres préfèreraient
naviguer avec un design sombre, etc.
- Pourquoi ne pas commencer à mettre en place vos propres forums sur votre site web ? Chaque
message des forums sera associé à un id de membre : il suffira de créer un champ id_membre
dans la table des messages. Vous pourrez alors utiliser les jointures pour récupérer
automatiquement le pseudonyme du membre et sa signature à chaque message posté !
P{
border-radius: 10px 5px 10px 5px;
}
Les valeurs correspondent aux angles suivants dans cet ordre :
1. en haut à gauche ;
2. en haut à droite ;
3. en bas à droite ;
4. en bas à gauche
MYSQL
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
STOCKER DES INFORMATIONS DANS UNE BASE DE DONNEES
La base de données (BDD) est un système qui enregistre des informations. MYSQL est un
système de gestion des bases de données. Pour parler à un SGBD on utilise le langage SQL.
- PHPADMIN :
68 phpMyAdmin est un outil qui nous permet de visualiser rapidement l'état de notre
base de données ainsi que de la modifier, sans avoir à écrire de requêtes SQL .
Les opérations utiles ou les onglets dans les BDD sont :
Afficher : affiche le contenu de la table.
Structure: présente la structure de la table (liste des champs).
Insérer : permet d'insérer de nouvelles entrées dans la table.
SQl : lorsqu’on veut exécuter des requêtes SQL pour demander à MySQL de faire
quelque chose.
Importer : Utilisé pour envoyer un fichier de requêtes (un fichier contenant des
requêtes SQL) et généralement du type .sql. Ce fichier peut par exemple contenir les
requêtes permettant de recréer notre BDD.
Exporter : Utilisé pour créer un fichier de requêtes SQL indiquant à MYSQL comment
recréer ma BDD sur internet par exemple une fois importé. Elle permet aussi de
créer une copie de sauvegarde de sa BDD sous forme de fichier possédant l’extension
.sql au cas cette dernière venait à être supprimée.
NB : Sélectionner structure et données et transmettre on laisse les options par défaut.
Pour recréer sa BDD sur son site web il faut d’abord accéder à phpAdmin de son
hébergeur en suit chercher importer.
Opérations : Elle permet de
changer le nom de la table : indiquez le nouveau nom pour cette table ;
déplacer la table vers : si vous voulez placer cette table dans une autre BDD;
copier la table : faire une copie de la table, dans une autre base ou dans la
même (attention : dans ce cas, il faudra qu'elle ait un nom différent) ;
optimiser la table : à force d'utiliser une table, surtout si elle est grosse, on
finit par avoir des « pertes » qui font que la table n'est plus bien organisée.
Un clic là-dessus et hop ! c'est de nouveau arrangé.
Suprimer : Pour supprimer la totalité de la table (structure et données), cliquez sur
cet onglet. Irréversible (ATTENTION).
LIRE DES DONNEES CONTENUES DANS UNE BDD
- SE CONNECTER A LA BASE DE DONNEES EN PHP :
Pour établir une connexion avec la BDD on utilise PDO à qui on doit donner quatre
renseignements qui sont :
<?php
$bdd = new PDO('mysql:host=localhost; dbname= ', 'login, 'password');
69 ?>
$bdd n’est pas vraiment une variable mais plutôt un objet représentant la connexion à la
BDD.
Exemple d’utilisation :
Le code ci-dessous affiche uniquement les noms des jeux vidéos
<?php
try{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
Cette requête va sélectionner toutes les entrées dans la table jeux_video où le possesseur est Patrick
Exemple:
<?php
try{
$bdd = new PDO('mysql:host=localhost; dbname=test', 'root', '');
}
71 catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
$reponse = $bdd->query('SELECT nom, possesseur FROM jeux_video WHERE
possesseur=\'Patrick\'');
while ($donnees = $reponse->fetch()){
echo $donnees['nom'] . ' appartient à ' . $donnees['possesseur'] .'<br />';
}
$reponse->closeCursor();
?>
Exemple :
<?php
try{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
$reponse = $bdd->query('SELECT nom, prix FROM jeux_video ORDER BY prix');
Traduction : « Sélectionner tous les champs de jeux_video, et ordonner les résultats par prix décroissants ».
Exemple :
$reponse = $bdd->query('SELECT nom FROM jeux_video LIMIT 0, 10');
echo '<p>Voici les 10 premières entrées de la table jeux_video:</p>';
while ($donnees = $reponse->fetch()){
echo $donnees['nom'] . '<br />';
}
$reponse->closeCursor();
- COMBINAISON DE REQUETES :
72 SELECT nom, possesseur, console, prix FROM jeux_video WHERE console='Xbox' OR console='PS2'
ORDER BY prix DESC LIMIT 0,10
Il est important de l’utiliser dans l’ordre WHERE puis ORDER BY puis LIMIT, sinon MySQL ne
comprendra pas votre requête.
<?php
$req = $bdd->prepare('SELECT nom FROM jeux_video WHERE possesseur =?');
?>
En suit on exécute la requête en appelant execute et en lui transmettant la liste des paramètres :
$req->execute(array($_GET['possesseur']));
S’il y a plusieurs marqueurs il faut indiquer les paramètres dans le bon ordre
<?php
$req = $bdd->prepare('SELECT nom FROM jeux_video WHERE possesseur =? AND prix <=?');
$req->execute(array($_GET['possesseur'], $_GET['prix_max']));
?>
AU FINAL ON A:
<?php
try{
$bdd = new PDO('mysql:host=localhost; dbname=test', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
$req = $bdd->prepare('SELECT nom, prix FROM jeux_video WHERE possesseur = ? AND prix <= ? ORDER BY prix');
$req->execute(array($_GET['possesseur'], $_GET['prix_max']));
echo '<ul>';
while ($donnees = $req->fetch()){
echo '<li>' . $donnees['nom'] . ' (' . $donnees['prix'] . 'EUR)</li>';
}
echo '</ul>';
$req ->closeCursor();
?>
- Traquer les erreurs dans une requête : Pour cela on ajoute un autre paramètre.
73 <?php
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root',
'password',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
?>
Exemple :
INSERT INTO jeux_video(ID, nom, possesseur, console, prix, nbre_joueurs_max, commentaires) VALUES('',
'Battlefield 1942','Patrick', 'PC', 45, 50, '2nde guerre mondiale')
Utilisons cette requête SQL au sein d'un script PHP. Cette fois, au lieu de faire appel à query() (que
l'on utilisait dans le chapitre précédent pour récupérer des données), on va utiliser exec()qui est
prévue pour exécuter des modifications sur la base de données.
APPLICATION EN PHP
<?php
try{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
// On ajoute une entrée dans la table jeux_video
$bdd->exec('INSERT INTO jeux_video(nom, possesseur, console, prix,nbre_joueurs_max,
commentaires) VALUES(\'Battlefield 1942\',\'Patrick\', \'PC\', 45, 50, \'2nde guerre
mondiale\')');
echo 'Le jeu a bien été ajouté !';
?>
Le code ci-dessus ajoute une entrée à la BDD
WHERE est indispensable car c’est lui qui indique quelle entrée modifier
74
Application en PHP :
<?php
$bdd->exec('UPDATE jeux_video SET prix = 10, nbre_joueurs_max = 32WHERE nom = \'Battlefield 1942\'');
?>
Lorsqu'on utilise UPDATE ou DELETE, il faut penser à filtrer avec un WHERE sinon toute la table sera
affectée.
<body>
<form action="minichat_post.php" method="post">
75 <p>
<label for="pseudo">Pseudo</label>: <input type="text" name="pseudo"
value="$_SESSION[‘pseudo’]"id="pseudo" /><br />
<label for="message">Message</label>:
<input type="text" name="message" id="message" /><br />
<input type="submit" value="Envoyer" />
</p>
</form>
<?php
// Connexion à la base de données
try{
$bdd = new PDO('mysql:host=localhost; dbname=test', 'root', '');
}
catch(Exception $e){
die('Erreur : '.$e->getMessage());
}
- LOWER : convertir en minuscules : Cette fonction à l'effet inverse : le contenu sera entièrement
écrit en minuscules.
SELECT LOWER(nom) AS nom_min FROM jeux_video
Cette fois, le jeu « Sonic » sera renvoyé sous la forme « sonic » dans un champ nommé nom_min.
- LENGTH : compter le nombre de caractères : Vous pouvez obtenir la longueur d'un champ avec la
fonction LENGTH() :
SELECT LENGTH(nom) AS longueur_nom FROM jeux_v
LES FONCTIONS D'AGREGAT: ces fonctions permettent d’effectuer des calculs sur l'ensemble de
la table pour retourner une valeur. Par exemple, calculer la moyenne des prix retourne une
valeur : le prix moyen.
SELECT AVG(prix) AS prix_moyen FROM jeux_video
AVG calcul la valeur moyenne d’un champ en occurrence le champ prix
Application :
<?php
$reponse = $bdd->query('SELECT AVG(prix) AS prix_moyen FROM jeux_video');
$donnees = $reponse->fetch();
echo $donnees['prix_moyen'];
$reponse->closeCursor();
?>
- SUM : additionner les valeurs : La fonction SUM permet d'additionner toutes les valeurs d'un
champ. Ainsi, on pourrait connaître la valeur totale des jeux appartenant à Patrick :
SELECT SUM(prix) AS prix_total FROM jeux_video WHERE possesseur='Patrick'
- MAX : retourner la valeur maximale : Cette fonction analyse un champ et retourne la valeur
77 maximale trouvée. Pour obtenir le prix du jeu le plus cher :
SELECT MAX(prix) AS prix_max FROM jeux_video
- MIN : retourner la valeur minimale : De même, on peut obtenir le prix du jeu le moins cher :
SELECT MIN(prix) AS prix_min FROM jeux_video
SELECT AVG(prix) AS prix_moyen, console FROM jeux_video GROUP BY console HAVING prix_moyen <= 10
Avec cette requête, on récupère uniquement la liste des consoles et leur prix moyen si ce
prix moyen ne dépasse pas 10 euros.
HAVING ne doit s'utiliser que sur le résultat d'une fonction d'agrégat. Voilà pourquoi on l'utilise ici
sur prix_moyen et non sur console. Oui, mais pas au même moment. WHERE agit en premier, avant
le groupement des données, tandis que HAVING agit en second, après le groupement des données.
On peut d'ailleurs très bien combiner les deux, regardez l'exemple suivant :
SELECT pseudo, message, date FROM minichat WHERE date = '2010-04-02 15:28:22'
SELECT pseudo, message, date FROM minichat WHERE date >= '2010-04-02 15:28:22'
Le 2eme cas sélectionne tous les messages posté a parti du'2010-04-02 15:28:22'
78
SELECT pseudo, message, date FROM minichat WHERE date BETWEEN '2010-04-02 00:00:00' AND
'2010-04-18 00:00:00'
Pour insérer une entrée contenant une date, il suffit de respecter le format de date de la base de
données :
INSERT INTO minichat(pseudo, message, date) VALUES('Mateo', 'Message!', '2010-04-02 16:32:22')
On pourrait ensuite afficher la date en PHP dans l'ordre que l'on souhaite à l'aide du découpage en
champs que l'on vient de faire :
<?php
echo $donnees['jour'] . '/' . $donnees['mois'] . '/' . $donnees['annee'] . '...';
?>
79
UN BLOG AVEC DES COMMENTAIRES
Voici la structure que je propose pour la table billets :
- id (int) : identifiant du billet, clé primaire et auto_increment ;
- titre (varchar 255) : titre du billet ;
- contenu (text) : contenu du billet ;
- date_creation (datetime) : date et heure de création du billet.
<?php
// Connexion à la base de données
try
{
$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
// On récupère les 5 derniers billets
$req = $bdd->query('SELECT id, titre, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à
%Hh%imin%ss\') AS date_creation_fr FROM billets ORDER BY date_creation DESC LIMIT 0,5');
while ($donnees = $req->fetch())
{
?>
- nl2br() : Permet de convertir les retours à la ligne en balises HTML <br />.
Code : PHP
<?php echo realpath('chemin.php'); ?>
3. Envoyez ce fichier sur votre serveur avec votre logiciel FTP, et placez-le dans le dossier que
vous voulez protéger.
4. Ouvrez votre navigateur et allez voir ce fichier PHP. Il vous donne le chemin absolu, par
exemple dans mon cas :/home/site/www/admin/chemin.php
5. Copiez ce chemin dans votre .htaccess, et remplacez le chemin.php par .htpasswd, ce qui nous
donne au final par exemple :/home/site/www/admin/.htpasswd
6. Supprimez le fichier chemin.php de votre serveur, il ne nous sert plus à rien maintenant qu'il
nous a donné le chemin absolu.
Créer le .htpasswd :
Le .htpasswd va contenir la liste des personnes autorisées à accéder aux pages du dossier. On y
inscrit une personne par ligne, sous la forme :
login: mot_de_passe_crypté
MEMENTO DE HTML5/CSS3, PHP ET MYSQL KAMDEM KAMDEM LANDRY GAETAN
MEMENTO DE HTML5/CSS3, PHP ET MYSQL
AU FINAL : Le code (code permettant de crypter le mot de passe) associé à .htpasswd est de la
forme :
<?php
83 if (isset($_POST['login']) AND isset($_POST['pass']))
{
$login = $_POST['login'];
$pass_crypte = crypt($_POST['pass']); // On crypte le mot de passe
echo '<p>Ligne à copier dans le .htpasswd :<br />' . $login .':' . $pass_crypte . '</p>';
}
else // On n'a pas encore rempli le formulaire
{
?>
<p>Entrez votre login et votre mot de passe pour le crypter.</p>
<form method="post">
<p>
Login : <input type="text" name="login"><br />
Mot de passe : <input type="text" name="pass"><br /><br />
<input type="submit" value="Crypter !">
</p>
</form>
<?php
}
?>
On peut maintenant considérer que c’est tables sont reliées à travers ces ID de propriétaires,
mais il est important de savoir que à ce niveau MYSQL ne fait pas encore de relation entre les
tables. Il va falloir lui expliquer cette relation dans une requête SQL d’où l’intervention des
jointures.
Code : PHP
SELECT nom, prenom FROM proprietaires, jeux_video
Dans le cas des champs ambigus (même champs dans différentes tables) on utilise plutôt :
Ainsi, on demande clairement de récupérer le nom du jeu et le prénom du propriétaire avec cette requête.
NB : le champ nom est ambigu car il apparait dans les deux tables.
Code :PHP
SELECT jeux_video.nom, proprietaires.prenom
FROM proprietaires, jeux_video
WHERE jeux_video.ID_proprietaire = proprietaires.ID
- Utiliser les alias : il est fortement recommander d’utiliser les alias quand on fait des jointures.
SELECT jeux_video.nom AS nom_jeu, proprietaires.prenom AS prenom_proprietaire
85 FROM proprietaires, jeux_video
WHERE jeux_video.ID_proprietaire = proprietaires.ID
Cette fois, on récupère les données depuis une table principale (ici, proprietaires) et on fait une
jointure interne (INNER JOIN) avec une autre table (jeux_video). La liaison entre les champs est
faite dans la clause ON un peu plus loin.
Exemple :
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
INNER JOIN jeux_video j
ON j.ID_proprietaire = p.ID
WHERE j.console = 'PC'
ORDER BY prix DESC
LIMIT 0, 10
Code : PHP
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
LEFT JOIN jeux_video j
ON j.ID_proprietaire = p.ID
86
proprietaires est appelée la « table de gauche » et jeux_video la « table de droite ». Le LEFT JOIN
demande à récupérer tout le contenu de la table de gauche, donc tous les propriétaires, même si
ces derniers n'ont pas d'équivalence dans la table jeux_video.
Code : PHP
SELECT j.nom nom_jeu, p.prenom prenom_proprietaire
FROM proprietaires p
RIGHT JOIN jeux_video j
ON j.ID_proprietaire = p.ID
La table de droite est « jeux_video ». On récupèrerait donc tous les jeux, même ceux qui n'ont
pas de propriétaire associé.