====== Installation ====== Vous allez avoir besoin d'installer les logiciels Apache et MySQL sur votre ordinateur pour le transformer en server web. Le fait de disposer d'un serveur web sur votre propre machine vous permet de travailler en local sans avoir à uploader les fichiers à chaque modification. ===== Télécharger et installer ===== Au lieu d'installer séparément Apache, PHP et MySQL, puis de les configurer, il existe des logiciels qui fournissent un package complet contenant ces logiciels pré-configurés ainsi que les addons dont vous pourriez avoir besoin. * Si vous êtes sous Windows, installez [[http://www.wampserver.com/en/download.php|WampServer]] * Si vous êtes sous Mac, installez [[http://mamp.info/en/index.html|MAMP]] * Si vous êtes sous Ubuntu Linux, tapez dans un terminal sudo apt-get install apache2 php5-mysql libapache2-mod-php5 mysql-server phpmyadmin suivez le tutoriel d'installation [[https://help.ubuntu.com/community/ApacheMySQLPHP|Apache+MySQL+PHP]] sur le site d'Ubuntu * Si vous êtes sous [[http://www.android.com/|Android]], [[http://www.gnu.org/software/hurd/|Hurd]], [[http://www.netbsd.org/|NeetBSD]], [[http://www.freebsd.org/|FreeBSD]], [[http://www.openbsd.org/|OpenBSD]], [[http://www.haiku-os.org/|Haiku]], [[http://www.slackware.com/|Slackware]], [[http://www.reactos.org|ReactOS]], [[http://www.youtube.com/watch?v=XZXWGa8rZ7o|FistFuckOS]], [[http://plan9.bell-labs.com/plan9/|Plan9]], [[http://mxs.buffout.org/|aimxhOS]] ou autre, référez-vous à la documentation officielle de votre Système d'exploitation. ===== Rendre votre vie plus simple ===== Quelques petits trucs optionnels si vous voulez vous simplifier la vie, c'est pas obligé, c'est juste des conseils pour vous. ==== Sur Windows ==== === L'icône Wamp dans la zone de notifications === Utilisez le launcher de wamp (dans la zone de notifications) pour accéder aux principaux endroits : * lancer le localhost avec le navigateur web * lancer phpmyadmin avec le navigateur web * accéder au dossier www avec l'explorateur de fichiers {{:ressources:php:wamp_launcher.png?700|}} === Conflits avec Skype === Si Skype est lancé, il peut entrer en conflits avec Wamp, pour éviter ce conflits, désactivez "Utiliser les ports 80 et 443 comme alternative" en décochant la case. Ou, plus simple, éteignez skype. {{:ressources:php:skype_noconflicts.png?700|}} **Enfin relancez wamp server.** === Conflits avec Spotify === Si Spotify est lancé, il peut entrer en conflits avec Wamp, pour éviter ce conflits, quittez Spotify, quittez-le vraiment {{:ressources:php:spotify_noconflict.png?700|}} **Enfin relancez wamp server.** ==== Sur Mac OS ==== === Utilisez le dossier Sites === Dans le dossier utilisateur, par défaut il y a un dossier **Sites**, mettez vos sites dedans, ce sera plus simple que d'aller chercher dans /Applications/MAMP/htdocs/ Pour ce faire, dans l'interface de MAMP, cliquez sur l'onglet Apache et choisissez le dossier Sites. {{:ressources:php:mamp_docroot.jpg|}} Pour chaque projet, créez un dossier séparé, ce sera toujours mieux que tous les fichiers en vrac, si si, je vous assure ! {{:ressources:php:mamp_sites.png|}} === Lancez MAMP en Widget === {{:ressources:php:mamp_widget.png |le widget de mamp}} Au lieu d'avoir sans cesse l'icône de MAMP dans le Dock (ça prend de la place), vous pouvez lancer MAMP dans le Dashboard en installant son widget, ça ne change pas grand chose, c'est juste un peu plus geek. ===== Version avec phpinfo ===== * A la racine de votre serveur web, créez un dossier php_td01_info * Créez-y un fichier phpinfo.php * dans ce fichier mettez-y le code suivant : * rendez-vous à l'adresse [[http://localhost/php_td01_info/phpinfo.php]]\\ (ou [[http://localhost:8888/php_td01_info/phpinfo.php]] si vous avez MAMP configuré par défaut)\\ que se passe-t-il ? ====== Echo ====== Pour travailler sur echo, créez un dossier php_td01_echo. La fonction [[phpfn>echo]] est super pratique, elle permet d'afficher du contenu dans une page web. Je pense qu'elle fait partie des fonctions les plus utilisées dans PHP, on va donc commencer par celle-ci. ===== echo simple ===== Créez ainsi un fichier echo_simple.php Pour faire ça mieux, placez votre code dans un fichier PHP mais qui contient du code HTML. Placez le donc entre les balises . ANAEL Lancez ces fichiers dans un navigateur dont l'adresse commence par http ... pour regarder le résultat. Enfin, que se passe-t-il si vous enregistrez votre fichier au format .html au lieu de .php ? Merci d'écrire la réponse... ===== echo concaténation ===== La concaténation, est l'action de rassembler plusieurs chaînes de caractères Le . permet de faire la jointure entre la chaîne de caractères "je suis" et "un ninja". Ce code affiche "Je suisun ninja", modifiez le pour qu'il affiche "Je suis un ninja". ===== echo et variables ===== Les variables permettent de stocker des données de manière temporaire, en PHP elles s'écrivent avec un $ devant. Modifiez ceci pour afficher le nom et le prénom en utilisant les variables $nom et $prenom (souvenez vous que la variable $prénom avec un accent ne fonctionnera pas). ===== Guillemets, apostrophes, antislash, etc. ===== ==== Guillemets ==== Les guillemets " se disent quote marks ou simplement quote en anglais, les apostrophes ' se disent simple quote. On peut utiliser les deux types de guillemets dans des echo. La différence, c'est que les variables dans les ' ne sont pas exécutées, testez ainsi ce code source. ==== Antislash ==== Le problème, c'est que ceci ne marche pas parce que PHP se mélange dans entre les guillemets et les apostrophes: Testez le code ci-dessus, il doit vous afficher plein d'erreurs. Fixez le en utilisant des \ devant les caractères qui causent le problème. ==== \n ou retour chariot ==== L'Antislash n((ou "Backslash n" en anglais")) de son doux nom est aussi appellé [[wp>fr:retour chariot]], il permet de faire un retour à la ligne. Si votre code PHP génère du HTML, ça ne se verra pas car — souvenez vous – ça n'a pas d'influence sur le rendu. En revanche, ceci peut vous aider à re-lire plus facilement le code HTML généré. Association nationale des éditeurs de livres\n"; echo "

L'Association nationale des éditeurs de livres (ANEL) est née en 1992.

\n"; ?>
Dans le navigateur, affichez le code source de la page pour voir si le retour chariot a bien été effectué. ====== Les variables ====== Pour travailler sur les variables, créez un dossier php_td01_variables Comme vu en amphi, les variables sont des receptacles pouvant contenir plusieurs valeurs, par exemple : Pour pratiquer un peu le truc : quelle sera la valeur de la variable $resultat ci-dessous ? Si vous avez du mal avec ce concept, allez lire [[http://www.atelierphp.net/lesson_02_variables/lesson_02.php|le cours sur les variables sur le site atelier PHP]] ===== string ===== Les strings, comme nous l'avons vu dans l'[[amphi01]] sont des chaînes de caractères, par exemple "je suis une chaîne de caractères" est une chaîne de caractères, 42 n'en est pas une. Pour ceux qui suivent pas trop, 42 c'est un nombre :-) $nom = "Gaspard"; ===== integer ===== Les Integers ou "entiers" sont des nombres, par exemple 42. $nombre = 42; ===== float ===== Les float ou double sont des nombres à virgule, on ne s'en sert presque jamais $nombre_a_virgules = 1/3; ===== boolean ===== Les booleans (on dit [[wp>fr:Booléens]] en français) sont des variables qui peuvent prendre comme valeur true ou false qui correspondent à peu près à 0 ou 1, les booléens peuvent être très pratique mais on ne s'en servira pas vraiment dans l'immédiat. $reponse = true; ===== array ===== Les arrays — appelées tableaux en français permettent de mettre plusieurs variables en une seule, on en reparlera quelques lignes plus tard. $fruits = array('pommes','poires','fraises'); ===== autres ===== Outre les arrays qui sont des variables contenant d'autres variables, il existe d'autres types de variables comme les ressources et les objets que nous ne verrons pas explicitement cette année. Grosso modo, ça ressemble à ça : $twingo = new Car(); // objet $link = mysql_connect(); // ressource ====== Les tableaux ====== Nous l'avons vu, les tableaux servent à stocker plusieurs valeurs dans une seule variable, c'est très pratique dans un grand nombre de cas (que nous verrons au [[td02]]). On distingue deux manières de stocker des données : dans un certain ordre (tableaux itératifs) et avec certains mots associés (tableaux associatifs). ===== itératifs ===== Les tableaux itératifs peuvent être définis de différentes manières. Le code ci-dessous permet de les créer, mais pas de les afficher. // méthode 1 $eleve = array(); $eleve[0] = 'nicolas'; $eleve[1] = 'loic'; $eleve[2] = 'bruno'; unset($eleve); // méthode 2 $eleve = array(); $eleve[] = 'nicolas'; $eleve[] = 'loic'; $eleve[] = 'bruno'; unset($eleve); // méthode 3 $eleve = array('nicolas','loic','bruno'); unset($eleve); (juste pour info : [[phpfn>unset]] sert à effacer le contenu de la variable) Prenez le tableau suivant et reproduisez-le avec la méthode 1 // les premiers pokémons, source : http://fr.wikipedia.org/wiki/Liste_des_Pok%C3%A9mon $pokemon = array('MissingNo.','Bulbizarre','Herbizarre','Florizarre', 'Salamèche','Reptincel','Dracaufeu','Carapuce','Carabaffe','Tortank','Chenipan'); A partir du tableau itératif obtenu, affichez Carapuce. Enfin, ajoutez les 10 pokémon suivants : Chrysacier, Papilusion, etc. ===== associatifs ===== Pour les tableaux associatifs, c'est à peu près la même méthode // méthode 1 $player = array(); $player['vie'] = 100; $player['armure'] = 50; $player['endurance'] = 200; unset($player); // méthode 2 $player = array('vie'=>100, 'armure'=>50,'endurance'=>200); Ajoutez la caractéristique 'mana' level 20 au personnage. ===== tableau dans un tableau ===== Bien entendu, pour éviter que ce soit trop simple, on peut mettre des tableaux dans des tableaux, pour nos pokémons de l'exemple ci-dessus, ça donnerait $pokemon = array(); $pokemon[]=array('nom'=>'MissingNo.','type'=>'inconnu'); $pokemon[]=array('nom'=>'Bulbizarre','type'=>'plante'); $pokemon[]=array('nom'=>'Herbizarre','type'=>'plante'); $pokemon[]=array('nom'=>'Florizarre','type'=>'plante'); Comme c'est vite difficile de s'en sortir, pour afficher le contenu d'un tableau, utilisez la fonction [[phpfn>var_dump]]. A vous de jouer, cumulez les deux méthodes pour créer plusieurs personnages pour créer un résultat tel que le var_dump($player); affiche ceci : array(3) { [0]=> array(2) { ["nom"]=> string(6) "Naruto" ["level"]=> int(3) } [1]=> array(2) { ["nom"]=> string(6) "Sakura" ["level"]=> int(2) } [2]=> array(2) { ["nom"]=> string(7) "RockLee" ["level"]=> int(0) } } ====== Utilisation d'include ====== Pour l'exercice include, créez un dossier php_td01_include dans-lequel vous travaillerez dorénavant. ===== inclusion de texte ===== Souvenez-vous, quand on veut afficher du texte dans une page, on peut simplement utiliser la fonction [[phpfn>echo]]. Reproduisez cet exemple dans un fichier jaime_les_patates.php echo "patate"; Créez un fichier patate.txt qui contient simplement : je suis un fichier patate Dans le fichier jaime_les_patates.php, à la place du echo, mettez un include include "patate.txt"; Créez un fichier patate.html tel que ci-dessous et incluez-le

je suis un joli fichier patate

Créez un fichier patate.php tel que ci-dessous et incluez-le

je suis un fichier patate

===== inclusion et variables ===== Il est également possible de passer des variables dans les includes. Créez un nouveau fichier nommé les_patates.php dont le code est : $qualificatif = "joli"; include "patate.php"; $qualificatif = "moche"; include "patate.php"; Modifiez maintenant le fichier patate.php pour que le résultat de ce script soit : Je suis un //joli// fichier patate Je suis un //moche// fichier patate ===== ascii et binary ===== A tester : que se passe-t-il si j'inclus patate.jpg ? {{:ressources:web:patate.jpg?200|}} (oui, je sais, je recycle mes TD, cémal) ===== Exemple dans la vraie vie ===== Include est très pratique quand on fait un site, ça évite de faire plein de copiers/collers et quand on a des modifications à faire, ça évite de devoir les faire une à une sur toutes les pages du site, au lieu de ça il suffit de changer dans un seu fichier qui est inclus. {{:ressources:php:g-ec_home.png?500|G.EC Finance}} Voici un script contenant le site g-ec finance, c'est un petit site de 8 pages, très simple, seulement une seule page a été montée : la page d'accueil. ==== Créez toutes les pages ==== {{:ressources:php:g-ec.zip|}} Vous remarquerez que le contenu des pages est présent dans le dossier templates/content/ il faut donc effectuer des includes pour minimiser vos efforts. Inspirez-vous du fichier index.php si vous êtes perdu. A partir de l'archive zip, reconstituez toutes les pages du site : * index.php c'est fait * transition.php * assistance.php * reorganisation.php * assets.php * contacts.php * jobs.php * legal.php ==== Ajoutez une page partenaires ==== Une fois ceci effectué, imaginez que le client vous demande d'ajouter une page "partenaires" * Créez sur toutes les pages du site, dans le menu de navigation un lien intitulé Partenaires * Créez une page partners.php qui contiendra un petit texte et [[http://www.google.com/images?um=1&hl=en&safe=off&biw=1258&bih=692&tbs=isch:1&sa=1&q=best+business+partners+logo&aq=f&aqi=&aql=&oq=|les logos des partenaires de la société]] ==== Le titre change à chaque page ==== Vous remarquerez que quelle que soit la page, le titre de la fenêtre reste le même, c'est parce que dans le fichier templates/head/dist.php entre les balises et le texte est toujours le même. En ré-utilisant l'exemple de l'exercice [[#inclusion et variables]] faites en sorte que chaque page ait un texte différent. ==== La logique du truc ==== Vous avez utilisé le [[http://www.yterium.net/Un-framework-HTML-est-il-possible |framework HTML ”Z“]] créé par Cédric Morin. Pour en comprendre les enjeux, vous pouvez regarder cette conférence [[http://www.paris-web.fr/2010/programme/un-framework-html-est-il-possible.php|Un Framework HTML est-il possible]] (50 minutes)