//affichera 4 (cette technique ne peut être utilisée que pour les tableauxde type scalaire)                                          •    en utilisant les fonctions each(), next() et prev()     (un peu comme on lit un fichier, cette technique peut être utilisée pour tout type de tableau, qu'il soit associatif ou scalaire)
Manipulation de tableau à une dimension : Créer - Afficher un tableau (scalaire) On peut créer le tableau classiquement:  $tab[0]=0;  $tab[1]=1;  $tab[2]=2; Mais on peut créer un tableau par l'instruction array $tab = array(0,2,4,6); Pour parcourir les éléments du tableau, deux écritures sont possibles.  for ($cpt=0;$cpt<count($tab);$cpt++) {    $val=$tab[$cpt];     print (" le $cpt ° elem du tableau vaut $val <BR>");  } | voir     fichier coursphp_15.php3 ou bien  for ($cpt=0;$cpt<count($tab);$cpt++) {    $numelet=$cpt+1;    print (" le $cpt ° elem du tableau vaut $tab[$cpt] <BR>");  } N.B: on a vu qu'Il existe aussi une variation par rapport à la construction classique dite énumération, permettant de ne pas spécifier l'indice, celuici étant crée automatiquement par l'interpréteur php. Ainsi au lieu décrire  $tab[0]=0;  $tab[1]=1;  $tab[2]=2; on peut se permettre d'écrire  $tab[]=0;  $tab[]=1;  $tab[]=2; Ce qui permet des constructions assez "osées" comme dans l'exemple suivant: Exemple Nous allons créer un formulaire qui demande d'effectuer un ou plusieurs choix grâce à des cases à cocher.. p Ces choix sont stockés dans un tableau qui sera automatiquement de la dimension correspondante au nombre de cases à cochée…. cochées ! Le formulaire HTML : <html> <body>  <form name="toto" method="post" action="cretableau.php3">  <input type="checkbox" name="choix[]" value="gb"> anglais  <input type="checkbox" name="choix[]" value="all"> allemand  <input type="checkbox" name="choix[]" value="it"> italien  <input type="submit">  </form> </body> </html> | voir     fichier La saisie est ensuite transmise à un script qui affiche un tableau choix de dimension appropriée … <? $nb=count($choix); for ($cpt=0;$cpt<$nb;$cpt++){ echo "votre ".($cpt+1)."° choix ".$choix[$cpt]."<br>"; } ?> | voir                    fichier cretableau.php3 Créer - Afficher un tableau (associatif) Si le tableau est associatif, le parcours avec un indice numérique pose problème  <?php  $tabasso["nom"]="Jean"; $tabasso["age"]=30;  $tabasso["note"]=20;  for ($cpt=0;$cpt<count($tabasso);$cpt++)   $val=$tabasso[$cpt];   print (" parcours scalaire le $cpt elem du tableau vaut $val <BR>");  } <? | voir     fichier coursphp_15b.php3 $val=tabasso[$cpt] ne permet plus d'atteindre la valeur stockée dans le tableau ! Il faut savoir aussi que chaque tableau entretien un pointeur interne, qui est initialisé lorsque le premier élément est inséré dans le tableau. Pour passer en revue proprement un tableau associatif il faut utiliser la fonction each() et reset() each() : retourne la paire (clé/valeur) courante du tableau array et avance le pointeur de tableau. Cette paire est retournée dans un tableau de 4 éléments, avec les 4 clés prédéfinies désignée 0, 1, key, value. Les éléments 0et keycontiennent le nom de la clé Les éléments 1et valuecontiennent la valeur. Cela est justifié uniquement par le fait de pouvoir y accéder par une notation scalaire(0/1) ou une notation associative (key/value). reset() : replace le pointeur de tableau array au premier élément. $nbval=count($tabasso);      // on récupère la dimension du tableau  for ($cpt=0;$cpt<$nbval;$cpt++) { $valass=each($tabasso);  // récupère l'élément courant et avance pointeur    // ici on peut traiter    // l'élément du tableau    print("le nom de element $cpt est $valass[0]<br>");    print("la valeur de element $cpt est $valass[1]<br>");  } reset($tabasso);                   //replace le pointeur au premier élément. ?> | voir     fichier coursphp_15b.php3 N.B: à la place de l'instruction $valass[0] on pourrait tout aussi bien écrire $valass[key] N.B: à la place de l'instruction $valass[1] on pourrait tout aussi bien écrire $valass[value] Pour parcourir les éléments d'un tableau on va avoir principalement 2 méthodes 1° méthode(solution) : trouver la taille du tableau puis parcourir classiquement tous les éléments du tableau que l'on lira à l'aide de each() $nbval=count($tabasso);  for ($cpt=0;$cpt<$nbval;$cpt++) { $valass=each($tabasso);    $val=$valass[value];    print (" 1° méthode : le [$cpt] elem du tableau vaut $val <BR>");  } | voir     fichier coursphp_15c.php3 2° méthode(solution) : sans connaître la taille du tableau utiliser le fait que si le pointeur interne de fichier est au delà de la fin du tableau, each() retourne faux reset($tabasso);  while($valass=each($tabasso)) {    $val=$valass[value];    print (" 2° méthode : elem du tableau vaut $val <BR>");  } | voir     fichier coursphp_15c.php3 Tableau multidimensionnel : Les tableaux à plusieurs dimensions sont extrêmement simples. Pour chaque dimension du tableau, vous ajoutez une nouvelle [dim] à la fin Voila un tableau à 2 dimensions 2x2 $a[0] [0] = "def"; $a[0] [1] = "def"; $a[1] [0] = "def"; $a[1] [1] = "def"; Voila un tableau à 3 dimensions 4x2x3 $a[0] [0] [0] = "def"; $a[0] [0] [1] = "def"; $a[0] [0] [2] = "def"; $a[0] [0] [0] = "def"; $a[0] [1] [0] = "def"; $a[0] [0] [0] = "def"; $a[1] [0] [0] = "def"; $a[2] [0] [0] = "def"; $a[3] [0] [0] = "def"; Evidemment on peut mélanger des tableaux associatifs et scalaires dans les tableaux à plusieurs dimensions. Manipulation de tableau multidimensionnel : il suffit de mélanger les techniques vues précédemment et de ne pas se mélanger les indices ! $tabasso[0]["nom"]="Jean"; // voila un tableau de 4 élèves $tabasso[0]["age"]=30; $tabasso[0]["note"]=20;           ceci est un scalaire de 4 élèvestableau, $tabasso[1]["nom"]="Pierre";                       chaque élève étant $tabasso[1]["age"]=31;                                 un tableau associatif de 3 éléments "nom", $tabasso[1]["note"]=21;                              "age" et "note" $tabasso[2]["nom"]="Michel"; $tabasso[2]["age"]=32; $tabasso[2]["note"]=22; $tabasso[3]["nom"]="Marie"; $tabasso[3]["age"]=33; $tabasso[3]["note"]=23; | voir     fichier coursphp_15d.php3 Pour connaître la liste de tous les élèves, il faut parcourir tous les éléments du tableau scalaire, et lire la valeur du premier élément du tableau associatif cela devrait donner ceci : $nbval=count($tabasso);   // donne la taille de la 1° dimension, soit 4  for ($cpt=0;$cpt<$nbval;$cpt++) {    $valass=each($tabasso[$cpt]);    $val=$valass[value];    print ("le [$cpt] eleve du tableau est $val <BR>"); si on est sur un élève, pour connaître toutes ses valeurs il faut parcourir tous les éléments du tableau associatif cela devrait donner ceci : reset($tabasso[0]);       //replace le pointeur de tableau array au premier élément.  while($valass=each($tabasso[0])) {    $val=$valass[1];    print (" pour cet élève, on a les valeurs $val <BR>");  } Et donc maintenant on doit pouvoir se déplacer sur chaque élève (éléments du tableau scalaire) et visualiser toutes ses composantes (éléments du tableau associatif) cela devrait donner ceci : $nbval=count($tabasso);  for ($cpt=0;$cpt<$nbval;$cpt++) {    reset($tabasso[$cpt]);       //replace le pointeur au premier élément.    while($valass=each($tabasso[$cpt])) {    $val=$valass[1];    print (" pour l'élève n° $cpt on a les valeurs $val <BR>");    }    print (" <BR>") ;  }
ENVOYER UN MAIL Rappels de principes : PHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de communiquer avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet étant la messagerie électronique, il est naturel que PHP permette d'envoyer des mails. Fonction mail() : int mail (string email_destinataire, string sujet, string corps_message, string options) Le dernier champ est facultatif, on en parlera juste après. Dans un premier temps nous allons envoyer un email de base, en utilisant les 3 premiers paramètres Dans un formulaire on donne les renseignements nécessaires :
<html> <body> <form method="post" action="coursphp_16.php3"> voir                  fichier     <p>Votre Nom     <input type="text" name="nom" size="50"> </p> <p>Votre adresse <input type="text" name="votre_email" size="50"> </p> <textarea name="commentaire" cols="50" rows="5"></textarea> </p>  <p> <input type="submit" name="envoyer" value="Envoyer"> <input type="reset" name="effacer" value="Rétablir"> </p> </form> </body> </html>
On note la "future" variable votre_email Voilà le code du fichier traitant les données envoyées par le formulaire précédent :  <html> <body> <h4>Merci de votre message <?echo $nom;?></h4> <? echo "<p>Vous allez recevoir un email à l'adresse suivante : $votre_email</p?>"; mail("$votre_email",  "Réponse à votre courrier ",  "$nom a laissé le commentaire suivant : \n\n$commentaire" ); ?> </body> </html> | voir     fichier coursphp_16.php3 qui donne à l'éxecution quelque chose du genre N.B: Chez certains hébergeurs (dont Free Online) la fonction mail est désactivée car elle permet de simuler un envoi de mail à partir de n'importe quelle adresse. Elle est alors remplacée par une fonction propre à l'hebergeur…" permettant de vérifier que vous laisser une trace au niveau du champs from dans les mails que vous envoyez (de manière à identifier un mail facilement)" Une fonction personnalisé email() : int email (string from, string email_destinataire, string sujet, string corps_message, string options) il s'agit essentiellement de rajouter un premier paramètre obligatoire from, (et d'ailleurs sur les hebergeurs professionnels on ne pourra indiquer ici qu'une adresse mail "valable" pour le compte de domaine hebergé) Les options / en-têtesLe champ options de la fonction mail permet d'ajouter une en-tête au message que l'on envoie. On peut par exemple y mettre la date, le logiciel utilisé pour envoyer l'email ou encore l'adresse de retour Voilà un exemple d'en-tête à utiliser lors d'un envoi de mail :  $from_email = ""; $entetemail .= "Cc: \n"; $entetemail .= "Reply-To: $from_email \n"; // Adresse de retour mail("$votre_email",  "Réponse à votre courrier ",  "$nom a laissé le commentaire suivant : \n\n$commentaire"  "$entetemail" ); Remarque From : CC: Reply-To: sont des mots réservés                                                                                         LES DATES Calcul de date - time : En php, on décompte le temps de manière un peu particulière, c'est le nombre de secondes découlées depuis le 1er Janvier 1970. Ce temps est souvent appellé aussi "temps UNIX" ! Fonction time() : int time (void) La fonction time() retourne le nombre de secondes écoulées depuis le 1er Janvier 1970. elle est très souvent utilisée lors des manipulations de dates. <?php echo "Il s'est écoulé ". time() . " secondes depuis le 1er Janvier 1970"; ?> | voir     fichier coursphp_17.php3 Convertion de date - mktime : Pour convertir une date quelconque en nombre de secondes depuis le 1er Janvier 1970, nous avons la fonction mktime dans laquelle on précise, l'heure, la minute, la seconde, le mois, le jour, l'année. Fonction mktime() : int mktime (int heure, int minute, int seconde, int mois, int jour, int année,) N.B: L'ordre des paramètres est à l'américaine mois,jour,année et non jour,mois,année. Exemple comment de secondes se sont écoulées depuis le 1 janvier 2000 <?php echo "1 janvier 2000, c'était il y a ". mktime(0,0,0,1,1,2000) . " secondes "; ?> | voir     fichier coursphp_17.php3 Contrôler de date - checkdate Pour contrôler la validité d'une date issue, par exemple d'un formulaire, vous pouvez avoir recours à la fonction checkdate(). Fonction checkdate() : int checkdate (int mois, int jour, int année) N.B: L'ordre des paramètres est à l'américaine mois,jour,année et non jour,mois,année. Exemple Dans ce formulaire on demande la saisie d'une date. Cette date sera transmise à un script qui vérifiera sa validité et affichera   un            message       en conséquence <HTML> <BODY> <FORM action=coursphp_17b.php3 method=post> Veuillez saisir une date du type jj mm aaaa<br> <input type=text name=jour size=2> <input type=text name=mois size=2> <input type=text name=annee size=4><br> <input type=submit value=Test><input type=reset value=Effacer> </form> </body> </html> | voir     fichier avec un script php de la forme <? if (checkdate($mois,$jour,$annee)) { echo "La date $jour - $mois - $annee existe bien"; } else { echo "La date $jour - $mois - $annee n'est pas valide"; } ?> | voir     fichier coursphp_17b.php3 La fonction getdate : Fonction getdate() : array getdate (int date) La fonction renvoit un tableau associatif contenant les informations de date et heure de la variable date avec les champs suivants : •   "seconds           secondes •   "minutes"           minutes •   "hours"                heures •   "mday"               jour du mois •   "wday"               jour semaine, numérique. 0: dimanche jusqu'à 6: samedi •   "mon"                 mois, numérique •   "year"                 année, numérique •   "yday"                jour de l'année, numérique; i.e. "299" •   "weekday"         jour de la semaine, texte complet (en anglais); i.e. "Friday" •   "month"  mois, texte complet (en anglais); i.e. "January" Exemple avec getdate() <?php  $mois = $aujourdhui['month']; //   dont on prends ici l'élément [month]…  $mjour = $aujourdhui['mday'];  $annee = $aujourdhui['year'];  echo "$mjour $mois $annee"; ?> | voir     fichier coursphp_17c.php3 Affichage et formatage d'une date strftime() Pour afficher une date, vous pouvez utiliser la fonction strftime Fonction strftime() : string getdate (string format, int date) avec pour paramètre une chaîne de caractère format indiquant la manière sous laquelle vous voulez représenter la date. Ce format est donné par une chaîne de caractères comportant quelques caractères précédés d'un signe % ayant une signification particulière (d pour jour, m pour mois, y pour année, etc ) et des caractères choisis librement (ici, le slash, l'espace, les 2 points). <? echo "Affichage au format jour/mois/annee heure:minute:seconde "; strftime("%d/%m/%y %H:%M:%S") . "<br>"; ?> | voir     fichier coursphp_17d.php3 Donc à partir du moment où vous connaissez les lettres "clés", vous pouvez donner libre court à votre imagination. Liste des principaux formats : %y | année (sur 2 chiffres) | %Y | année | %B | mois en toutes lettres | %m | mois | %A | jour en toutes lettres | %d | jour | %u | numéro du jour dans la semaine (1=Lundi) | %H | heure (sur 24 heures) | %I | heure (sur 12 heures) | %M | minute | %S | seconde | %j | numéro du jour dans l'année | %V | numéro de la semaine dans l'année | Par défaut la fonction strftime() formate la date et heure courante mais vous pouvez spécifier un second paramètre pour afficher une date calculée. Ce paramètre est exprimé en secondes. echo "Dans 15 jours nous serons le " . strftime("%d/%m/%y",time()+15*24*3600); | voir      fichier coursphp_17d.php3 ou echo "Le 15 Aout 2001 tombe un " . strftime("%A",mktime(0,0,0,8,15,2001)) ; // la variable $an contient la valeur 01 si nous sommes en 2001 $an=strftime("%y"); ou // la variable $mois contient la valeur Saturday si nous sommes samedi $mois=strftime("%B"); Formatage en français setlocale() Si vous voulez afficher le jour ou le mois en toutes lettres, vous risquez de l'avoir en anglais. Si ce n'est pas ce que vous désirez, il convient d'utiliser la commande setlocale afin de préciser la langue d'affichage. <? setlocale("LC_TIME","en_US"); echo "En Anglais " . strftime("%A %d %B %Y") . "<br>"; setlocale("LC_TIME","fr_FR"); echo "En Français " . strftime("%A %d %B %Y") . "<br>"; ?> | En Anglais Friday 21 September 2001 En Français vendredi 21 septembre 2001 La langue est définie par 2 lettres (généralement) suivi d'un underscore puis 2 autres lettres. Les premières lettres indiquant la langue proprement dit et les 2 suivantes le pays (on peut ainsi distinguer fr_FR de fr_CA). Affichage et formatage d'une date : date() La fonction date() a à peu près le même rôle que strftime mais les caractères "clés" sont différents. date() retourne une date sous forme d'une chaîne, au format donné par la chaîne format, sans possibilité de donner des formats nationaux (locaux). Quelques formats : | a ou A |  "am" (matin) ou "pm" (après midi) | | d |  Jour du mois, sur deux chiffres (éventuellement avec un zéro) : "01" à "31" | | D |  Jour de la semaine, en trois lettres (et en anglais) : par exemple "Fri" (pour Vendredi) | | F | Mois, textuel, version longue; en anglais, i.e. "January" (pour Janvier) | | g |  Heure, au format 12h, sans les zéros initiaux i.e. "1" à "12" | | G |  Heure, au format 24h, sans les zéros initiaux i.e. "0" à "23" | | h |  Heure, au format 12h, "01" à "12" | | H |  heure, au format 24h, "00" à "23" | | i |  Minutes; "00" à "59" | | I | j |  Jour du mois sans les zéros initiaux: "1" à "31" | | l |  ('L' minuscule) Jour de la semaine, textuel, version longue; en anglais, i.e. "Friday" (pour Vendredi) | | L |  Booléen pour savoir si l'année est bissextile ("1") ou pas ("0") | | m |  Mois; i.e. "01" à "12" | | M |  Mois, en trois lettres (et en anglais) : par exemple "Apr" (pour Avril) | | n |  Mois sans les zéros initiaux; i.e. "1" à "12" | | s |  Secondes; i.e. "00" à "59" | | t |  Nombre de jours dans le mois donné, i.e. "28" à "31" | | U |  Secondes depuis une époque | | w |  Jour de la semaine, numérique, i.e. "0" (Dimanche) to "6" (Samedi) | | Y |  Année, 4 chiffres; i.e. "1999" | | y |  Année, 2 chiffres; i.e. "99" | | z |  Jour de l'année; i.e. "0" à "365" | | | | | | | Les caractères non reconnus seront imprimés tels quel. Quelques exemples : <?php /* Aujourd'hui, le 12 Mars 2001, 10:16:18 pm */  $aujourdhui = date("F j, Y, g:i a");                // March 12, 2001, 10:16 pm  $aujourdhui = date("m.d.y");                         // 03.12.01  $aujourdhui = date("j, m, Y");                        // 12, 3, 2001  $aujourdhui = date("Ymd");                           // 20010312  $aujourdhui = date("H:i:s");                        // 10:16:18 // notation française $aujourdhui = date("d/m/y");                        // 12/03/01 $aujourdhui = date("d/m/Y");                        // 12/03/2001 ?> | si vous avez le temps, jetez un petit coup d'oeil sur le formulaire et le script suivant…. et duree.php3 ! LES FICHIERS Principes : il faut bien noter que lorsque l'on sera sur un serveur ftp, le problème des droits qu'un utilisateur (ou qu'un script php ) peut avoir sur un fichier conditionnera l'accès au fichier proprement dit les fonctions de base sont la fonction fopen(), qui permet d'ouvrir un fichier, pour le lire ou y écrire la fonction fclose(), qui permet de fermer un fichier la fonction fgets(), qui permet de lire dans un fichier ouvert Ouverture de fichier : fopen() Fonction fopen() : int fopen (string nomfichier, string mode) Le paramètre nomfichier peut prendre plusieurs valeur parmis les suivantes: •   Si nomfichiercommence par "http://" (insensible à la casse), une connexion HTTP 1.x est ouverte , et un pointeur sur la réponse fournie est retourné. •   Si nomfichiercommence par "ftp://" (insensible à la casse), une connexion FTP est ouverte , et un pointeur sur la réponse fournie est retourné.. Vous pouvez ouvrir des fichiers en lecture seulement, ou en écriture seulement (le full duplex n'est pas supporté). •   Si nomfichiercommence par n'importe quoi d'autre, PHP tentera de lire ce fichier dans le système local, et un pointeur sur le fichier ouvert sera retourné. Si l'ouverture échoue, fopen() retourne FALSE (0). Le paramètre mode peut prendre les valeurs suivantes : •   'r' - Ouvre en lecture seule, et place le pointeur de fichier au début du fichier. •   'r+' - Ouvre en lecture et écriture, et place le pointeur de fichier au début du fichier. •   'w' - Ouvre en écriture seule; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer. •   'w+' - Ouvre en lecture et écriture; place le pointeur de fichier au début du fichier et réduit la taille du fichier à 0. Si le fichier n'existe pas, on tente de le créer. •   'a+' - Ouvre en lecture et écriture; place le pointeur de fichier à la fin du fichier. Si le fichier n'existe pas, on tente de le créer. De plus, mode peut contenir la lettre 'b'. Cette option n'est utile que sur les systèmes qui font la différence entre les fichiers binaires et les fichiers textes (en bref, c'est inutile sous Unix). S'il n'est pas nécessaire, il sera ignoré. Fermer un fichier : fclose() La fonction fclose(), permet de fermer un fichier Fonction fclose() : int fclose (int ptrfichier) l'entier prtfichier est l'entier retourné précédemment lors de l'ouverture du fichier. Exemple : $fich=fopen("","a+"); echo "le pointeur retourné est $fich"; fclose($fich); | voir     fichier coursphp_18.php3 Die : void die (string message) Cette fonction affiche la chaîne passée en paramètre, puis termine l'exécution du script. Elle ne retourne rien de plus. <?php $file = fopen ("filename", 'r') or die("impossible d'ouvrir le fichier"); ?> Ecriture dans un fichier : fputs() - fwrite() La fonction fputs(), permet d'écrire dans un fichier Fonction fputs() : int fputs (int ptrfichier, string texte, int taille) Ecrit le contenu de la chaîne textedans le fichier pointé par ptrfichier. Si la longueur tailleest fournie, l'écriture s'arrêtera après tailleoctets, ou à la fin de la chaîne (le premier des deux). fputs() est un alias de fwrite(), et lui est identique en tout point. Notez que taille (qui représente le nombre de caractères à écrire)est un paramètre optionnel, et s'il n'est pas spécifié, toute la chaîne est écrite. Exemple : On veut ouvrir le fichier avec le droit en écriture, en le créant s'il n'existe pas et en se positionnant à la fin "a" semble plus indiqué que w qui "réinitialise le Après 4 execution, on pourrait avoir le fichier texte suivant (par exemple…) Lecture dans un fichier : fgets() feof() fseek() Fonction fgets() : string fgets (int ptrfichier, int taille) fgets() retourne la chaîne lue jusqu'à la longueur taille- 1 octet, ou bien la fin du fichier, ou encore un retour chariot (le premier des trois qui sera rencontré). ptrfichier correspond à l'identifiant récupéré lors de l'ouverture du fichier. exemple : <? $fp [email protected] fopen("","r"); //$fp [email protected] fopen("","r"); if ($fp == false ) {  print ("on ne peut pas ouvrir le fichier !");              voir                  fichier }          coursphp_18c.php3else {  $donnee = fgets($fp,255); fclose($fp);  print ("le fichier contient $donnee"); } ?> | on ferme le fichier on lit la 1° ligne du fichier à concurrence de 255 octets on ouvre le fichier nommé "" en lecture seule (que l'on peut créer précédemment via notepad … Si le fichier contient plusieurs lignes, on pourrait alors effectuer une lecture en utilisant la fonction feof() qui permet de tester la fin de fichier. Fonction feof() : int feof(int ptrfichier) feof()qui retourne TRUE (1) si le pointeur est à la fin du fichier, ou si une erreur survient, sinon, retourne FALSE (0) etincremente alors la position courante. ptrfichier correspond à l'identifiant récupéré lors de l'ouverture du fichier. Exemple <? $fp = @fopen("","r"); if ($fp == false )                                          voir                           fichier {coursphp18d.php3  print ("on ne peut pas ouvrir le fichier !"); } else {  while (!feof($fp)) {  $donnee = fgets($fp, 255);  print (" $donnee <br>");  }  fclose($fp);  print ("le fichier a été lu"); } ?> | on lit une ligne à concurrence de 255 octets tant que l'on n'est pas à la fin du fichier Fonction fseek() : int feof(int ptrfichier) fseek() retourne 1 si le pointeur est correctement repositionné en début de fichier et retourne –1 sinon. EXEMPLE : si on veut savoir combien de fois on accède à une page, il suffit de faire exécuter sur la page en question un bout de code php permettant d'incrémenter une variable stockée dans un fichier page sur allé la page html est la suivante : <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <p>Bonjours </p> <p>page n°1</p> <p>depuis cette page vous pouvez accéder à la page suivante sur  laquelle un compteur est installé</p> <p>accéder       à         la        page   suivante          en       cliquant   <a href="/fichiercompte.php3">ici</a></p> </BODY> </HTML> Le code php étant <HTML> <HEAD> </HEAD> <BODY> <?  $fp = fopen("","r+"); | // ouvre un fichier existant |  if ($fp == 0)                                 | // si non existant |  {      $fp = fopen("","w+"); |  // création du fichier (et raz) |      fputs($fp,0);                            | // met 0 dedans |      fclose($fp);                              | // fermeture |      $fp = fopen("","r+"); | // ouverture du fichier existant |  }  $nbvisites = fgets($fp,11);            | // lecture valeur actuelle |  $nbvisites++;                              | // incrementation |  fseek($fp,0);                                | // repositionnement en début  fclose($fp);  print("$nbvisites visiteurs"); ?> </BODY> </HTML> | // recriture nouvelle valeur | voir     fichier fichiercompte.php3 N.B: ce compteur est absolument indépendant des cookies, (voir chap suivant) et marchera donc toujours…. PHP ET LES BASES DE DONNEES Pourquoi une Base de Données ? : On a vu que l'on était capable d'écrire en php dans des fichiers texte, et donc de pouvoir stocker et gérer des résultats C'est bien sûr un premier moyen de gérer des données, mais très vite les points suivant montrent les limites d'une gestion de donnée par fichier texte: •   Rigidité du format : ainsi que du contenu qui ne peut être que simple •   Lourdeur d'accès : en pratique il faut chaque fois ouvrir le fichier, parcourir les lignes, effectuer des tests, avec des formats codifiés et complexes à traiter •   Manque de sécurité, tout le monde peut accéder à un fichier texte •   Manque de gestion des accès simultanés Les apports d'une base de données sont sans commune mesure avec la difficulté d'apprentissage, car en effet on peut noter que : •   spécificité du format : qui peut être surpassée par l'accès à des driver ODBC mais qui est optimisé pour le stockage de données diverses et leur manipulation •   primitives d'accès : permettant tout un tas de manipulations spécifiques rapides (positionnement, ajouts, recherche, tri ) • Sécurité accrue : seul le serveur de la base de données peut accéder aux tables de données •   Gestion des accès simultanés Principe de ODBC : Php prend en charge une vaste gamme de bases de Données, mais il supporte également plusieurs variétés d'ODBC (Open Data Base Connectivity), ce qui en fait un choix incontournable pour la gestion de bases de données sur un site Web le principe du fonctionnement d'ODBC est le suivant : Ces dernières ont recours de façon interne à du code écrit dans le langage natif de la base de données à piloter, mais accessible simplement l'installation d'un pilote ODBC et l'on peut ainsi interfacer une base de donnée ACCESS avec Php L'avantage de ce système est la non spécificité de l'écriture pour un type de base de données. L'inconvénient de ce système est la relative performance des instructions qui souffrent de deux défauts majeurs: •   forcément génériques ODBC et donc non optimisées pour telle ou telle base •   leur traduction en langage natif de la base de donnée à piloter est aussi une perte de temps certain Prise en charge native : Php prend en charge une vaste gamme de bases de Données, ce qui va permettre de pouvoir écrire des petits programmes rapides et efficaces Le langage supporte les SGBD suivants: Adabas D    dBase                      Empress        FilePro                      Informix        Interbase                                    mSQL MySQL          Oracle          PostgreSQL Solid              Sybase                                     Velocis         Unix dbm Php permet d'utiliser un serveur MYSQL, travaillant avec des primitives très proches de celles du fameux langage d'accès aux bases de données SQL (Structured Query Langage) Le principe fondamental d'utilisation de MySQL est de créer une base, dans laquelle on pourra stocker différentes tables. Nous travaillerons essentiellement à partir de l'environnement Easyphp, qui permet de générer des commandes MySQL à partir d'assistant un cours sur MySQL dépassant largement le cadre de notre propos, et nos ambitions ! Les noms portés par les bases de données, les tables, les index, les colonnes et les alias suivent tous les mêmes règles dans MySQL: •   Un nom est constitué de caractères alphanumériques et ``_'' et ``$''. • Le nom d'une base de données, d'une table, d'un index ou d'une colonne peut avoir jusqu'à 64 caractères. •   Un nom peut commencer avec n'importe quel caractère autorisé. En particulier, un nom peut commencer avec un nombre (ce qui n'est pas toujours le cas dans de nombreuses bases de données). Cependant, un nom ne peut pas contenir uniquement des nombres. •   Il est interdit d'utiliser le point dans les noms, car il est déjà utilisé pour spécifier les noms des colonnes Environnement phpMyadmin (MySQL) : Pour accéder à cet environnement il suffit de lancer le serveur Apache et l'interpréteur MySQL, Créer une Base : Il suffit simplement de taper le nom à donner à la base, puis demander Créer Nous allons créer une base nommée test de confirmer notre ordre et de voir l'instruction MySQL qui est générée automatiquement par notre assistant  ici DROP DATABASE test Recréons une base essais Créer une Table : Une table, c'est l'élément constitutif de base d'une base de donnée Php. Imaginons de devoir créer une table nommée simple pour y stocker par individu les 2 renseignements suivants: nom – prenom table simple de 2 champs on demande Exécuter ce qui amène alors Si on saisit les valeurs suivantes visualiser les instructions Sql correspondant aux manip réalisées. Modifier une Table : On peut à tout moment modifier la structure d'une table crée par l'environnement en demandant une des Action sur le champ que l'on ou en demandant d'ajouter un champ dans la table Supprimer une Table : Si l'on se place sur la base de données qui contient la table (ici essais), on voit apparaître sur la gauche tous ses éléments. Bien sûr, à terme il sera plus intéressant de faire ce genre de manipulation via php, mais le faire via l'assistant permet d'être sûr du contenu de la table, pour vérifier ensuite notre programme construit en php Les différents types de données Mysql MySQL dispose d'un grand nombre de Type regroupé en trois catégories : les types numériques dont les principaux sont : •   TINYINT[(M)] [UNSIGNED] [ZEROFILL] Un très petit entier.  Signé, il couvre l'intervalle -128 à 127 ; non signé, il couvre 0 à 255. •   SMALLINT[(M)] [UNSIGNED] [ZEROFILL] Un petit entier.           Signé, il couvre l'intervalle -32768 à 32767; non signé, il couvre 0 à 65535. •   INT[(M)] [UNSIGNED] [ZEROFILL] Un entier de taille normale.            Signé, il couvre l'intervalle -2147483648 à 2147483647; non signé, il couvre 0 à 4294967295. •   BIGINT[(M)] [UNSIGNED] [ZEROFILL] Un entier de grande taille.  Signé, il couvre l'intervalle -9223372036854775808 à 9223372036854775807; non signé, il couvre 0 à 18446744073709551615. NB : toutes les opérations arithmétiques effectuée en interne, utilisent des BIGINT signés ou DOUBLE •   FLOAT[(M,D)]         [ZEROFILL]     Un      nombre         à         virgule           flottante, en précision simple. Il est toujours signé. Les valeurs sont comprises de 3.402823466E+38 et -1.175494351E-38. •   DOUBLE[(M,D)] [ZEROFILL] Un nombre à virgule flottante, en précision double. Il est toujours signé. Les valeurs sont comprises 1.7976931348623157E+308 et 2.2250738585072014E-308. Tous les types numériques disposent d'un attribut optionnel ZEROFILL. Cette option force l'affichage de tous les zéros non significatifs. Ainsi, dans une colonne de type INT(5) ZEROFILL, 4 sera affiché :00004. les types date et heure, dont les principaux sont : •   DATE Une date. L'intervalle valide de date va de '1000-01-01' à '9999-1231'. MySQL affiche les DATE avec le format. •   DATETIME Une combinaison de date et d'heure. L'intervalle valide va de '1000-01-01 00:00:00' to '9999-12-31 23:59:59'. MySQL affiche DATETIME avec le format 'YYYY-MM-DD HH:MM:SS'. •   TIMESTAMP[(M)] Un timestamp : la date et l'heure, exprimée en secondes, depuis le 1er janvier 1970. Il permet de couvrir un intervalle allant de'1970- 01-01 00:00:00' à quelque part, durant l'année 2037 •   TIME Une mesure de l'heure. L'intervalle valide est '-838:59:59' à '838:59:59'. MySQL affiche TIME au format 'HH:MM:SS' •   YEAR Un an. L'intervalle valide est 1901 à 2155, et 0000. MySQL affiche YEAR au format YYYY (Le type YEAR est nouveau en MySQL 3.22.) Le type DATETIME est utile pour manipuler en même temps une date et une heure. . MySQL retourne et affiche les valeurs de type DATETIME au format 'YYYY-MM-DD HH:MM:SS'. L'intervalle valide pour le type DATETIME est '1000-01-01 00:00:00' à '9999-12-31 23:59:59'. Le type DATE est utilisé pour manipuler simplement une date, sans l'heure. MySQL retourne et affiche les valeurs de type DATE au format 'YYYY-MM-DD' L'intervalle valide pour le type DATE est '1000-01-01' à '9999-12-31' Le type TIMESTAMP est utilisé automatiquement lors de requête , avec la valeur courante de date et d'heure. Si il y a plusieurs colonnes de type TIMESTAMP , seule la première sera automatiquement mise à jour. et les types chaînes de caractères dont les principaux sont : •   VARCHAR(M) [BINARY] Une chaîne de caractère. Les tris et comparaisons effectués sur des valeurs de type CHAR sont insensibles à la casse, à moins que le mot clé BINARY soit précisé. Diffère de char uniquement sur la manière dont elle est stockée (n'est pas complété par des espaces, mais juste par un octe indiquant la longueur de la chaine) N.B: la création de un type varchar de moins de 4 octet est commutée automatiquement en CHAR… •   ENUM('value1','value2', )Une énumération. Un objet chaîne peut prendre une des valeurs contenue dans une liste de valeur 'value1', 'value2', , ou NULL . Une ENUM peut avoir un maximum de 65535 valeurs distinctes. •   SET('value1','value2', ) Un ensemble. Un objet chaîne peut prendre une ou plusieurs valeurs, chacun de ces valeur devant être contenue dans une liste de valeurs 'value1', 'value2', . Un SET peut prendre jusqu'à 64 éléments. Avec MySQL, tous les types de colonnes peuvent être indexés, à l'exception des types BLOB et TEXT. L'utilisation d'index est le meilleur moyen d'accélérer les performances des clauses SELECT. Une table peut avoir jusqu'à 16 index. Il n'est pas possible d'indexer une colonne qui contient des valeurs NULL, donc une colonne indexée doit être déclarée NOT NULL. MySQLpeut créer des index sur plusieurs colonnes en même temps PHP ET MYSQL Maintenant que l'on sait créer une base MySQL avec notre assistant, il est temps d'apprendre comment effectuer une connexion sur cette base en php Principe d'accès à une base MySQL : Schématiquement, il va falloir pour pouvoir accéder à une base de données effectuer le parcours suivant : •   Se connecter à la base de donnée MySQL  en donnant le nom de la machine ou celle-ci se trouve, (host), et en s'identifiant (avec un username et un password) •   Passer des requêtes SQL via des primitives du genre MySQL_query . •   Fermer la connexion même si par défaut lors de la fin du script la fermeture peut se faire automatiquement Avec le SGBD MySQL, les fonctions php nécessaires sont les suivantes: •   mysql_connect •   mysql_select_db •   mysql_query •   mysql_close Se connecter au serveur de base de données MySQL : Fonction mysql_connect() : int mysql_connect(string host, string user, string password,) Cette fonction renvoit un identifiant de connexion ou une valeur 0 en cas d'échec de connexion. On peut interdire le warning par défaut du php en la faisant précéder du caractère @. 3 paramètres sont attendus : •   Le nom d'hôte du serveur de base de données. (ordinateur sur lequel le SGBD est installé) •   Le nom d'utilisateur Mysql •   Le mot de passe de l'utilisateur Fonction mysql_close() : int mysql_close(int ptrconn) Cette fonction renvoit une valeur 0 en cas de réussite de fermeture de connexion et 1 sinon.1 paramètre est attendu : •   c'est l'identifiant récupéré lors de la connexion à l'host. (ordinateur sur lequel le SGBD est installé) via la fonction mysql_connect() Essayons juste de nous connecter et de nous déconnecter on utilise le fait que la fonction mysql_connect renvoit une valeur 0 en cas d'échec de connexion, Si on veut interdire le warning par défaut du php, Il faut faire précéder le nom de la fonction du du caractère @ if (!$link = @mysql_connect($host,$user,$password)) de manière à lui substituer notre message      print ("Connexion échouée"); Voir    le        fichier coursphp_19b.php3 Certains préfèrent l'écriture suivante à l'aide de l'instruction Die Cette fonction affiche la chaîne passée en paramètre, puis termine <? $host="localhost";// essayer avec localhist $user=""; $password="";      {      die ("Connexion impossible");      }                                                                 voir                  fichier print ("Connexion réussie");   coursphp_19c.php3mysql_close ($link); ?> | l'exécution du script et que penser de cette écriture résolument condensée ? $link [email protected]_connect("localhost") or die ("Connexion impossible"); Sélection d'une base de données : Fonction mysql_select_db() : int mysql_select_db(string nombase, int ptrconn) Cette fonction renvoit une valeur true à 1 en cas de réussite sur la selection de la base de donnée et false à 0 sinon.2 paamètres sont attendus : •   Le nom de la base •   La valeur de l'identifiant de connexion au serveur mysql (obtenu lors de la connexion au serveur par la fonction mysql_connect) Avec le même principe on peut arriver à écrire quelque chose du genre <? $host ="localhost"; $user ="";                                                                voir                  fichier $password = "";                                                      coursphp_20.php3 $base_de_donnee ="essais"; if (!$link = @mysql_connect($host,$user,$password))      {      die ("Connexion impossible sur $host");      } print ("Connexion réussie sur $host"); if (!$database = @mysql_select_db($base_de_donnee,$link))      {      die ("Connexion impossible sur $base_de_donnee");      } print ("Connexion réussie sur $base_de_donnee"); mysql_close ($link); ?> | après            avoir effectué          une connexion sur le serveur      on   cherche   la base essais Passer des requêtes MYSQL : Fonction mysql_query() : De manière générale, c'est l'instruction mysql_query qui va permettre de passer n'importe quelle requête SQL, (il faut donc connaître la formulation d'une requête en SQL ) int mysql_query(string requete, int ptrconn) Cette fonction renvoit une valeur true à 1 en cas de réussite de la requête sur la base de donnée et false à 0 sinon. Ce qui ne signifie rien au niveau des données renvoyées par la requête (une requête peut s'executer correctement et ne pas renvoyer de valeurs…).2 paramètres sont attendus : Commodité d'utilisation On définira pour plus de commodités une variable chaîne $query contenant la requête SQL, que l'on passera en paramètre à la primitive php mysql_query Cela devrait donner alors quelque chose du genre $query="requête au format SQL"; $result = mysql_query($query); 1° exemple de requête MySql : INSERT INSERT INTO $table(chptable1,chptable2…) VALUES ('$varform1','$varform2'…) $table : représente la variable contenant le nom de la table concernée. chptable1 : représente le champ de la table qui va être renseigné. $varform1 : représente la variable de formulaire qui a été renseignée On veut pouvoir insérer des éléments dans notre table "simple" de notre base "essais" précedemment construite à l'aide de myadmin…dont on rappelle ici la structure… Il faut se créer un formulaire pour saisir les champs nom et prenom de notre table… Voir                   fichier et le script associé aurait cet aspect là :
<? $host ="localhost"; $user ="";                                                           voir                  fichier $password = "";                                                 coursphp_21.php3 $base_de_donnee ="essais"; après           avoir $table="simple"; connexion sur le serveur                            {      die ("Connexion impossible sur $host"); } print ("Connexion réussie sur $host"); if (!$database = @mysql_select_db($base_de_donnee,$link)) on   cherche   la base essais      { die ("Connexion impossible sur $base_de_donnee"); } print ("Connexion réussie sur $base_de_donnee"); $query="INSERT INTO $table(nom,prenom) VALUES ('$nom','$prenom')"; $result ne vaut        $result = mysql_query($query); pas 0…       echo "l execution de la requete renvoit $result"; mysql_close ($link); ?>
Ce script récupère depuis le formulaire les variables $nom et $prenom, puis demande d'éxécuter la requête… si une valeur true (différente de 0) est retournée, on sait que la requête s'est effectuée… on peut ensuite pour vérifier, visualiser notre table par : 2° exemple de requête MySql : SELECT Nous avons vérifié par Myadmin, que la table simple de notre base essais contenait notre nouvel enregistrement… Il est juste bon d'indiquer tout de suite que ne php il existe toute une série de fonctions permettant de manipuler une base mysql. Lorsque dans l'exemple précedant, on a passé la requête, à travers l'instruction $result = mysql_query($query); on a juste testé que le retour était différent de 0(requête effectuée) ou valait 0 (requête non réalisée). Il faut savoir que dans le cas d'une requête effectuée correctement, et ramenant un résultat (c'est le cas d'une requête select), on peut alors passer la valeur retournée par mysql_query à d'autres fonctions, qui interprèterons alors "l'identifiant de résultat". Ici mysql_numrows() compte les lignes d'un résultat. <? $host ="localhost"; $user =""; $password = ""; $base_de_donnee ="essais"; if (!$link = @mysql_connect($host,$user,$password))      {      die ("Connexion impossible sur $host"); if (!$database = @mysql_select_db($base_de_donnee,$link))      {      die ("Connexion impossible sur $base_de_donnee");      } // ici on est bien connecté sur la base publiée sur l'hôte $query="SELECT * From simple"; //requete SQL $result = mysql_query($query);    //récup d'un ptr sur le résultat du select echo "l execution de la requete renvoit $result"; $nbenreg=mysql_numrows($result); print("il y a $nbenreg enregistrements dans la table"); mysql_close ($link); ?> | voir     fichier coursphp_21b.php3 $result ne vaut pas 0, et c'est un pointeur    de résultat… N.B: on reprendra plus loin l'étude de SELECT, il s'agit ici d'un exemple pour comprendre les différentes "valeurs de retour " de l'instruction mysqlquery()… TRAITEMENT DE FORMULAIRE CREATION DE LA BASE Pour mettre en évidence toute une série de manipulations de base de donnée Mysql en php, nous allons construire une ensemble de fonctionnalités utilisables depuis une page HTML nomées Les fonctions mysql dont on aura besoin, sont rassemblée page 124, les primitives SQL dont on aura besoin pour construire nos requêtes sont rassemblées page 127 Introduction : A l'issue de la saisie depuis un formulaire, on souhaite pouvoir stocker les données saisies dans une table nommée inscrits d'une base de données nommée formulaire. Il va donc falloir : Créer un formulaire de saisie que l'on nommera Créer une base de données que l'on nommera formulaire Créer une table que l'on nommera inscrits Créer un script php que l'on nommera saisie.php3. Ce script sera appelé lors de la validation de la saisie du formulaire. Le formulaire de saisie : On prévoit donc 4 zones de saisie, permettant respectivement la saisie du Prénom, du Nom, de l'Adresse Email et du Sexe de la personne qui s'inscrit. Création de la base et de la table : On stockera tout cela dans un dossier Spécifique nommé traite_formulaire à coté du dossier réservé au cours Créons une base de donnée nommée formulaire Dans laquelle on va créer une table nommée inscrits avec les 5 champs suivants : NB: notamment On crée un champ ID doté de l'attribut Primary (key) de manière à être sur que malgré les éventuels doublons, chaque enregistrement soit unique dans la table de ce fait on lui ajoutera également la propriété autoincrement Le script ajout d'inscription (stockage dans la table): Un tel script, doit contenir, on le sait,deux partie distinctes: •   Une connexion sur la base Mysql en php On peut se dire ici que "ces lignes" de codes, seront nécessaires pour toute procédure devant ouvrir une connexion sur la base mysql… il serait interessant d'apprendre à les mettre dans un fichier externe, de manière à ne pas surcharger avec le même code, toutes les bout de programmes…. $host="localhost"; $user=""; $password=""; $bdd="formulaire"; $table="inscrits"; /********** connection avec MySQL **********/ [email protected]_connect($host,$user,$password) or die("erreur connection hôte"); /********** connection à la base de données **********/ [email protected]_select_db("$bdd") or die("erreur connection base de données"); /********** affichage variables formulaire pour info**********/ echo "Bonjour $genre $prenom $nom, votre email est $email"; | voir                fichier saisie.php3 On peut se dire ici que "ces lignes" de codes, seront nécessaires pour toute procédure devant ouvrir une connexion sur la base mysql… il serait interessant d'apprendre à les mettre dans un fichier externe, de manière à ne pas surcharger avec le même code, toutes les bout de programmes…. •   Le passage d'une requête mysql sur la base et voir la requête SQL générée… /********** infos à ajouter dans la table **********/                              $querycontient $query = "INSERT INTO $table(prenom,nom,email,genre)            la requête SQL VALUES('$prenom','$nom','$email','$genre')";                                                           que l'on passe /********** stockage dans la bdd **********/ensuite en$result = mysql_query($query);paramètre à mysql_close($link);            mysql_query() Include de fichier php : Il peut être utile de mettre une partie du code Php dans un autre fichier, pour alléger le contenu de la page HTML dans laquelle on se trouve. De plus, une modification de cette section, s'appliquera automatiquement à tout le monde… Syntaxe : include (""); à ce moment là l'écriture dans un fichier appelle un autre fichier… N.B: pour être précis, le fichier "inclus" ne nécessite pas forcément une extension de type .php3, mais se contente d'une quelconque extension. Création d'un fichier connexion pour notre gestion Modifier le fichier saisie.php3 de manière à ce qu'il fasse référence à un fichier connection.php3 contenant les paramètres de sélection <? $host="localhost"; $user=""; $password=""; $bdd="formulaire"; $table="inscrits"; /********** connection avec MySQL **********/ [email protected]_connect($host,$user,$password) or die("erreur connection hôte"); /********** connection à la base de données **********/ [email protected]_select_db("$bdd") or die("erreur connection base de données"); ?> | voir     fichier connexion.php3 Le script saisie.php3 commencera alors comme cela… <? include("connection.php3"); Insérer un fichier texte dans une table Objectif : insérer un fichier texte nommé dans la table nommée inscrits de la base formulaire Insertion du fichier texte La table est créée on peut maintenant importer le fichier texte. Démarrez Phpmyadmin, sélectionnez base formulaire, puis la table inscrits puis venez cliquer sur Précisez le dossier de stockage du fichier texte ainsi que son nom. C:\Program Files\EasyPHP\www\coursphp\ puis demander Exécuter… TRAITEMENT DE FORMULAIRE GESTION DE LA BASE Afficher toute la base : On peut bien sûr vérifier que les enregistrements se sont stockés dans la base en utilisant MySQL et PhpAdmin en étant sur la table inscrits et en Mais il faut aussi savoir le faire en php. Si on passe sur les problèmes de connexion et de déconnexion, désormais classiques, l'essentiel du script concerne bien sûr la requête SQL et le traitement de son résultat Plus exactement il faut savoir selectionner des enregistrement à l'aide d'une requête SELECT, et traiter le résultat à l'aide d'une instruction php mysql_fetch_row() La requête SELECT (cf page 128) que l'on passe ici est SELECT * FROM $table puis on traite le tableau par mysql_fetch_row (cf page 125) /*** On cherche tous les enregistrements ***/ $result            est      un              $query = "SELECT * FROM $table";        voir     fichier pointeur        sur le        $result = mysql_query($query); /*** le résultat de la requête est stocké dans un tableau ***/affiche.php3 résultat du SELECT pointeur que l'on                     while($row = mysql_fetch_row($result)) utilise                    en         { paramètre    de                     /** on affiche le genre, le nom, le prenom, l'email **/ mysql_fetch_row()                echo " <p>\n                <b>$row[1] $row[2] $row[3] $row[4]</b>\n <p>\n "; } echo $nb; Syntaxe : $row=mysql_fetch_row($result) •   $row est une variable de type tableau •   $result est une variable contenant l'identifiant retourné par la fonction mysql_query mysql_query() retourne un identifiant (pointeur) comme résultat d'une requête SQL de type SELECT. Ici cette variable contient l'ensemble des enregistrements de la table et n'est donc pas exploitable tel quel. Ainsi on utilise la fonction mysql_fetch_row(), qui découpe les lignes de résultat en colonnes (pour nous id, genre, nom, prenom, email) et les affecte à une variable tableau dans l'ordre où elles arrivent. • | $rows[0] correspond au champ | id         | dans la table | • | $rows[1] correspond au champ | prenom | dans la table | • | $rows[2] correspond au champ | nom | dans la table | • | $rows[3] correspond au champ | email | dans la table | • | $rows[4] correspond au champ | genre | dans la table | D'autre part, on inclut généralement mysql_fetch_row() dans une boucle while de telle façon à ce que l'ensemble des lignes de résultat soient traitées. Lorsqu'il n'y a plus de ligne à traiter, la boucle while se termine et l'interpréteur exécute la suite des instructions. Trier (Classer) toute la base : Si on veut présenter maintenant la table triée par ordre de nom, alors il suffit juste de rajouter à la requête SQL de base un ORDER by nomchamps ASC Le détail de la requête SQL (cf page 128) donne: SELECT * FROM $table ORDER by chptable ASC|DESC $table :          représente la variable contenant le nom de la table concernée chptable : représente le champ de la table sur lequel on désire faire le tri ASC|DESC : représente l'ordre croissant ou décroissant /*** On cherche tous les enregistrements ***/        $query = "SELECT * FROM $table ORDER by nom ASC"; while($row = mysql_fetch_row($result))        {                /** on affiche le genre, le nom, l'email **/                echo "                <p>\n                <b>$row[4] $row[2] $row[3]</b>\n                <p>\n                ";        } | Maintenant que l'on sait créer une base MySQL et que l'on a vu le principe d'écriture d'une requête SQL à travers la primitive php mysql_query, essayons de traiter un exemple plus complet que le simple affichage du nombre d'enregistrements existants dans une table. Afficher toute la base dans un tableau (1° variante): Pour présenter mieux le résultat on utilise un tableau HTML | <? Include("connection.php3"); /*** On cherche tous les enregistrements ***/        $query = "SELECT * FROM $table"; /*** envoi de la requête à la base ***/        $result = mysql_query($query); echo "<Table>";        while($row = mysql_fetch_row($result)) {                                                                          voir             fichier $id=$row[0];                                                affiche2tab.php3                $nom=$row[1];                $prenom=$row[2]; $email=$row[3];                $genre=$row[4];                echo "<tr>                <td width=22%>$id</td>                <td width=22%>$genre</td>                <td width=22%>$nom</td>                <td width=22%>$prenom</td>                <td width=34%>$email</td>        }        echo "</Table>"; /*** on ferme la connexion ***/ mysql_close(); ?> | |
Afficher toute la base dans un tableau (2° variante): Pour encore mieux présenter le résultat on utilise un tableau HTML avec des couleurs alternées automatiquement pour chaque ligne, ce qui s'obtient relativement facilement à l'aide de variables statiques, c'est à dire gardant leur valeur d'un appel à l'autre function couleur()        {                static $couleur;                if ($couleur == "#dddeee")                   voir                     fichier {                                                           affiche3tabcoul.php3                        $couleur = "#add8e6"; }                else                {                        $couleur = "#dddeee";                }                return ($couleur);        } | On avait déjà vu cet effet dans le cours sur les variables statiques (page 47 ), il n'y a donc pas grand chose à dire de plus il faut déclarer la fonction couleur() puis dans le code
faire un appel à chaque itération et se servir de la couleur pour la ligne du tableau HTML while($row = mysql_fetch_row($result)) {          $couleuractive = couleur();                  voir                     fichier                $id=$row[0];                                           affiche3tabcoul.php3 $nom=$row[1]; $prenom=$row[2]; $email=$row[3]; $genre=$row[4]; /** on affiche le id, legenre, le nom, le prenom, l'email **/ echo "<tr BGcolor=$couleuractive> <td width=22%>$id</td> <td width=22%>$nom</td> <td width=22%>$prenom</td> <td width=34%>$email</td> </tr>"; }
Rechercher un enregistrement : On veut proposer à l'utilisateur la recherche d'un enregistrement qui contient une certaine valeur soit dans le champ nom soit dans le champ prenom Il faut créer un formulaire permettant la saisie du nom ou prénom à rechercher                              La     création     du     formulaire     HTML    se     passant     sans     problème () Il faut créer un script permettant la recherche et l'affichage des enregistrements correspondant au nom ou prénom recherché Le script de recherche est à peu près identique aux scripts précédents mais il faut apporter deux modifications | if (($Mot == "")||($Mot == " ")) {     //if empty($mot)) serait plus propre ! /** Si aucun mot clé n'a été saisi demande à l'utilisateur de bien vouloir préciser un mot clé **/        echo "        Veuillez entrer un mot clé s'il vous plaît!        <p>";                                                             voir recherche.php3fichie                                                                                                    r } else {       .. totalité du traitement .       } | | on ne veut pas lancer        une recherche        sans mot clé $query = "SELECT * FROM $table la requête SQL                    WHERE nom LIKE \"%$Mot%\"                           voir                fichier $result = mysql_query($query); Le détail de la requête SQL donne: SELECT * FROM $table WHERE chptable1 LIKE \"%$Mot%\" $table :           représente la variable contenant le nom de la table concernée chptable : | représente le champ sur lequel on désire faire le tri | $mot : | représente la variable contenant le mot recherché | LIKE :  | permet de faire des comparaisons utilisant des jokers : | % :      | permet de remplacer des caractères (comme le * du dos) | Comme dans $query = "SELECT * FROM $table WHERE nom LIKE \"%$Mot%\""; On peut utiliser l'opérateur AND et l'opérateur OR $query = "SELECT * FROM $table WHERE nom LIKE \"%$Mot%\" OR prenom LIKE "%$Mot%\" "; Supprimer un enregistrement : On veut proposer à l'utilisateur la suppression d'un enregistrement qui correspond à une valeur du champ identificateur Il faut créer un formulaire permettant la saisie du n° de l'enregistrement à supprimer La création du formulaire HTML se passant sans problème (en ). Il faut créer un script permettant la suppression de l'enregistrement correspondant au numéro saisi Par rapport à un script de sélection classique quelques modifications du code apparaissent /** Si aucun id saisi demande de bien vouloir préciser un id **/ if (empty($identifiant)) { echo " Vous n'avez rien écrit : Veuillez entrer un chiffre s'il vous plaît ! <p>"; } /*** On affiche l'enregistrement correspondant à l'identifiant saisi ***/ else {        $query = "SELECT * FROM $table WHERE id = $identifiant"; $result = mysql_query($query);        while($row = mysql_fetch_array($result))        {                                                                       voir                  fichier                <p>\n                <b>identifiant détruit : $row[0] : $row[1] $row[2] $row[3] </b>\n                <p>\n                ";        } /*** On détruit l'enregistrement correspondant à l'identifiant saisi ***/        $query = "DELETE FROM $table WHERE id=$identifiant";        $result = mysql_query($query); } | la vérification de saisie       d'un identificateur la requête SQL de recherche l'affichage pour "info" de l'enreg trouvé la requête SQL de suppression La requête sql : DELETE Le détail de la requête SQL donne: DELETE FROM $table WHERE chptable = $identifiant $table :          représente la variable contenant le nom de la table concernée chptable : représente le champ de la table sur lequel on désire faire la recherche $identifiant : représente la variable contenant le mot recherché
Modifier un enregistrement : On veut proposer à l'utilisateur la modification d'un enregistrement. Dans un premier temps on cherche son enregistrement Il faut créer un formulaire permettant la saisie du nom ou prénom à rechercher La       création        du      formulaire     HTML  se       passant         sans    problème     (en ) Nous allons ensuite créer 2 scripts php : le premier nommé modifie.php3 devra afficher dans un formulaire les informations concernant la personne dont on veut modifier une ou plusieurs données Le second script nommé modifie2.php3 devra •   afficher les anciennes informations •   afficher les nouvelles informations • faire le changement (on pourrait pour plus de sécurité demander la confirmation des modifications)                                            •     <html> <head> </head> <body> <? include("connection.php3"); /** Si aucun id saisi demande à l'utilisateur de bien vouloir préciser un id **/ if (empty($Mot)) {        echo " Vous n'avez rien écrit : Veuillez entrer un mot clé s'il vous plaît ! <p>"; } /*** On affiche l'enregistrement correspondant à l'identifiant saisi ***/ else {        $query = "SELECT * FROM $table        WHERE nom LIKE \"%$Mot%\"        OR prenom LIKE \"%$Mot%\" |        ";        $result = mysql_query($query); print("<form Action=modifie2.php3 Method=post>"); while($row = mysql_fetch_row($result))        {                echo "<center>                <p>\n                <b>Enregistrement Modifiable : </b><br>                <input type=text name=identifiant value=$row[0]> <br>                nom <br><input type=text name=nom value=$row[2]> <br>                prénom <br><input type=text name=prenom value=$row[1]> <br>                email <br><input type=text name=email value=$row[3]> <br>                genre <br><input type=text name=genre value=$row[4]> <br>                </b>\n                <p>\n                ";        } print("<input type=submit value=modifier> <br>");        print("<input type=reset value=annuler> <br>");        print("</center></form>"); } // on ferme la base mysql_close(); ?> <h5 align=center><a href="/">Retour page de GESTION</a> | </h5> </body> </html> | affichage          du permettant "d'éditer                " l'enregistrement à modifier Ce      formulaire sera traité dans le         script modifie2.php3 Le script modifie2.php3 pourrait ressembler à : | <html> <head> </head> <body> <? include("connection.php3"); /********** pour visualiser l'enreg avant la modification **********/ $query = "SELECT * FROM $table WHERE id = $identifiant"; $result = mysql_query($query);        echo "enregistrement avant modification ?";        echo "<Table>";        while($row = mysql_fetch_row($result))        {                $affid=$row[0];                $affnom=$row[1]; $affprenom=$row[2]; | $affemail=$row[3];                $affgenre=$row[4];                echo "<tr>                <td width=22%>$affid</td>                <td width=22%>$affgenre</td>                <td width=22%>$affnom</td>                <td width=22%>$affprenom</td>                <td width=34%>$affemail</td>                </tr>";        }        echo "</Table>"; /********** MODIFICATION **********/ $query = "UPDATE $table SET prenom=\"$prenom\", nom=\"$nom\", email=\"$email\", genre=\"$genre\" WHERE id = \"$identifiant\"";        $result = mysql_query($query); /********** pour visualiser l'enreg après la modification **********/        $query = "SELECT * FROM $table WHERE id = $identifiant";        $result = mysql_query($query);        echo "enregistrement après modification !";        echo "<Table>";        while($row = mysql_fetch_row($result))        {                $affnom=$row[1];                $affprenom=$row[2]; $affemail=$row[3];                $affgenre=$row[4];                echo "<tr>                <td width=22%>$affid</td>                <td width=22%>$affgenre</td>                <td width=22%>$affnom</td>                <td width=22%>$affprenom</td>                <td width=34%>$affemail</td>                </tr>";        }        echo "</Table>"; // on ferme la base mysql_close(); ?> </body> </html> | | | | | Le détail de la requête SQL donne: UPDATE $table SET chptable = $identifiant, WHERE chptable1 = $identifiant1 $table : représente la variable contenant le nom de la table concernée chptable :     représente le champ de la table que l'on souhaite modifier $identifiant : représente la variable contenant la valeur à utiliser chptable :     représente le champ de la table que l'on souhaite modifier UPDATE met à jour une ligne existante dans une table. La clause SET indique quelles colonnes modifier, et quelles valeurs mettre dans ces colonnes. La condition WHERE permet de choisir quelles lignes sont à mettre à jour. Sinon, toutes les lignes sont mises à jour Compléments SELECT - Filtrer une base : Maintenant que l'on a vu un certain nombre de manipulation de la base mysql, on peut décider de filtrer un peu les renseignements obtenus. Cela se fait bien sur à l'aide de l'instruction SELECT (cf page 128) que nous connaissons déjà … Mais nous pouvons aussi introduire ici une nouvelle fonction php permettant de compter le nombre d'enregistrements dans un résultat de requête. Il s'agit de la fonction php : mysql_numrows() (voir page 125) $query="SELECT * from $table "; $result = mysql_query($query); $nbenreg=mysql_numrows($result); Dans les extraits de script ci dessus, une requête est envoyée grâce à l'instruction mysql_query et le résultat de cette requête est stocké dans la variable $result. mysql_numrows permet de compter le nombre d'enregistrements sélectionnés. Essayez les ! Exemple 1 : Sélection de tous les enregistrements de la table $query="SELECT * from $table "; $result = mysql_query($query); $nbenreg=mysql_numrows($result); Exemple 2 : Sélection de tous les enregistrements de la table dans lesquels nom=Blier $query="SELECT * from $table where nom='Blier' "; $result = mysql_query($query); Exemple 3 : Sélection de tous les enregistrements de la table dans lesquels nom commence par Du… $query="SELECT * FROM $table where typevel like 'Du%'"; $result = mysql_query($query); Exemple 4 : Sélection de tous les enregistrements de la table dans lesquels nom commence par Du… et dont le genre est Madame $query="SELECT    *    FROM    $table    where (genre='Madame'))"; $result = mysql_query($query); | ((nom | like | 'Du%') | AND | Exemple 5 : Sélection de tous les enregistrements de la table dans lesquels les ventes sont comprises entre 5000 et 7000 $query="SELECT * FROM $table where (ventes BETWEEN 5000 AND 7000)"; $result = mysql_query($query); Exemple 6 : Sélection de tous les enregistrements de la table dans lesquels figurent Mathieu et Boully $query="SELECT * FROM $table where nom IN ('Blier', 'Durand')"; $result = mysql_query($query); Exemple 7 : Sélection       de      tous    les       enregistrements      de      la        table  dans  lesquels commercial=Mathieu mais récupération uniquement de la valeur des ventes et des régions concernées $query="SELECT vente,region FROM $table Where nom='Blier' "; LISTE DE QUELQUES FONCTIONS MYSQL PHP mysql_close int mysql_close (int link_identifier) Retourne TRUE en cas de succès, et FALSE sinon. mysql_close() ferme la connexion au serveur MySQL associée à l'identifiant link_identifier . Par défaut, s'applique à la dernière connexion ouverte. NB : Cette commande n'est pas strictement nécessaire, car toutes les connexions non persistantes seront automatiquement fermées à la fin du script. mysql_connect int mysql_connect (string host:port, string username, string password) Retourne un identifiant positif de connexion en cas de succès, et sinon FALSE. mysql_connect() établit une connexion à un serveur MySQL. 3 arguments sont nécessaires pour une connection, host, username, password. Tous les arguments sont optionnels, et s'ils manquent, les valeurs par défaut sont utilisées. Le lien sera fermé lors de la fin du script automatiquement ou avec mysql_close(). host : c'est le nom d'hôte sur lequel notre base Mysql est hebergée. Par défaut le nom "localhost" sera utilisé. Le nom d'hôte peut aussi inclure un numéro de port, sous la forme : "host:port". (à partir de la version 3.0B4.) username : c'est le nom de login autorisé à ouvrir une connexion sur cette base de donnée. Par défaut le nom du propriétaire du process sera utilisé. password : c'est le mot de passe associé au login pour cet utilisateur de la base de donnée Par défaut le mot de passe vide sera utilisé. N.B: Si un second appel à mysql_connect() est fait avec les mêmes arguments, PHP n' ouvre pas une nouvelle connexion, mais retourne l'identifiant de la connexion déjà ouverte. Exemple MySQL connect <?php $link = mysql_connect ("kraemer", "marliesle", "secret") or die ("Connexion impossible"); print ("Connexion réussie"); mysql_close ($link); ?> mysql_fetch_row array mysql_fetch_row (int result) mysql_fetch_row() va rechercher une ligne dans le résultat associé à l'identifiant de résultat spécifié. La ligne est retournée sous la forme d'un tableau. Chaque colonne est enregistré sous la forme d'un tableau commençant à la position 0. Les appels suivants à mysql_fetch_row() retourneront la ligne suivante dans le résultat, ou FALSE si il n'y a plus de ligne disponible. mysql_query int mysql_query (string query, int link_identifier) mysql_query() retourne TRUE ou FALSE, pour indiquer le succès ou l'échec d'une requête SQL de type INSERT, DELETE ou UPDATE. mysql_query() retourne un identifiant (pointeur) pour manipuler le résultat d'une requête SQL de type SELECT. N.B: En cas de retour TRUE, la requête était valide et a pu être exécuté sur le serveur. Cela n'indique pas le nombre de ligne affectées, ou retournées. Il est parfaitement possible qu'une requête valide n'affecte aucune ligne ou ne retourne aucune ligne. mysql_query() envoie une requête SQL à la base de données actuellement active sur le serveur MysQL. Si link_identifiern'est pas précisé, la dernière connexion est utilisée. Si aucune connexion n'a été ouverte, la fonction tentera d'en ouvrir une, avec la fonction mysql_connect() mais sans aucun paramètre (c'est à dire avec les valeurs par défaut). mysql_num_rows int mysql_num_rows (int result) mysql_num_rows() retourne le nombre de ligne d'un résultat. mysql_select_db int mysql_select_db (string database_name, int link_identifier) Retourne TRUE en cas de succès, FALSE sinon. mysql_select_db() change la base de données active sur la connexion représentée par l'identifiant de connexion. Si aucun identifiant n'est spécifié, la dernière connexion est utilisée. S'il n'y a pas de dernière connexion, la fonction tentera de se connecter seule, avec mysql_connect() et les paramètres par défaut. LISTE DE QUELQUES ELEMENTS SQL MYSQL Insert: insère une nouvelle ligne dans une table existante INSERT INTO $table(chptable1,chptable2…) VALUES ('$varform1','$varform2'…) $table : représente la variable contenant le nom de la table concernée par l'ajout. chptable1 : représente les champs de la table qui vont être renseignés. $varform1 : représente les variables qui sont utilisées pour mettre leur valeur dans la table. Delete: Le détail de la requête SQL donne: DELETE FROM $table WHERE chptable = $identifiant $table :          représente la variable contenant le nom de la table concernée chptable : représente le champ de la table sur lequel on désire faire la recherche $identifiant : représente la variable contenant le mot recherché Update: UPDATE met à jour une ligne existante dans une table. La clause SET indique quelles colonnes modifier, et quelles valeurs mettre dans ces colonnes. La conditions WHERE permet de choisir quelles lignes sont à mettre à jour. Sinon, toutes les lignes sont mises à jour Le détail de la requête SQL donne: UPDATE $table SET chptable = $identifiant, WHERE chptable1 = $identifiant1 $table : représente la variable contenant le nom de la table concernée chptable :     représente le champ de la table que l'on souhaite modifier $identifiant : représente la variable contenant la valeur à utiliser chptable :     représente le champ de la table que l'on souhaite modifier Select: La commande SELECT permet de sélectionner des enregistrements dans une table. Cette commande permet de récupérer tous les champs spécifiés en argument à SELECT dans une table précisée en argument à FROM répondant aux critères indiqués en argument à WHERE SELECT [nom_de_colonne, | *] [FROM table_references [WHERE where_definition] [ORDER BY [ASC | DESC]] [LIMIT [offset,] rows]] •   La clause FROM table_references indique les noms des tables où les lignes seront lues. SI vous utilisez plus d'une table, vous faites une jointure. Pour plus d'informations sur les jointures, voyez JOIN. •   La clause WHERE est chargée de spécifier les conditions de recherche. On peut utiliser les opérateurs de comparaison habituels (=, >, <, >=, <=, <>, !>, AND, OR, NOT) mais aussi d'autres opérateurs tels que : LIKE qui permet de rechercher une chaîne de caractères sans tenir compte de la casse. Avec LIKE vous pouvez utiliser les deux jokers suivants :                                                   %      : Remplace n'importe quel nombre de caractères, même zéro                                                   _      : Remplace exactement un caractère                                                    [-]    : permet de définir un intervalle de caractères BETWEEN qui permet de rechercher une valeur dans un intervalle. IN permet de rechercher une valeur dans une liste •   La clause ORDER BY est destinée au tri par ordre croissant (asc) ou décroissant (desc) des réponses. •   La clause LIMIT peut être utilisée pour limiter le nombre de lignes retournées par la commande SELECT. LIMIT prend un ou deux arguments numériques. Si deux arguments numériques sont fournis, le premier spécifie l'offset de la première ligne à retourner, et la seconde spécifie le nombre maximum de lignes à retourner. La première ligne est à l'offset 0 (et non pas 1): QUELQUES VARIABLES D'ENVIRONNEMENT $DOCUMENT_ROOT | Nom du répertoire physique contenant la page affichée. | $HTTP_REFERER | $HTTP_ACCEPT_LANGUAGE | La langue utilisée par le navigateur du visiteur | $HTTP_USER_AGENT | L'identifiant du navigateur | $REMOTE_ADDR | L'adresse IP du client qui demande la page courante. | $REMOTE_HOST | Adresse de l'hôte | $SCRIPT_FILENAME | Le chemin absolu jusqu'au script courant. | $SCRIPT_NAME | Le chemin d'accès au script par rapport à $DOCUMENT_ROOT. Cela sert lorsque les pages doivent s'appeler elles-mêmes. | gethostbyaddr() | retourne le nom d'hôte correspondant à l'IP ip_address. Si une erreur survient, retourne ip_address. | gethostbyname(). | <? Echo "DOCUMENT_ROOT racine du site : $DOCUMENT_ROOT<br>"; Echo "HTTP_REFERER dossier courant : $HTTP_REFERER<br>"; Echo                  "HTTP_ACCEPT_LANGUAGE                  langue                  : $HTTP_ACCEPT_LANGUAGE<br>"; Echo "HTTP_USER_AGENT navigateur : $HTTP_USER_AGENT<br>"; Echo "REMOTE_ADDR adresse IP : $REMOTE_ADDR<br>"; Echo        "SCRIPT_FILENAME        chemin        d'acces        au         script: $SCRIPT_FILENAME<br>"; Echo "SCRIPT_NAME nom du script: $SCRIPT_NAME<br>"; Echo "REMOTE_HOST nom de l'hote: $REMOTE_HOST<br>"; Echo" get host by addr avec remote host nom de la machine sur le réseau : ". gethostbyaddr($REMOTE_HOST) ."<br>"; Echo" get host by name avec remote host adresse ip de la machine sur le réseau : ". gethostbyname($REMOTE_HOST) ."<br>"; Echo" get host by addr : ". gethostbyaddr($REMOTE_ADDR)."<br>"; Echo" get host by name : ". gethostbyname($REMOTE_ADDR)."<br>"; ?> | Voir    fichier appellant      le fichier envir.php3 LES COOKIES Objectif : Identifier de manière durable un client, un usager du site. Les cookies sont donc des petits fichiers texte stockés sur la machine du client permettant ainsi de le reconnaître. Cookies et php Création d'un cookie Syntaxe de la fonction : setcookie(name, value,expire,path,domain,secure) Seuls les 3 premiers paramètres sont régulièrement utilisés : name : nom donné à la variable cookie value : informations stockées dans le cookie expire : temps unix pendant lequel sera actif le cookie (s'exprime en secondes) Dans le cas suivant on crée une variable cookie nommé VISITEUR qui contient l'heure de connection et qui expirera dans 1 heure. /* création de la variable cookie VISITEUR */ setcookie("VISITEUR",date("d/m/y"),time()+3600) /* il s'agit d'une variable on peut donc l'utiliser comme telle */ echo "Vous êtes connectés à ".$VISITEUR; N.B: la fonction setcookie doit être appelée en début de script avant toutes instructions HTML. N.B: le nom du cookie est écrit en majuscules N.B: Le script peut être stocké dans la racine de votre siteau dans ce cas il porte le nom de votre site sinon il porte le nom du dossier dans lequel il se trouve. Le nom du cookie généré sur la machine du client contiendra de ce fait le nom du domaine visité. Par exemple : si un script (s'il est placé à la racine…) du site créé un cookie sur votre machine celui ci s'appellera : [email protected][1].txt Afficher le contenu d'un cookie Les     cookies                    sont    stockés          dans  un       tableau         associatif                       nommé $HTTP_COOKIE_VARS. <?  while($valeur=each($HTTP_COOKIE_VARS)) {  $val_cook=$valeur[1];  echo $val_cook."<br>";  } ?> Pour afficher un cookie particulier on peut aussi utliser la notation suivante : echo $HTTP_COOKIE_VARS["nomducookie"]; Détruire un cookie setcookie("VISITEUR"); Exemple Dans un premier temps nous allons créer un formulaire demandant son nom à l'internaute se connectant à notre site. <html> <body> <form action="cookie_ecrit.php3" method="post"> Nom du client <input type = "text" name="nom"> <input type = "submit" > </form> <body> <html> | Fichier appellant le fichier cookie_ecrit.php3 Ce formulaire appelle un script nommé cookie_ecriture.php3 créant 2 cookies -   mémorise ce nom dans un cookie (INTERNAUTE) -   mémorise la date et l'heure de connexion dans un autre cookie (DATE) <?    /*création d'un cookie nommé internaute qui conserve le nom*/    setcookie("INTERNAUTE",$nom,time()+3600);    /*création d'un cookie nommé date qui conserve la date de connexion*/    setcookie("DATE",date( "d/m/y à h:m:s"),time()+3600);    echo "<a href=cookie_lecture.php3>Lire le cookie</A>"; ?> de ce script existe un lien vers un fichier nommé cookie_lecture.php3 qui : -   affiche à l'écran l'ensemble des cookies <? echo "Bonjour ". $HTTP_COOKIE_VARS["INTERNAUTE"]; echo " comment allez vous depuis le ". $HTTP_COOKIE_VARS["DATE"]; ?> Etude du cookie : (stocké dans le dossier racine du site ) Sur ie : le cookie va se trouver dans le dossier cookies sous dossier de windows. -   La première valeur (internaute) est le nom du cookie. Notez que le nom du cookie n'est pas le nom du fichier (nom du fichier : [email protected][2].text). Si plusieurs cookies proviennent du même site ils sont tous stockés dans le même fichier (ici cela explique le 2 qui apparaît dans le nom : [email protected][2].txt ) -   La seconde valeur (Auguste+Laurence) est la valeur assignée au cookie. -   La troisième valeur () indique d'où provient le cookie et par quel site il est utilisé. <? setcookie("INTERNAUTE");         setcookie("DATE"); ?> SESSIONS (PHP 4) Principe Lorsque l'on démarre une session php, le serveur lui affecte un identifiant de session nommé PHPSESSID (abréviation : SID). A partir de ce moment toutes les variables de session que vous allez crées dans vos scripts seront soit : •   stockées sur le serveur dans un fichier ressemblant à un cookie (mais coté serveur!!). C'est l'option par défaut. •   stockées dans une table de base de données que vous aurez créée à cet effet. •   stockées dans les mémoires des processeurs du serveur. Les variables enregistrées comme variables de session sont utilisables dans d'autres scripts. Les sessions vont donc servir au passage de paramètres entre scripts.
Exemple 1 : une gestion de client (hyper simplifiée) On veut demander par le biais d'un formulaire html () : •   le nom d'un client •   le choix d'un type de matériel Le nom et le produit seront transmis à un script php (ident.php3) qui affichera ces informations et les définira comme variables de session. Le formulaire () <html> <body> <form action="ident.php3" method=post> Nom du client <input type=text name=client><br> Choix du produit <select name=produit> <option >Imprimante</option> <option >Micro ordinateur</option> <option >Souris</option> <option >Tapis</option> </select> <input type=submit value=Commander> </Form> </body> </html> le formulaire appelle un script nommé ident.php3 Remarques Une session est activée soit implicitement par une instruction session_start(), soit explicitement par une instruction session_register(). Attention l'instruction activant une session doit être la première du script. Le script (ident.php3) <? " <br>Cet identificateur de session sera valable tant que vous n'aurez pas quitté notre site <br>";       echo "<hr>";       /*on récupére le nom du client provenant du formulaire*/       $nomclient=$client;       /*on récupére le nom du produit provenant du formulaire*/       $nomproduit=$produit;       /*on récupére la date et l'heure dans une variable date*/       $date=date("d/m/y à H:i:s");       /*on affecte la variable pommade */       /*la portée de cette variable ne dépassera pas ce script*/       $pommade="vous êtes l'un de nos meilleurs clients ";       /*on crée une variable de session nommée nomclient*/ session_register("nomclient");       /*on crée une variable de session nommée nomproduit*/ session_register("nomproduit");       /*on crée une variable de session nommée date*/       session_register("date");       echo "Bienvenue $nomclient $pommade <br>";       echo "Nous sommes le ".$date ;       echo " et vous désirez commander le produit suivant : $produit <br>";       /*appel d'un autre script dans lequel       on pourra utiliser $nomclient et $nomproduit et $date       mais pas $pommade*/       echo "<a href=suite.php3> Suite</a>"; ?> | Le script suite.php3 <?     session_start();     /*on peut utiliser la variable de session $nomclient*/     echo "Vous êtes : $nomclient <br>";     /*on ne peut pas utiliser la variable $pommade*/     echo " $pommade <br>";     /*on peut utiliser la variable de session $date*/     echo "Vous vous êtes connectés le : $date <br>";     /*on peut utiliser la variable de session $nomproduit*/     echo " et vous nous avez commandé le produit suivant : $nomproduit <br>";     /*appel d'un autre script dans lequel on ne pourra utiliser aucune variable*/     echo "<a href=suite_et_fin.php3> Suite et fin</a>"; ?>> | Le script suite_et_fin.php3 Les variables de session ont été détruites, elles ne sont plus accessibles. <?     session_start();     /*aucune des variables n'est accessible*/     echo "Vous êtes : $nomclient <br>";     echo "Produit commandé : $nomproduit <br>";     echo "A la date du : $date <br>"; ?> Exemple 2 : une gestion de client (release one) On pourrait modifier le script de manière suivante : -   Générer automatiquement un numéro client. -   Générer un cookie sur la machine du client ce qui nous permettrait de le reconnaître s'il revient sur notre site. (en espérant qu'il accepte les cookies). Dans ce cookie on trouverait son numéro client codé et la date de sa dernière connexion. -   Stocker son numéro de client et sa commande dans une table. (cette partie qui complique un peu le script ne sera pas traitée néanmoins il fallait l'évoquer ). Script ident2.php3 | <?       /*on démarre une session*/       session_start();       $date=date("d/m/y à H:i:s"); if(empty($HTTP_COOKIE_VARS["NUMCLIENT"])) {       /*création d'un identifiant utilisateur*/       $id=md5(uniqid(rand()));       /* initialisation du nbre de visites*/       $nb=1;       /*création d'un cookie nommé NUMCLIENT qui conserve l'identifiant*/ setcookie("NUMCLIENT",$id,time()+3600);       /*création d'un cookie nommé NBCMDE qui conserve le nbre de visites*/ setcookie("NBCMDE",$nb,time()+3600);       echo "vous êtes un nouveau client <br>";       }       else       {       /*on récupère le nbre de visite*/       $nb= $HTTP_COOKIE_VARS["NBCMDE"];       $nb++;       /*modification d'un cookie nommé NBCMDE        qui conserve le nbre de visites*/ setcookie("NBCMDE",$nb,time()+3600);;       echo "vous êtes un ancien client";       echo " et c'est votre ".$nb."° commande <br>";       }       echo "Bonjour, une session a été créée. <br>Elle se nomme ".SID.       " <br>Cet identificateur de session sera valable          tant que vous n'aurez pas quitté notre site <br>";       echo "<hr>";       /*on récupére le nom du client provenant du formulaire*/       $nomclient=$client;       /*on récupére le nom du produit provenant du formulaire*/       $nomproduit=$produit;       /*on récupére la date et l'heure dans une variable date*/       $date=date("d/m/y à H:i:s");       /*on affecte la variable pommade */       /*la portée de cette variable ne dépassera pas ce script*/       $pommade="vous êtes l'un de nos meilleurs clients ";       /*on crée une variable de session nommée nomclient*/ session_register("nomclient");       /*on crée une variable de session nommée nomproduit*/ session_register("nomproduit");       /*on crée une variable de session nommée date*/       session_register("date"); |       echo "Bienvenue $nomclient $pommade <br>";       echo "Nous sommes le ".$date ;       echo " et vous désirez commander le produit suivant : $produit <br>";       /*appel d'un autre script dans lequel       on pourra utiliser $nomclient et $nomproduit et $date       mais pas $pommade*/       echo "<a href=suite.php3> Suite</a>"; ?> | | | | | Pensez à quitter l'ensemble des fenêtres du navigateur pour tester le fonctionnement du cookie et de la session.
Ce type de compteur fonctionnera si dans : register_globals = on <? session_register("compteur");   $compteur++; echo "Vous avez consulté la page $compteur fois<br>"; echo "<a href=testsession.php3>cliquez ici pour recommencer</A>" ?> | Ce type de compteur fonctionnera si dans : register_globals = off <? session_register("compte");  $HTTP_SESSION_VARS["compte"]++; echo "Vous avez consulté la page ". $HTTP_SESSION_VARS["compte"] ." fois<br>"; echo "<a href=testsession_b.php3>cliquez ici pour recommencer</A>" ?> | Exemple 3 : un compteur sur plusieurs pages Script synthese.php3 <? session_register("compteur1"); session_register("compteur2"); session_register("compteur3"); echo "Vous avez consulté la page 1 : $compteur1 fois<br>"; echo "Vous avez consulté la page 2 : $compteur2 fois<br>"; echo "Vous avez consulté la page 3 : $compteur3 fois<br>"; echo "| <a href=page1.php3>vers page 1</A>" ; echo " | <a href=page2.php3>vers page 2</A>" ; echo " | <a href=page3.php3>vers page 3</A> |" ; ?> Script page1.php3 <?     session_start();     echo "vous êtes sur la page 1<br>";     $compteur1++;     echo "| <a href=page1.php3>vers page 1</A>" ;     echo " | <a href=page2.php3>vers page 2</A>" ;     echo " | <a href=page3.php3>vers page 3</A> " ;     echo " | <a href=synthese.php3>vers synthese</A>|" ; ?>
GENERATION ET MANIPULATION D'IMAGES Principes de base La déclaration du format d'image utilisé Header("Content-type: image/png"); Ou Header("Content-type: image/jpeg"); Ou Header("Content-type: image/gif"); (le format gif est abandonné depuis la version 1.6 du GD). La création de l'image $var_ident =imagecreate(taille_x,taille_y); Cette instruction crée une image de x pixels de large sur y pixels de large. Ex : $imge=ImageCreate(100,100); La couleur de l'image Lorsque l'image est créée il faut lui attribuer des couleurs. Il est préférable de définir des variables ayant des noms significatifs. La définition des couleurs repose sur le mode RVB. $couleur=ImageColorAllocate(var_ident,R,V,B); exemples : $bleu= ImageColorAllocate($imge,0,0,255); $noir=ImageColorAllocate($imge,0,0,0); $blanc=ImageColorAllocate($imge,255,255,255); La première couleur définie correspondra à la couleur de l'arrière plan Les autres couleurs pourront être utilisées comme bon vous semble. L'envoi de l'image au navigateur On maintenant envoyer l'image au navigateur par le biais de l'une des instructions suivantes : ImageGif($var_ident); ImagePng($var_ident); ImageJpeg($var_ident); Rq : si un nom de fichier est spécifié l'image sera enregistrée. ImageGif($var_ident,""); ImagePng($var_ident,""); ImageJpeg($var_ident,""); Destruction de l'image L'image doit être supprimée afin de libérer les ressources. ImageDestroy($var_ident); Exemple de script : Création d'une image de couleur bleue <?    //envoi d'un entête précisant que l'image est format png    header("content-type: image/png");    //Création d'une image de 100 par 100 pixels    $imge=imagecreate(100,100);    //définition de la couleur d'arrière plan    $bleu=imagecolorallocate($imge,0,0,255);    //envoi de l'image au navigateur    imagepng($imge);    //destruction de l'image    imagedestroy($imge);  ?> | Quelques fonctions de traçage de formes Tracer une ligne : Imageline Imageline($var_ident,x1,y1,x2,y2,$couleur); Imageline trace une ligne de couleur $couleur entre les coordonnées x1, y1 et x2,y2 Exemple : <?    //Création d'une image de 100 par 100 pixels    $imge=imagecreate(100,100);    //définition de la couleur d'arrière plan    $bleu=imagecolorallocate($imge,0,0,255);    $blanc= imagecolorallocate($imge,255,255,255);    //trace une ligne blanche du coin supérieur gauche au milieu de l'image    imageline($imge,0,0,50,50,$blanc);    //trace une ligne blanche du coin inférieur gauche au milieu de l'image imageline($imge,0,100,50,50,$blanc);    //envoi de l'image au navigateur    imagepng($imge);    //destruction de l'image    imagedestroy($imge);  ?> | Tracer une courbe : Imagearc imagearc ($var_ident, cx, cy, w, h, s, e, $couleur) imagearc() dessine une ellipse partielle, centrée sur cx, cy, (le coin en haut à gauche est l'origine (0,0)) dans l'image référencée par $var_ident. w et h spécifient la largeur et la hauteur de l'ellipse, tandis que le début et la fin de l'arc sont donnés en degrés, par les arguments s et e. imagearc ($imge, 50, 50, 50, 50, 45,225, $blanc); Dans l'exemple précédent, on crée un cercle centré sur le point 50, 50 qui aura 50 pixels de large, 50 de haut commencera à 45° et finira à 225°. exemple :    //trace un demi arc de cercle    imagearc ($imge, 50, 50, 50, 50, 0,180, $blanc);    //trace un cercle    imagearc ($imge,40, 25, 7, 7, 0,360, $blanc);    //trace une ellipse    imagearc ($imge, 60, 25, 10, 5, 0,360, $blanc); Tracer un rectangle : Imagerectangle imagerectangle ($var_ident, x1, y1, x2, y2, $couleur) imagerectangle() dessine un rectangle dans la couleur $couleur, dans l'image $var_ident, et en commencant au point supérieur gauche (x1,y1), et en finissant au point inférieur droit (x2,y2). Le coin supérieur gauche est l'origine (0,0).    //trace un demi arc de cercle    imagearc ($imge, 50, 50, 50, 50, 0,180, $blanc);    //trace un cercle    //trace une ellipse    imagearc ($imge, 60, 25, 10, 5, 0,360, $blanc);    //trace un rectangle    imagerectangle ($imge, 10, 10, 90, 90, $blanc); Tracer un polygone : Imagepolygon imagepolygon, x1, y1, x2, y2, $couleur) imagepolygon () dessine un rectangle dans la couleur $couleur, dans l'image $var_ident, et en commencant au point supérieur gauche (x1,y1), et en finissant au point inférieur droit (x2,y2). Le coin supérieur gauche est l'origine (0,0). imagepolygon (($var_ident, array points, num_points, $couleur) imagepolygon() dessine un polygone dans l'image $var_ident. points est un tableau PHP qui contient les sommets du polygone sous la forme : points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, etc. num_points est le nombre de sommets.    //définition du nombre de points    $num_points=4;    //définition des points    $points[0]=30;  $points[1]=30;    $points[2]=50;  $points[3]=50;    $points[4]=70;  $points[5]=30;    $points[6]=50;  $points[7]=70;    //trace un polygone    imagepolygon ($imge, $points,$num_points, $blanc);    //trace un cercle    imagearc ($imge,40, 25, 7, 7, 0,360, $blanc);    //trace une ellipse    imagearc ($imge, 60, 25, 10, 5, 0,360, $blanc);    //trace un rectangle    imagerectangle ($imge, 10, 10, 90, 90, $blanc); Tracer un polygone plein : ImageFilledPolygon Voir aussi ImageFilledRectangle et ImageFillToBorder imagefilledpolygon ($var_ident, array points, num_points, $couleur) imagefilledpolygon() dessine un polygone rempli dans l'image i$var_ident. points est un tableau PHP qui contient les sommets des polygones sous la forme :. points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1, etc. num_points est le nombre total de sommets.    //trace un polygone fond blanc    imagepolygon ($imge, $points,$num_points, $blanc); Ecrire une chaine de caractères : ImageString() imagestring ($var_ident, font, x, y, s, $couleur) imagestring() dessine une la chaîne sur une ligne horizontale, dans l'image $var_ident, aux coordonnées (x,y) (le coin supérieur gauche est l'origine (0,0)) dans la couleur $couleur. L'argument de police font vaut 1, 2, 3, 4 ou 5, une des 5 tailles de polices par défaut). <?    //envoi d'un entête précisant que l'image est format png    header("content-type: image/png");    //Création d'une image de 100 par 100 pixels    $imge=imagecreate(150,200);    //définition de la couleur d'arrière plan    $bleu=imagecolorallocate($imge,0,0,255);    //définition des couleurs utilisées    $blanc= imagecolorallocate($imge,255,255,255);    $rouge= imagecolorallocate($imge,255,0,0);    $string="Formation PHP";    //ecrit le texte dans la police 1 par défaut    imagestring($imge,1,10,20,$string,$blanc);    //ecrit le texte dans la police 2 par défaut    imagestring($imge,2,10,40,$string,$blanc);    //ecrit le texte dans la police 3 par défaut    imagestring($imge,3,10,60,$string,$blanc);    //ecrit le texte dans la police 4 par défaut    imagestring($imge,4,10,80,$string,$blanc);    //ecrit le texte dans la police 5 par défaut    imagestring($imge,5,10,100,$string,$blanc);    //envoi de l'image au navigateur    imagepng($imge);    //destruction de l'image    imagedestroy($imge);  ?> Ecrire une chaîne de caractères verticale : ImageStringup() imagestringup ($var_ident, font, x, y, s, $couleur)    $string="Formation PHP";    //écrit le texte verticalement dans la police 5 par défaut imagestringup($imge,5,10,180,$string,$blanc); Ouvrir une image existante imagecreatefrompng (string filename) <?    //envoi d'un entête précisant que l'image est format png    header("content-type: image/png");    //Création d'une image de 100 par 100 pixels $imge=imagecreatefrompng(""); $blanc=imagecolorallocate($imge,255,255,255); imagerectangle($imge,225,90,235,100,$blanc); imagerectangle($imge,305,215,315,225,$blanc); imagerectangle($imge,325,305,335,315,$blanc); imagerectangle($imge,130,245,140,255,$blanc);    $string[0]="Paris";    $string[1]="Lyon";    $string[2]="Marseille";    $string[3]="Bordeaux"; imagestring($imge,4,225,70,$string[0],$blanc); imagestring($imge,4,305,195,$string[1],$blanc); imagestring($imge,4,325,285,$string[2],$blanc); imagestring($imge,4,130,225,$string[3],$blanc);    //envoi de l'image au navigateur    imagepng($imge);    //destruction de l'image    imagedestroy($imge);  ?> imagecreatefrompng() retourne une chaîne vide en cas d'échec. Elle affiche aussi un message d'erreur, qui s'affiche comme un lien brisé dans un navigateur web. Exemple de gestion d'erreur lors de la création d'image function LoadPNG ($imgname) {    $imge = @ImageCreateFromPNG ($imgname); /* Tentative d'ouverture */    if (!$imge) { /* Vérification */        $imge = ImageCreate (150, 30); /* Création d'une image blanche */        $blanc = ImageColorAllocate ($imge, 255, 255, 255);        $noir = ImageColorAllocate ($imge, 0, 0, 0);        ImageFilledRectangle ($imge, 0, 0, 150, 30, $blanc);        /* Affichage d'un message d'erreur */        ImageString ($imge, 1, 5, 5, "Erreur de chargement de l'image $imgname", $noir);    }    return $imge; } Formulaire et graphique A partir du formulaire suivant : <html> <head>        <title>météo</title> </head> <body>   <form method="post" action="meteo.php3">   <input type="image" src="/" name="coord">   </form> </body> </html> | Le formulaire précédent est un peu spécial puisqu'il n'affiche pas de bouton submit mais une image qui permet la soumission. <input type="image" src="/" name="coord"> En cliquant sur un point de l'image l'utilisateur soumet le formulaire à un script php nommé meteo.php3. Ce script reçoit 2 variables, coord_x et coord_y qui contiennent les coordonnées du point cliqué sur l'image. Il ne reste plus qu'à traiter en fonction du point cliqué. Le nom des 2 variables est créé à partir du nom donné à la valeur de l'attribut Name de la balise input, suivi de _x et _y <?    if ($coord_x>0 && $coord_x<40 && $coord_y>100 && $coord_y<140) echo "vous êtes à Brest et il vente !!";    if ($coord_x>200 && $coord_x<240 && $coord_y>70 && $coord_y<110) echo "vous êtes à Paris et il pleut !!";    if ($coord_x>295 && $coord_x<325 && $coord_y>195 && $coord_y<235) echo "vous êtes à Lyon et il neige !!";    if ($coord_x>305 && $coord_x<345 && $coord_y>285 && $coord_y<325) echo "vous êtes à Marseille et il fait beau !!";    if ($coord_x>110 && $coord_x<150 && $coord_y>225 && $coord_y<265) echo "vous êtes à Bordeaux et il y a de la brume !!"; ?> Création dynamique de boutons <html> <body>   <!-- Appel d'une image avec un paramètre-->   <img src="/bouton.php3?Accès"></P>   <img src="/bouton.php3?Affaires"></P >   <img src="/bouton.php3?Commander"></P >   <img src="/bouton.php3?Nous contacter"></P > </body> </html> |
<?php Header("Content-type: image/png"); $string=implode($argv," "); /*lors du passage en argument les espaces ont été encodés*/ $string=urldecode($string);// il faut les décoder /*appel de l'image png*/ $im = imageCreateFromPng(""); $orange = ImageColorAllocate($im, 220, 210, 60); $px = (imagesx($im)-7.5*strlen($string))/2; ImageString($im,3,$px,9,$string,$orange); ImagePng($im); ImageDestroy($im); ?> implode($argv," ") Retourne une chaîne constituée de tous les éléments du tableau, pris dans l'ordre, transformés en chaîne, et séparés par glue. $argv Tableau des arguments passés au script.  Liste des fonctions sur les images GetImageSize — Retourne la taille d'une image GIF, JPG ou PNG. ImageArc — Dessine une ellipse partielle. ImageChar — Dessine un caractère horizontalement. ImageCharUp — Dessine un caractère verticalement. ImageColorAllocate — Alloue une couleur pour une image. ImageColorDeAllocate — Désallouune une couleur pour une image ImageColorAt — Retourne l'index de la couleur d'un pixel donné. ImageColorClosest — Retourne l'index de la couleur la plus proche d'une couleur donnée. ImageColorExact — Retourne l'index de la couleur donnée. ImageColorResolve — Retourne l'index de la couleur donnée, ou la plus proche possible. ImageGammaCorrect — Applique une correction gamma à l'image ImageColorSet — Change la couleur dans une palette à l'index donné. ImageColorsForIndex — Retourne la couleur associée à un index. ImageColorsTotal — Calcule le nombre de couleur d'une palette. ImageColorTransparent — Définit la couleur transparente. ImageCopy — Copie une partie d'une image ImageCopyResized — Copie et redimensionne une partie d'une image. ImageCreate — Crée une nouvelle image. ImageCreateFromGif — Crée une nouvelle image à partir d'un fichier ou d'une URL. ImageCreateFromPNG — Crée une nouvelle image PNG à partir d'un fichier ou d'une URL ImageDashedLine — Dessine une ligne pointillée. ImageDestroy — détruit une image. ImageFill — Remplit. ImageFilledPolygon — Dessine un polygone rempli. ImageFilledRectangle — Dessine un rectangle rempli. ImageFillToBorder — remplir avec une région avec une couleur spécifique. ImageFontHeight — Retourne la hauteur de la police. ImageFontWidth — Retourne la largeur de la police. ImageGif — Envoie une image GIF vers un navigateur ou un fichier. ImagePNG — Envoie une image PNG vers un navigateur ou un fichier. ImageJPEG — Envoie une image JPEG vers un navigateur ou un fichier. ImageInterlace — Active ou désactive l'entrelacement. ImageLine — Draw a line. ImageLoadFont — Charge une nouvelle police. ImagePolygon — Dessine un polygone. ImagePSBBox — Retourne le rectangle entourant un texte et dessiné avec une police PostScript Type1. ImagePSEncodeFont — Change le codage vectoriel d'un caractère dans une police. ImagePSFreeFont — Libère la mémoire occupée par une police PostScript Type 1. ImagePSLoadFont — Charge une police PostScript Type 1 depuis un fichier. ImagePsExtendFont — Etend ou condense une police de caractères ImagePsSlantFont — Inclidnet une police de caractères ImagePSText — Dessine un texte sur une image avec une police PostScript Type1. ImageRectangle — Dessine un rectangle. ImageSetPixel — Dessine un pixel. ImageString — Dessine une chaîne horizontale. ImageStringUp — Dessine une chaîne verticale. ImageSX — Retourne la largeur d'une image. ImageSY — Retourne la hauteur de l'image. ImageTTFBBox — retourne le rectangle entourant un texte et dessiné avec une police TrueType. ImageTTFText — Dessine un texte avec une police TrueType. LIAISON ODBC ACCESS 97 MYSQL Objectif : A partir d'un SGBD local (exemple Access 97) mettre à jour une base de données distante (exemple : SGBD Mysql ). Technique Télécharger le driver ODBC myodbc (moi j'utilise récupérable ici : ) Décompressez et installez le logiciel. Cliquez sur Continue Dans la liste, venez sélectionner Mysql ;)) puis OK                                 Port : 3306 Exemple 1 : vous avez installé un serveur Apache et Mysql en local Utilisation Conditions pour que cela fonctionne : •   Vous avez une base de données en ligne (SGBD mysql. Base nommée mailing_list). •   Dans cette base existe une table nommée inscrits. Cette table comporte 4 champs. num, nom, prenom, email. •   Vous avez une base de données en local (SGBD Access. Base nommée alim_mailing_list). •   Dans cette base existe une table nommée alim_inscrits. Cette table comporte 4 champs. num, nom, prenom, email. Dans la base de données locale et plus particulièrement dans la table alim_inscrits créez quelques enregistrements. Lier une table locale et une table distante Dans Access ouvrez la base de données alim_mailing_list                                                                      Dans la liste proposée                                      Venez     choisir            Mysql hebergement                                      (c'est la source de données machine définie lors de                                 Dans la liste proposée , venez double cliquer sur inscrits (c'est la table à laquelle                                 vous êtes liés) Vous pouvez maintenant modifier le contenu de votre base en ligne. Il s'agit d'un export il faut donc que la table n'existe pas déjà en ligne.                                                            Dans la liste proposée                                                                                    Venez choisir Mysql hebergement. (c'est la source de données machine définie lors de l'installation de myodbc) FONCTIONS MYSQL mysql_affected_rows — Retourne le nombre de lignes affectées lors de la dernière opération SQL. mysql_change_user — Change le nom de session de l'utilisateur actif. mysql_close — Ferme la connexion MySQL. mysql_connect — Ouvre une connexion à un serveur MySQL. mysql_create_db — Crée une base de données MySQL. mysql_data_seek — Déplace le pointeur interne de résultat. mysql_db_name — Lit les noms des bases de donné mysql_db_query — Envoie une requête MySQL à un serveur MySQL. mysql_drop_db — Efface une base de données MySQL. mysql_errno — Retourne le numéro de message d'erreur de la dernière opération MySQL. mysql_error — Retourne le texte associée avec l'erreur générée lors de la dernière requête. mysql_fetch_array — Retourne une ligne de résultat sous la forme d'un tableau associatif. mysql_fetch_assoc — Lit une ligne de résultat dans un tableau associatif mysql_fetch_field — Retourne les données enregistrées dans une colonne, à partir d'un résultat, et retourne un objet. mysql_fetch_lengths — Retourne la taille de chaque colonne d'une ligne de résultat. mysql_fetch_object — Retourne les lignes résultats sous la forme d'un objet. mysql_fetch_row — Retourne une ligne de résultat sous la forme d'un tableau. mysql_field_flags — Retourne le sémaphore associé à la colonne spécifiée dans le résultat courant. mysql_field_seek — Place le pointeur de résultat à un offset donné mysql_field_table — Retourne le nom de la table oú se trouve une colonne mysql_field_type — Retourne le type de la colonne spécifiée dans le résultat courant. mysql_free_result — Efface le résultat de la mémoire. mysql_insert_id — Retourne l'identifiant généré par la dernière requête INSERT. mysql_list_dbs — Liste les bases de données disponibles sur le serveur MySQL. mysql_list_fields — Liste les champs du résultat MySQL. mysql_list_tables — Liste les tables d'une base de données. mysql_num_fields — Retourne le nombre de champs d'un résultat. mysql_num_rows — Retourne le nombre de ligne d'un résultat. mysql_pconnect — Ouvre une connexion persistante à un serveur MySQL. mysql_query — Envoie une requête SQL à un serveur MySQL. mysql_result — Retourne un champs d'un résultat. mysql_select_db — Sélectionne une base de données MySQL. mysql_tablename — Retourne le nom de la table qui contient le champs spécifié.
FONCTIONS POSTGRESQL pg_Close — Termine une connexion PostgreSQL. pg_cmdTuples — Retourne le nombre de tuples affectés. pg_Connect — Ouvre une connexion. pg_DBname — Nom de la base de données. pg_end_copy — Synchronise avec le serveur PostgreSQL pg_ErrorMessage — Message d'erreur. pg_Exec — Exécute une requête. pg_Fetch_Array — Lit une ligne dans un tableau. pg_Fetch_Object — Lit une ligne dans un objet. pg_Fetch_Row — Lit une ligne dans un tableau. pg_FieldIsNull — Teste si un champs est à NULL. pg_FieldName — Retourne le nom d'un champs. pg_FieldNum — Retourne le numéro d'une colonne. pg_FieldPrtLen — Retourne la taille imprimée. pg_FieldSize — Retourne la taille interne de stockage d'un champs donné. pg_FieldType — Retourne le type d'un champs donné par index. pg_loexport — Exporte un objet de grande vers un fichier pg_loimport — Importe un objet de grande taille depuis un fichier pg_loopen — Ouvre un objet de grande taille. pg_loread — Lit un objet de grande taille. pg_loreadall — Lit un objet de grande taille en totalité. pg_lounlink — Efface un objet de grande taille pg_lowrite — Ecrit un objet de grande taille pg_NumFields — Retourne le nombre de champs pg_NumRows — Retourne le nombre de lignes. pg_Options — Retourne les options. pg_pConnect — Etablit une connexion persistante. pg_Port — Retourne le numéro de port. pg_put_line — Envoie une chaîne au serveur PostgreSQL pg_Result — Retourne les valeurs d'un identifiant de résultat. pg_set_client_encoding — Choisi l'encodage du client pg_client_encoding — Lit l'encodage du client pg_trace — Active le suivi d'une connexion PostgreSQL pg_tty — Retourne le nom de tty. pg_untrace — Termine le suivi d'une connexion PostgreSQL
|