Support proposé par C. Dabancourt, inspiré aussi par des exemples et tutoriels Internet
8.1.5 Exercice avec deux pages : le jeu « plus grand-plus petit » avec Ajax .................................................. 31
8.2 VISUALISER DES TABLES AVEC DATATABLES .................................................................................................. 31
8.3 AFFICHER DES POP-UP DYNAMIQUES ................................................................................................................. 33
8.4 EXERCICE N°4 : REPRENDRE L’APPLICATION « TROMBINOSCOPE ». .................................................................. 34
9 PHP SEANCE N°9 – TRANSACTION & ADODB......................................................................................... 35
9.1 LA BANQUE – LES TRANSACTIONS ..................................................................................................................... 35
9.2 ANALYSER LE CORRIGE DU TP6 ....................................................................................................................... 35
9.3 ANALYSER LE CORRIGE DU TP3 : L’ADAPTER A ADODB ................................................................................. 35
9.4 REPRENDRE LE CORRIGE DU TROMBINOSCOPE : L’ADAPTER A ADODB ........................................................... 35
9.5 PROJET – GESTION DE BATEAUX ....................................................................................................................... 35
10 PHP SEANCE N°10 – SMARTY ...................................................................................................................... 37
10.1 EXERCICE N°0 : TESTER SMARTY ............................................................................................................. 37
10.2 EXERCICE N°1 : TESTER LES EXEMPLES SMARTY ...................................................................................... 37
10.3 EXERCICE N°2 : REPRENDRE TROMBINOSCOPE AVEC SMARTY .................................................................. 37
10.4 EXERCICE N°3 : PROJET – GESTION DE BATEAUX AVEC SMARTY ............................................................... 37
11 PHP SÉANCE N°11 - CMS – 2H ...................................................................................................................... 38
11.1 EXERCICE N°1 : LES CMS ............................................................................................................................ 38
11.2 EXERCICE N°2 : FAIRE UN SITE AVEC SPIP................................................................................................... 38
11.2.1 Création du site ................................................................................................................................. 38
11.2.2 Structuration et données du site : ...................................................................................................... 38
11.2.3 La mise en forme du site (squelette) .................................................................................................. 38
11.3 EXERCICE N°3 : INSERER UNE PAGE PHP DANS SPIP...................................................................................... 38
11.4 EXERCICE N°4 : VOUS POUVEZ ESSAYER DE FAIRE LE MEME TRAVAIL AVEC JOOMLA .................................. 38
12 PHP SEANCE N°12 – UTILISATION D’OUTILS PHP ................................................................................ 39
12.1 PHPCHECKSTYLE ....................................................................................................................................... 39
12.2 INSERER GOOGLEMAP EN PHP .................................................................................................................... 39
12.3 AJAXTERM : UN XTERM VIA LE WEB ............................................................................................................ 39
12.4 GLPI............................................................................................................................................................ 39
http://fr.wikipedia.org/wiki/PHP
Sur le client, sous windows (ou linux), vous avez le programme « VirtualBox »
Sous linux, on parle de LAMP (Linux-Apache-Mysql-Php), les pages sont dans le dossier /var/www/
(configuration de apache).
1. Dans la configuration de l’USB, décochez la case « Enable USB 2.0 (EHCI) controller »
2. Cliquer sur la partie droite [Réseau…]
VirtualBox possède 5 modes réseau: (cf http://www.commentcamarche.net/faq/3759-vmware-et-virtualbox-les-
differents-types-de-reseau)
Non attaché : équivaut à une interface Ethernet sur laquelle aucun câble n'est connecté
NAT : Identique au mode NAT de VMWare.
Adaptateur réseau hôte : Identique au mode Host-only de VMWare, à l'exception de VirtualBox qui ne
fournit pas de serveur DHCP sur ce réseau privé virtuel. Il vous faudra donc configurer les adresses IP à
la main ou bien utiliser un serveur DHCP sur votre machine hôte (machine physique). (Sous Windows, il
y a tftpd32)
Réseau interne : Les machines virtuelles sont reliées entre elles mais isolées de l'extérieur
Bridge (ou "accès par pont"), qui correspond au mode "Bridged" de VMWare: les machines virtuelles
peuvent communiquer totalement entre elles vers l'extérieur via la machine hôte.
Ici, on choisira
le réseau NAT pour la « Carte 1 »
ET le « réseau hôte » (ou host-only adapter) pour la « Carte 2 » (bien activer la carte 2 !)
Vous devez créer un réseau local entre votre ordinateur (client) et le serveur ubuntu.
Sur Client Windows, tapez « ipconfig » en ligne de commande (dans le menu démarrer, en bas à gauche,
tapez « cmd » et un terminal s’ouvrira).
Carte Ethernet VirtualBox Host-Only Network :
Testez le ping entre le client Windows (cmd, puis « ping 192.168.56.101 ») et le serveur Linux.
Rq : si le Windows a un pare-feu : le ping sur linux vers 192.168.56.1 NE FONCTIONNE PAS.
En cas de gros problem (ifconfig eth1 ne marche pas !): cherchez le fichier:
/etc/udev/rules.d/ et effacez celui qui à le suffixe “-persistent-net.rules”, on my Ubuntu 9.04 it’s “70-persistent-
net.rules” – Redémarre la machine virtuelle et recommencez le “ifconfig”
Pour se connecter :
Figure 4 : se connecter
<?php
echo " bonjour " ;
print " tout le monde ";
?>
A faire : aller sur le terminal du serveur (utilisateur irsii, dossier /home/irsii), et testez :
irsii$ cd /home/irsii/TP1/
irsii$ php bonjour.php
Ensuite, avec la fonction « recherche » de votre navigateur, accédez par exemple à la fonction « str_replace ».
rq : il y a une erreur (21.55). Remarquez à l’avant dernière ligne l'usage du « . » pour accoler (juxtaposer) plusieurs
valeurs.
En utilisant la documentation, ajoutez quelques lignes au programme précédent pour tester les fonctions
« isset », « unset », « empty », « is_null »
Lire toute la liste des fonctions traitant des chaînes de caractères « str… » (prendre 10’).
Dans un fichier « exercice3.php », définir une valeur numérique au début (une variable note entre 0 et 20).
Votre programme affiche ensuite si le nombre est pair ou s’il est impair.
Votre programme affiche ensuite « mauvais » si la note est inférieure à 8, « pas bon » si elle est inférieure à 10,
« correct » si elle est entre 10 et 12 inclus, « bon » jusqu’à 16, « TB » jusqu’à 20.
Indication1 :
== != < > <= >= || &&
Égalité Différent Inf strict. Sup strict. Inf ou égal Sup ou égal OU ET
Dans un fichier « exercice6b.php », créez un tableau associatif qui stocke la liste d’étudiants :
$etudiant[0][‘nom’]=”toto” ; $etudiant[0][‘prenom’] =”ptoto” ; $etudiant[0][‘age] =”10” ;
(Créez 4 étudiants de la même façon)
Utiliser une boucle « foreach » pour afficher les données.
http://192.168.56.101/
Attention : si ça ne fonctionne pas : il FAUT ajouter une exception pour éviter de passer par le proxy du navigateur
pour l’adresse 192.168.56.101. Par exemple, avec « firefox », [Outils][option][avancé][réseau][paramètre] et
ajouter l’adresse du serveur (192.168.56.101) dans la liste « no proxy for : »
Le dossier TP1 : tous les droits pour “webadmin”, “apache” peut lire les fichiers presents et le traverser
Le fichier « index.html » : « webadmin » peut le lire et le modifier, « apache » peut seulement le lire.
Créer un compte sur le notepad++, pour que la connexion se fasse avec l’utilisateur “webadmin”, et le
dossier « /var/www/ ».
<html><body>
<?php
echo " bonjour " ;
print " tout le monde ";
?>
</body></html>
http://192.168.56.101/TP1/bonjour2.php
Ps : sous linux, avec le shell, on peut ajouter une ligne assez simplement dans vos fichiers :
A la fin avec un ‘echo’ :
2.4 Exercice n°3 : passage de valeurs entre 2 pages dans un site (1h)
La valeur sera retrouvée dans la page suivante (appel.php) grâce à la variable « $_GET »
< ?php
$a = $_GET[”valeur1”] ;
?>
Remarque : Si vous avez de multiples fois le même input dans un formulaire : utilisez un tableau !
Pour un formulaire avec un tableau, le nom des variables sera indiqué avec « [ ] », par exemple : (il sera ensuite
récupéré en get ou post sous forme de tableau).
<input type=”text” name=”nom[]” value=”valeur1”>
Maintenant, les erreurs de codes (oublie d’un « ; », les erreurs « bêtes » seront affichées).
Tester.php
[perdu]
(ou)
[Gagner]
session_start();
$_SESSION['favcolor'] = 'green';
$_SESSION['animal'] = 'cat';
$_SESSION['time'] = time();
?>
Suivie par
<?php // page2.php
session_start();
// Vous pourriez utiliser la constante SID ici, tout comme dans la page page1.php
echo '<br /><a href="page1.php">page 1</a>';
?>
Exemple de code extrait de la documentation
Webadmin$ cd /var/www/
Webadmin$ tar zxvf phpMyAdmin-3.4.6-all-languages.tar
Webadmin$ mv phpMyAdmin-3.4.6-all-languages/ phpmyadmin
Vous pouvez tester depuis firefox : http://192.168.56.101/phpmyadmin
Se connecter avec « root » et « irsii » (mot de passe de mysql défini lors de l’installation de mysql)
//connexion
$link = mysqli_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD,
DATABASE_NAME) or die(echo "Error " . mysqli_error($link));
3.4 SELECT-DELETE-UPDATE-INSERT
Exemple de doc :
http://www.php.net/manual/fr/mysqli-result.fetch-assoc.php
http://php.net/manual/fr/mysqli-result.fetch-array.php
Rq : vous aurez des centaines d’appels différents à la base dans votre programme. En cas d’erreur, il faut donner
un message à l’utilisateur qui vous permet de savoir (facilement et exactement) où a eu lieu l’erreur ! Chaque
appel doit être différencié avec un code, par exemple « ERR-02-B » avec 01, 02, 03… un numéro de fichier, et
A, B, C… le numéro de la requête dans la page (si vous avez 5 requêtes dans la page 01, les erreurs seront codées
de ERR-01-A à ERR-01-E)
<VirtualHost 192.168.56.101:80>
DocumentRoot "/var/www/irsii/"
ServerName irsii.fr
ServerAlias www.irsii.fr
<Directory />
allow from all
Options +Indexes
</Directory>
</VirtualHost>
Vous devez dire à apache de rendre « enabled » le site « available » avec la commande suivante :
$num=$_GET[”num”] ;
a.php
if ($num==1) $p=”a” ;
else if ($num==2) $p=”b” ;
else if ($num==3) $p=”c” ;
else exit;
b.php
$page= ”module/”.$p.”.php”;
include ($page);
index.php?num=2
c.php
Index.php
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
2) l’étudiant
lors de son premier passage, il doit donner
son mail
son groupe
et cliquer sur sa photo
la photo est identifiée, et déplacée dans un répertoire « photo/numéro du groupe/ »
lors des passages suivants :
il peut visualiser le trombinoscope (choix par groupe, par nom, par prénom)
5.1.1 Faire un dessin précis du site (avec des flèches pour indiquer le passage d’information, le nom
et le numéro associé de chaque page)
EXO2 : Expliquez le principe du client-serveur pour PHP par un dessin & moins de 10 lignes.
EXO2 : Écrire le jeu du pendu « pendu.php ». Le mot sera stocké dans une variable de session.
OU
EXO2 : Écrire un programme « exo2.php » qui permet de saisir dans un menu déroulant (de 1 à 8) le nombre de
champs texte à saisir. Les saisir, valider et les sauvegarder dans une table.
(BDD= « devoir1 », table = « exo2 », champ= « nom » (varchar(20)).
Il sera possible de choisir le nombre de photos sur la page (en nombre de colonnes)
<script type="text/javascript">
function go(){
$.ajax({
type: "POST",
url: "question.php",
data: "valeur=5",
success: function(data){
alert( "Data Saved: " + data );
$('#mabalise').html(data); // javascript remplace le code html de « #mabalise »
}
});
}
</script>
bonjour<br/>
les doublons : <div id="mabalise"></div><br/>
<input type=submit name=action value='recalculer les notes' onclick='go( );' >
</body></html>
Et sur le serveur, la page « question.php » : qui écrit (avec echo) le texte qui sera retourné de manière transparente
à la variable « $data » de la page, et le javascript continue son exécution en success...
<?php
session_start();
if (!isset($_SESSION["nbQ"])) $_SESSION["nbQ"]=1 ;
$v=$_POST["valeur"] ;
$nbQ=$_SESSION["nbQ"];
$_SESSION["nbQ"]=$nbQ+$v;
$data="valeur :".$nbQ;
header("content-type: text/plain");
header("Pragma: no-cache");
header("Expires: 0");
echo ($data);
?>
Tester et comprendre le mécanisme…
<?php
$data = " { \"aaData\": [\n"; //[[1, 2], [11, 22], [111, 222]] }";
/******************************************
$Fnm = "/tmp/mon_fichier.txt";
$inF = fopen($Fnm,"a");
$ptr = ftell($inF);
fwrite($inF,"***\n action= $Query \n ***");
fclose($inF);
******************************************/
...reste à aller voir le fichier « /tmp/mon_fichier.txt »
8.1.5 Exercice avec deux pages : le jeu « plus grand-plus petit » avec Ajax
- Au début, le jeu place un nombre aléatoire dans une variable de session en php (cf « début du jeu » avec ajax).
Ensuite, le joueur dispose de 10 essais pour trouver le nombre. Toujours sur la même page...avec ajax. Qui
retourne si le nombre est ok ou pas...
- la page php peut retourner :
« perdu », « trop grand», « trop petit » ou « gagné »
la page « html » définit les fonctions
function debut( )
et
function essai(nb){
data: "valeur="+nb
if (data=...)...
}
if (!$result) {
echo "ERR02B - Impossible d'exécuter la requête ($requete) dans la base : " .
mysql_error();
exit;
}
$data = "{ \"aaData\": [\n"; //exemple = [[1, 2], [11, 22], [111, 222]]
}";
$i=0;
while ( $aRow = mysql_fetch_array( $result ) )
{
if ($i!=0) $ligne=",\n";
else $ligne="";
$i++;
$ligne=$ligne."[\"".addslashes($aRow['numero'])."\",\"".addslashes($aRow['nom'])."\",\
" "."<input TYPE='submit' value='voir' onclick='voir(".$aRow['id'].");' >"." \",\"
"."<input TYPE='submit' value='suppr' onclick='sup(".$aRow['id'].");' >"." \" ]";
$data=$data.$ligne;
}
$data=$data."\n] }";
header("content-type: text/plain");
header("Pragma: no-cache");
header("Expires: 0");
echo ($data);
$(document).ready(function() {
$('#example').dataTable( {
// "bProcessing": true,
"bServerSide": false,
"aaSorting" : [[2, 'asc']],
"sAjaxSource": "page.php",
"oLanguage": { "sProcessing": "Traitement en cours...",
"sLengthMenu": "Afficher _MENU_ éléments",
"sZeroRecords": "Aucun élément à afficher",
"sInfo": "Affichage de l'élement _START_ à _END_ sur _TOTAL_
éléments",
"sInfoEmpty": "Affichage de l'élement 0 à 0 sur 0 éléments",
"sInfoFiltered": "(filtré de _MAX_ éléments au total)",
"sInfoPostFix": "",
"sSearch": "Rechercher:",
"sUrl": "",
"oPaginate": {
"sFirst": "Premier",
"sPrevious": "Précédent",
"sNext": "Suivant",
Support de cours PHP Page 32
Support de TP PHP IRSII 2013-2014
"sLast": "Dernier"
}
}
} );
dans le html :
<div id="dialogAjouter" title="Ajouter un Etudiant" style="display:none;">
<button id="ajouter1">Ajouter un nouvel étudiant</button>
et la fonction javascript
$(function() {
$( "#ajouter1" )
.click(function() {
$("#dialogAjouter").dialog({
modal: true,
buttons: {
"Ajouter": function() {
num=document.getElementsByName("anumero")[0].value;
nom=document.getElementsByName("anom")[0].value;
prenom=document.getElementsByName("aprenom")[0].value;
$.ajax({
type:'GET',
url:'ajouter_etudiant.php',
data:'a=a&num=' + num + '&nom=' + nom + '&prenom='+
prenom,
success: function(data){
alert(data);
$("#dialogAjouter").dialog( "close" );
},
error: function(){
alert('failure');
}
});
},
Cancel: function() {
Le but : faire fonctionner les trois pages en même temps, pour empêcher les conflits d’écritures simultanées sur
la table « compte ».
ADOBD (Active Data Objects Data Base) permet d'effectuer simplement des requêtes en SQL sous MySQL,
PostgreSQL, Interbase, Informix, Oracle, MS SQL 7, Foxpro, Access, ADO, SAP DB, SQLite, Sybase, DB2 pour
des applications Web faite en PHP.
sitographie :
http://fr.wikipedia.org/wiki/ADOdb
http://phplens.com/lens/adodb/docs-adodb.htm
Les propriétaires des bateaux font des réservation à partir d’une date pour un nombre de jours données (par
exemple, à partir du 10/6/2006 pour 3 jours : l’emplacement sera réservé le 10/6, 11/6 et 12/6, l’emplacement
pourra être loué à un autre client à partir du 13/6…).
Chaque bateau est identifié par une immatriculation de 3 caractères suivis de 2 chiffres.
Il sera possible dans le futur, d’obtenir l’agrément pour les plus gros bateaux de type D.
3 $smarty->template_dir = './module';
$smarty->compile_dir = './temp/';
$smarty->config_dir = './temp/';
$smarty->cache_dir = './temp/';
6 $smarty->display("$page.tpl");
<HTML><BODY>
CONSULTER
{html_options options=$tab }
</BODY></HTML>
http://fr.wikipedia.org/wiki/Syst%C3%A8me_de_gestion_de_contenu
11.4 Exercice n°4 : vous pouvez essayer de faire le même travail avec Joomla
Il vous sera utile d’inclure des pages php dans votre article spip.
12.1 PHPCheckStyle
Configurer et utiliser cet outil pour rendre plus standard votre code php.
12.4 GLPI
Gestion Libre du parc informatique
Voir fichier zip