Bases PHP
Architecture logicielle
Il faut un serveur Web, faisant tourner PHP, pour interpréter les scripts côté client de la page. Vous pouvez utiliser :
Toutes les solutions web intégrant (Apache/PHP/MariaDB) : Wampp, Lampp, Xampp, Mampp EasyPHP…
- Sous Windows, préférer une solution portable indépendante du système (Xampp)
- Et sinon, PHP peut aussi servir de serveur Web :
php -S 127.0.0.1:8000
Dans tous les cas, ne pas oublier de démarrer le serveur Http (Apache ou PHP).
-- phpInfo
- Récupération des informations liées à la configuration de PHP
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>phpInfo</title> </head> <body> <?php phpinfo(); ?> </body> </html>
-- Variables
- Les variables php n'ont pas besoin d'être déclarées ce qui ne facilite généralement pas le débogage…
- Le type est déterminé par affectation du contenu de la variable
- Une variable commence par le signe $
Nommage : Un nom de variable
- doit commencer par une lettre majuscule ou minuscule ou par un tiret bas “_” (touche 8 de votre clavier)
- peut comporter des lettres, des chiffres et des tiret bas “_”
- ne doit pas comporter d'espaces.
- ne doit pas commencer par un chiffre
- ne doit pas comporter de caractères spéciaux comme: @ ou # …
- ne doit pas comporter de tiret, soit le signe (-) touche 6 du clavier
//comment sur 1 ligne et /*comment sur plusieurs lignes*/
pour en expliquer la signification
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Variables</title> </head> <body> <?php //un entier $i=5; echo($i); //un booléen $b=true; echo($b); ?> <br> <?php $str="1 chaîne"; echo "\$str est : ".gettype($str).".<br>\n"; echo $str."<br>"; echo $i." accessible depuis un autre bloc de script<br>\n"; echo "Ajout d'un entier et d'une chaîne : ".($i+$str)."<br>\n"; $i="devenu une chaîne"; echo "La variable $i est devenue une chaîne : ".$i."<br>\n"; echo 'La variable $i est devenue une chaîne : '.$i."<br>\n"; ?> </body> </html>
- Utiliser gettype($variable) qui retourne le type d'une variable et var_dump($variable) qui permet d'en afficher le contenu détaillé pour mieux comprendre le rôle de l'affectation en php.
- Afficher le code source de votre page dans le navigateur
- Ajouter le caractère \n après les <BR> et afficher le code source de votre page dans le navigateur
-- Opérateurs
Arithmétiques
| Opérateur | Rôle | Type de contenu |
|---|---|---|
| $a + $b | addition | Numériques : entiers, décimaux… |
| $a - $b | soustraction | |
| $a * $b | multiplication | |
| $a / $b | division | |
| $a % $b | modulo | |
| - $a | opposé |
Sur les chaînes
| Opérateur | Rôle | Type de contenu |
|---|---|---|
| $s1 . $s2 | Concaténation | Chaînes |
| $s1 .= $s2 | affectation concaténante |
Affection
| Opérateur | Équivalant |
|---|---|
| $a += $b | $a = $a + $b |
| $a -= $b | $a = $a - $b |
| $a *= $b | $a = $a * $b |
| $a /= $b | $a = $a / $b |
| $a %= $b | $a = $a % $b |
| $s .= $s1 | $s = $s . $s1 |
-- Structures de contrôle
-- Condition
if
<?php
if ($a > $b) {
echo "a est plus grand que b";
}
?>
Si le code à exécuter ne comporte qu'une seule ligne, le bloc défini par { et } est facultatif.
Version contractée :
<?php $max=($a > $b)?$a:$b; ?>
if/else
<?php
if ($a > $b) {
echo "a est plus grand que b";
} else {
echo "a est plus petit ou égal à b";
}
?>
if/else/elseif
<?php
if ($a > $b) {
echo "a est plus grand que b";
} elseif ($a < $b) {
echo "a est plus petit que b";
} else {
echo "a est égal à b";
}
?>
-- Boucles
while
$i = 1;
while ($i <= 10) {
echo $i++; /* La valeur affichée est $i avant l'incrémentation
(post-incrémentation) */
}
?>
for
La même boucle avec un for
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
?>
-- Fonctions
Déclaration
Une fonction se déclare de la manière suivante :
<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n){
echo "Exemple de fonction.\n";
return $retval;
}
?>
Aucun typage des variables, donc les arguments ne sont pas plus typés que le retour éventuel.
<?php
function concat($s1, $s2){
return $s1.$s2;
}
?>
Les fonctions peuvent prendre des paramètres optionnels (à la fin)
Dans l'exemple qui suit, $arg2 est un paramètre optionnel qui prend la valeur true s'il est ommis
<?php
function getValue($arg1, $arg2=true){
if($arg2)
return $arg1;
else
return "";
}
?>
Appels de fonctions
Une fonction peut être appelée dans la page où elle est déclarée (ou incluse on le verra plus tard), avant même sa déclaration.
Exemple d'appels :
<?php
$a=getValue(5,true);
$b=getValue(2);
$s=getValue("Chaîne",false);
echo(getValue("Chaîne"));
?>
-- Requête HTTP
-- Récupération des données passées dans l'URL : méthode GET
Les données passées dans l'URL, par la méthode get, sous la forme :
http:127.0.0.1/tps/tp1/maPage.php?module=M2105&dut=RT
sont récupérées grâce au tableau associatif $_GET dans la page cible de la requête :
<?php echo $_GET["dut"]; echo $_GET["module"]; ?>
-- Récupération des données d'un formulaire : méthode POST (GET déconseillé)
Un formulaire
<div> <form method="post" action="<?php echo $_SERVER['PHP_SELF']?>"> <fieldset style="vertical-align: middle;"><legend>Connexion :</legend> <label for="nom">Nom : </label><input type="text" name="nom" id="nom"> <label for="password">Mot de passe : </label><input type="password" name="password" id="password"> <input type="submit" value="Valider"> <hr> <div id="remember"><input type="checkbox" id="ckRemember" name="ckRemember"><label for="ckRemember">Mémoriser mes informations de connexion</label></div> </fieldset> </form> </div>
Récupération des données postées
Les données envoyées par la méthode post, généralement depuis un formulaire sont récupérées grâce au tableau associatif $_POST dans la page cible de la requête :
<?php var_dump($_POST); ?>
| Expression | Rôle |
|---|---|
| $_SERVER['PHP_SELF'] | URL de la page en cours (le formulaire est ici posté vers la page qui le contient) |
| $_POST | Tableau associatif des données postées |
| $_POST[“nom”] | Permet l'accès à la variable nom postée |
| isset($_POST[“nom”]) | Teste l’existence de la variable nom dans les en-têtes de la requête |
| $_SERVER['REQUEST_METHOD'] | Variable server donnant la méthode utilisée (POST ou GET) |
Traitement du formulaire
<?php
//Traitement du POST
if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST'){
echo "Votre nom : ".$_POST["nom"]."<br>";
echo "Votre mot de passe (hasché en sha1) : ".sha1($_POST["password"])."<br>";
if(isset($_POST["ckRemember"]))
echo "Mémorisation des infos : ".(($_POST["ckRemember"]=="on")?"oui":"non");
}
else {
//Affichage du Formulaire
?>
<div>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
<fieldset style="vertical-align: middle;"><legend>Connexion :</legend>
<label for="nom">Nom : </label><input type="text" name="nom" id="nom">
<label for="password">Mot de passe : </label><input type="password" name="password" id="password">
<input type="submit" value="Valider">
<hr>
<div id="remember"><input type="checkbox" id="ckRemember" name="ckRemember"><label for="ckRemember">Mémoriser mes informations de connexion</label></div>
</fieldset>
</form>
</div>
<?php }?>
Rq :
A noter que le mot de passe n'est haché en sha1 qu'à sa réception sur le serveur, il passe donc en clair sur le réseau.
