SPARQL Protocol and RDF Query Language/Travail pratique/PHP les boucles et opérateurs
Introduction
[modifier | modifier le wikicode]Dans ce TP, nous allons acquérir quelques bases de programmation PHP pour traiter des données plus facilement par la suite.
À savoir avant de commencer
[modifier | modifier le wikicode]Les tableaux
[modifier | modifier le wikicode]Un tableau est :
- un moyen de stocker plusieurs variables, selon un plan qui vous paraît logique.
- comparable à un meuble avec ses tiroirs.
- Dans le tiroir 0 (oui, le tableau commence par le tiroir zéro), vous rangez la variable lundi par exemple,
- dans le tiroir 1, vous rangez la variable mardi, etc.
En informatique, on appelle :
- index ou indice le numéro de tiroir (la position de la variable dans le tableau),
- valeur, la valeur de la variable entreposée.
Construire un tableau
[modifier | modifier le wikicode]Voici la syntaxe d'un tableau tout simple pour construire le tableau des jours de la semaine
<?php
$semaine=array('lundi','mardi','mercredi','jeudi','vendredi','samedi','dimanche');
?>
Par cette simple ligne, vous venez de construire un tableau.
- $semaine est son nom
- $semaine, via la commande array, sait qu’il est un tableau
- Vous lui avez affecté des valeurs, ().
- Et ici, par défaut, l'index commence à 0, donc dimanche aura pour index : 6 (et non 7).
Un tableau est une variable puisqu’il commence par $, mais une variable complexe et organisée.
Convoquer une valeur
[modifier | modifier le wikicode]Syntaxe: $semaine[index]
Exemple : $semaine[2] : sera mercredi. Et ainsi de suite...
Pour vérifier, testez-le :
<?php
echo $semaine[2];
?>
Nous avons construit un tableau $semaine contenant des variables string (les jours de la semaine) et des indices numériques (0, 1, 2, etc.) pour atteindre ses valeurs.
Mais on peut aussi ranger des valeurs numériques dans un tableau.
Exemple avec ce tableau qui stocke quelques années marquantes de l'histoire de France...
<?php
$dates=array(1789,1830,1848,1851,1871,1914,1918,1936,1939,1945,1958,1968);
echo $dates[3];
?>
Exercice : echo $dates[3] affichera donc ?
La commande echo renverra : 1851
L'index 3 pointe sur la 4éme valeur dans le tableau, car les index commencent à zéro.
- 0 => 1789
- 1 => 1830
- 2 => 1848
- 3 => 1851
- etc.
Au sein de votre code, il est bon d'ajouter quelques commentaires. Ils sont destinés aux programmeurs, qui remettent le nez dans leurs programmes parfois dix ans plus tard, et qui ne savent plus pourquoi ou comment ils ont conçu leur code.
Il est même de coutume de ne plus rédiger de documentation extérieure au code (car très rapidement obsolète), mais de l'écrire dans le code. Des outils, comme PHPDocumentorpermettent ensuite de générer la documentation PDF, HTML, etc.
Il y a 2 syntaxes pour écrire des commentaires en PHP.
- Petit commentaire sur une seule ligne : // en début de ligne
- Commentaire sur plusieurs lignes : /* au début et */ à la fin.
Exemple :
<?php
/*
TOUS LES TABLEAUX
TOUTES LES DATES
TOUS LES PAYS
*/
//tableau dates marquantes en France
$datesF = array(1789,1830,1848,1851,1871,1914,1918,1936,1939,1945,1958,1968);
//tableau dates marquantes aux États-Unis
$datesUS = array(1861,1865,1917,1918,1929,1934,1941,1945,1959,1975);
?>
Les tableaux associatifs
[modifier | modifier le wikicode]Ici, la seule différence par rapport à un tableau simple, c’est que l'index n'est plus numérique, mais est lui-même une variable string.
Par exemple, votre tableau veut stocker une adresse, c'est-à-dire :
- un nom
- un prénom
- un numéro
- une rue
- un code postal
- une ville (etc.)
On peut donc construire un tableau associatif pour stocker une adresse :
<?php
//On signale que notre variable $adresse sera un tableau
$adresse = array();
//on le remplit
$adresse['nom']='DUPONT';
$adresse['prenom']='Mickaël';
$adresse['numéro'] = 12;
$adresse['rue'] = 'rue des églantines';
$adresse['cp'] = 93000;
$adresse['ville'] = 'SAINT-DENIS';
?>
'numéro' est ici un index du tableau adresse. 12 est la valeur stockée à l'index 'numéro'.
<?php
//Pour convoquer 12
echo $adresse['numéro'];
?>
Les tableaux à plusieurs dimensions
[modifier | modifier le wikicode]On va maintenant faire un tableau d'adresses, c’est-à-dire construire un tableau de tableaux :
<?php
//construction de mon tableau $agenda
$agenda=array($adresse0, $adresse1, $adresse2, $adresse3 ,$adresse4);
?>
Voici la méthode que nous connaissons :
<?php
//récupérer l'adresse totale de Mickaël
$adresse4= $agenda[4];
/*
En effet, l'adresse de Mickaël se trouve dans notre agenda à l'index 4 (l'index numérique construit automatiquement)...
*/
//Récupérer enfin le nom de famille de Mickaël
echo $adresse4['nom'];
?>
Mais voici la méthode la plus simple et la plus rapide :
<?php
echo $agenda[4]['nom'];
?>
Les boucles
[modifier | modifier le wikicode]La boucle for
[modifier | modifier le wikicode]Une boucle for, c’est une boucle qui dit "pour chaque valeur de tant à tant, recommence".
La syntaxe de cette boucle est la suivante :
<?php
//Copiez-moi 50 fois
//pour i égal zéro, i inférieur à 50, i plus plus
for($i=0;$i<50;$i++){
echo 'Copie '.$i+1.'<br />';
}
?>
Traduction :
- pour $i de 0 à 49, écrire Copie $i+1 (pour ne pas afficher 0 au début). Cela affichera "Copie 1<br />Copie 2<br />Copie 3<br />Copie 4<br />Copie 5<br />Copie 6<br />...Copie 50<br />."
- $i commence à 0 et non à 1, comme pour les index des tableaux.
- $i<50, car il faut penser à mettre strictement inférieur à la valeur de la limite supérieure de la boucle.
- $i++ signifie $i=$i+1 c'est-à-dire augmente notre compteur de 1 à chaque tour de boucle, c’est l'incrémentation.
La boucle foreach
[modifier | modifier le wikicode]L'idéal pour parcourir les valeurs d'un tableau, c’est une boucle.
La boucle foreach (pour chaque élément) présente l'avantage de parcourir la totalité d'un tableau, même si l’on n'a aucune idée du nombre d'éléments qu’il contient.
Reprenons notre tableau des jours de la semaine, comment le parcourir ?
<?php
//construction du tableau semaine
$semaine=array('lundi','mardi','mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche');
//parcours du tableau
foreach($semaine as $jour){
echo '- '.$jour.'<br />';
}
/*
Pour chaque valeur du tableau $semaine, compose la variable $jour et affiche le jour puis va à la ligne...
*/
?>
On considère le tableau suivant :
<html>
<head><title>Mon agenda</title></head>
<body>
<?php
$adresse0 = array();
//on le remplit
$adresse0 ['nom']='ZERO';
$adresse0 ['prenom']='Toto';
$adresse0 ['num'] = 10;
$adresse0 ['rue'] = 'rue des rosiers';
$adresse0 ['cp'] = 94000;
$adresse0 ['ville'] = 'IVRY-SUR-SEINE';
$adresse1 = array();
$adresse1 ['nom']='UN';
$adresse1 ['prenom']='Anne';
$adresse1 ['num'] = 11;
$adresse1 ['rue'] = 'rue des moineaux';
$adresse1 ['cp'] = 57000;
$adresse1 ['ville'] = 'METZ';
$adresse2 = array();
$adresse2 ['nom']='DEUX';
$adresse2 ['prenom']='Al';
$adresse2 ['num'] = 2;
$adresse2 ['rue'] = 'rue des arbres';
$adresse2 ['cp'] = 88000;
$adresse2 ['ville'] = 'EPINAL';
$adresse3 = array();
//on déclare et remplit l'agenda avec toutes les adresses précédentes :
$agenda=array($adresse0,$adresse1,$adresse2);
?>
</body>
</html>
Ce tableau de tableaux va permettre de faire des boucles imbriquées :
- une boucle pour atteindre chaque adresse
- une boucle pour lire chaque champ dans l'adresse obtenue
<?php
//pour chaque élément de $agenda, il affecte la variable $adresse
foreach($agenda as $adresse){
//pour chaque élément de $adresse, il affecte la variable $element
foreach($adresse as $element){
//il écrit l' $element sur la même ligne avec un tiret et des espaces
echo '- '.$element.' ';
}
//A chaque nouvelle $adresse, sautes une ligne
echo'<br />';
}
?>
Et voici notre agenda qui s'affiche de façon lisible.
Cela va nous être bien utile dès que le nombre des variables dans notre formulaire sera important !
La boucle foreach avec la variable $_POST
[modifier | modifier le wikicode]PHP construit automatiquement un tableau associatif dès que l’on soumet un formulaire.
Ce tableau se nomme $_POST. Chaque élément a pour index le nom d'un élément du formulaire (défini avec l'attribut name) et pour valeur la valeur entrée dans chaque champ par l'utilisateur avant de cliquer sur le bouton 'submit'.
On peut donc parcourir notre tableau de variables POST de cette façon :
<?php
/*pour chaque élément du tableau $_POST,
récupère et affecte la valeur de l'index,
puis récupère et affecte la valeur associée à cet index*/
foreach($_POST as $index=>$valeur){
echo '- '.$valeur.'<br />';
}
?>
Les opérateurs
[modifier | modifier le wikicode]Les opérateurs arithmétiques
[modifier | modifier le wikicode]Initialisation :
- $valeur=5 ; //la variable reçoit 5 (simple = : opérateur d'affectation)
Plus et moins :
- $nombre=(4+6)-2; // $nombre vaudra 8
Multiplier ou diviser :
- $nombre=(4*6)/2; //$nombre vaudra 12
Priorités si vous ne mettez pas de parenthèses, multiplier ou diviser est prioritaire .
- (4+6)*2 est différent de 4+6*2 : Sans parenthèses, cela revient à 16;
Modulo ou ce qui reste après division entière :
- $nombre=6%2; //$nombre renverra 0(car 6 est divisible par 2 donc reste 0)
- $nombre=27%4; //$nombre renverra 3 (car 6x4=24 reste 3)
Les opérateurs de comparaison
[modifier | modifier le wikicode]Égalité
- if ($nombre==4)
Contraire
- if($nombre!=4)
Différent de
- Inférieur : if($nombre<4)
- Supérieur : if($nombre>4)
- Inférieur ou égal : if($nombre<=4)
- Supérieur ou égal : if($nombre>=4)
Les opérateurs logiques
[modifier | modifier le wikicode]Les deux principaux sont ET et OU.
ET
- && pour le 'et' logique (AND fonctionne aussi en PHP)
Exemple : si l'âge est compris entre 15 et 25 ans :
<?php
//Notez les parenthèses imbriquées pour chaque sous-condition
if (($age>=15)&& ($age<=25))
?>
OU
- || (2 fois la touche AltGr+6) pour le 'ou' logique (OR fonctionne aussi en PHP)
Exemple : si une variable contient le texte papa ou maman alors affiche mes parents.
<?php
//Notez les parenthèses imbriquées pour chaque sous-condition
if(($truc=='papa')||($truc=='maman')){
echo 'Mes parents !';
}
?>
Bien utile aussi, la négation, avec le caractère !
<?php
//Notez les parenthèses imbriquées pour chaque sous-condition
if( ! (($truc=='papa')||($truc=='maman'))){
echo 'vous n\'êtes pas mes parents !';
}
?>
Exercices
[modifier | modifier le wikicode]Exercice 1
[modifier | modifier le wikicode]Afficher la valeur des variables que le client vient d'entrer et la valeur (permanente) du bouton valider qui est 'ok'.
Vous pouvez vous aider de ce code qui contient des erreurs et l'insérer dans le fichier monCV.php de votre projet Eclipse :
<?php
echo'Vos données entrées : '.'<br />';
if(isset($POST['Valider'])){
for($POST as $index->$valeur){
echo '- '.$index.' : '.$valeur.'<br />';
}
}
?>
Débugger ce code sans regarder la correction.
La fonction print_r est très pratique pour afficher tout ce que contient un tableau de manière récursive. Exemple avec les données d'un formulaire :
<?php
print_r($_POST);
?>
Voici à quoi doit ressembler votre fichier monCV.php
<?php
echo 'Vos données entrées : '.'<br />';
if(isset($_POST['valider'])){
foreach($_POST as $index=>$valeur){
echo '- '.$index.' : '.$valeur.'<br />';
}
}
?>
Exercice 2
[modifier | modifier le wikicode]On ne veut plus voir 'ok' dans la liste qui s'affiche. Ajouter une condition dans la boucle pour ne plus afficher 'ok'.
Voici à quoi doit ressembler votre fichier monCV.php :
<html>
<head><title>Mon CV</title></head>
<body>
<?php
echo 'Vos données entrées : '.'<br />';
if(isset($_POST['valider'])){
foreach($_POST as $index=>$valeur){
if ($index!='valider'){
echo '- '.$index.' : '.$valeur.'<br />';
}
}
}
//Initialisation des variables
if(isset($_POST['valider'])){
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$adresse = $_POST['adresse'];
$code_postal = $_POST['code_postal'];
$ville = $_POST['ville'];
$telephone = $_POST['telephone'];
$date_debut = $_POST['date_debut'];
$date_fin = $_POST['date_fin'];
$poste = $_POST['poste'];
$societe = $_POST['societe'];
$description = $_POST['description'];
$mot_cle1 = $_POST['mot_cle1'];
$mot_cle2 = $_POST['mot_cle2'];
$mot_cle3 = $_POST['mot_cle3'];
$poste_actuel = $_POST['poste_actuel'] == 'on';
}
//affichage
?>
<b><?php echo $nom.' '.$prenom; ?></b><br />
<b><?php echo $adresse; ?></b><br />
<b><?php echo $code_postal.' '.$ville; ?></b><br />
Tel : <b><?php echo $telephone; ?></b><br>
Expériences : <br />
<?php
if ($poste_actuel == true){
echo '<b>Depuis le '.$date_debut.'</b>';
}else{
echo '<b>Du '.$date_debut.' au '.$date_fin.'</b>';
}
?>
: <?php echo '<b>'.$poste.' ('.$societe.')</b>' ?><br />
<?php echo '<b>'.nl2br($description).'</b><br />' ?>
Mots clés : <b><?php echo $mot_cle1.', '.$mot_cle2.', '.$mot_cle3; ?></b><br />
</body>
</html>