TD14 : On commence (enfin) les choses sérieuses

Pour ce TD, vous devez avoir lu (et compris, et expérimenté) ces deux cours sur la programmation orienté objet en PHP : AtelierPHP et G. Rossolini. Une petite séance de questions/réponses est prévue en début de cours pour compléter les questions que vous pourrez vous poser.

reCAPTCHA, utilisation d'un objet simple

reCAPTCHA est un objet très simple à utiliser qui permet de générere des CAPTCHA.

En vous basant sur la documentation, créez un formulaire d'inscription qui utilise reCAPTCHA.

Demandez à l'utilisateur de saisir

  • un login
  • un password
  • une adresse e-mail
  • recopier le code qui s'affiche dans le captcha

Si tous les champs sont remplis, si le captcha a été correctement saisi et si le login n'est déjà pas déjà utilisé, créez un nouvel utilisateur dans la base de données.

En utilisant une base MVC, créez un fichier subscribe.php (et un ou plusieurs templates appropriés) qui va gérer l'ensemble du processus d'inscription.

FPDF, manipulation d'un objet de création de PDF

Le premier objet que nous allons manipuler est FPDF, c'est un objet de création de PDF.

En vous basant sur cette architecture, faites un script de demande de devis qui génère un PDF.

Ce script est constitué d'un formulaire comme le td10 mais au lieu de stocker le résultat dans une base de données va permettre de télécharger un fichier PDF qui reprend l'ensemble des informations saisies.

Placez les librairies FPDF dans le dossier /lib/

Générez un PDF de commande comme ceci (enfin c'est l'esprit quoi) commande.pdf

PDO

Petit screencast à regarder à la maison pour s'initier à PDO: http://www.youtube.com/watch?v=XQjKkNiByCk&feature=bf_prev&list=EC23A4AFEA46A5CB23

connexion

connexion simple

Méthode fonctionnelle

Avant, comme dans le td03 ou même dans les fichiers mvc du td10, on utilise les fonctions mysql_connect et mysql_select_db

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$db_selected = mysql_select_db('nuancier', $link);

Méthode PDO

Avec PDO, on utilise un objet PDO qui a sa syntaxe propre.

$dbo = new PDO('mysql:host=localhost;dbname=nuancier','mysql_user','mysql_password');

Les avantages :

  • c'est plus court
  • ça permet de se connecter à d'autres bases que MySQL
  • c'est plus classe :-)

connexion avec variables et gestion d'erreurs

Méthode fonctionnelle

Dans le fichier config :

$db = array();
$db['host'] = 'localhost'; 
$db['user'] = 'gaspard'; // utilisateur
$db['pass'] = 'xxxx'; //password
$db['base'] = 'nuancier'; //nom de la base de donnee

Dans la fonction database_connect() :

$link = mysql_connect($db['host'], $db['user'], $db['pass']);
if(!$link) {
    die('Not connected : ' . mysql_error());
}
 
 
$db_selected = mysql_select_db($db['base'], $link);
if(!$db_selected) {
    die('base inaccessible : ' . mysql_error());
}

Méthode PDO

Dans le fichier config : ça ne change pas.

Dans la fonction database_connect()

try{
	$db['object'] = new PDO('mysql:host='.$db['host'].';dbname='.$db['base'],$db['user'],$db['pass']);
}
catch (Exception $e){
	die('Erreur : '.$e->getMessage());
}

requêtes

Sans paramètre

Par exemple quand on veut récupérer tous les enregistrements.

méthode fonctionnelle

$res = mysql_query("SELECT nom FROM nuancier");

PDO

Il est conseillé de préparer la requête avant de l'executer.

$query =$db['object']->prepare("SELECT nom FROM nuancier");
$query->execute();

Avec paramètres

Par exemple quand on veut récupérer un enregistrement par id.

méthode fonctionnelle

$id =mysql_real_escape_string($_GET['id'],$link);
$res = mysql_query("SELECT nom FROM nuancier WHERE id=$id");

PDO

$query =$db['object']->prepare('SELECT nom FROM nuancier WHERE id = :id');
$query->execute(array(':id'=> $_GET['id']));

Afficher les résultats

un seul résultat

méthode fonctionnelle

$color = mysql_fetch_array($res, MYSQL_ASSOC);
 
// dans le template
echo $color['nom'];

pdo

$color = $query->fetch(PDO::FETCH_OBJ);
 
// dans le template
echo $color->nom;

plusieurs résultats

méthode fonctionnelle

$colors=array();
while ($row = mysql_fetch_array($res, MYSQL_ASSOC)){
	$colors[] = $row['nom'];
}
 
// dans le template
for($i=0;$i<count($colors);$i++){
	echo $colors[$i]['nom'];
}

pdo

$colors = $query->fetchAll(PDO::FETCH_OBJ);
 
// dans le template
for($i=0;$i<count($colors);$i++){
	echo $colors[$i]->nom;
}

Code final

Récapitulatif du code pour afficher plusieurs résultats en utilisant la méthode objet avec PDO, une douzaine de lignes:

// connexion
try{
	$db['object'] = new PDO('mysql:host='.$db['host'].';dbname='.$db['base'],$db['user'],$db['pass']);
}
catch (Exception $e){
	die('Erreur : '.$e->getMessage());
}
// requête
$query =$db['object']->prepare("SELECT nom FROM nuancier");
$query->execute();
 
$colors = $query->fetchAll(PDO::FETCH_OBJ);
 
//  template
for($i=0;$i<count($colors);$i++){
	echo $colors[$i]->nom;
}

SQLite

SQLite est un moteur de gestion de bases de données simples le moteur SQLite est intégré dans PHP depuis sa version 5.

C'est très facile à mettre en place, pas besoin de serveur, il suffit de générer un fichier de base de données sqlite.

Vous trouverez facilement des tutos pour l'utilisation de SQLite comme sur switchonthecode.com ou sur scriptol.com

Pour pratiquer, enregistrez par exemple les infos des commandes de l'exercice précédent.

ressources/php/td14.txt · Last modified: 2013/06/16 22:51 (external edit)
 
 
Creative Commons License Powered by PHP Valid XHTML 1.0 April