Aller au contenu
Akihira

tutoriel Développons notre CMS Metin2 #2 : Introduction aux différents langages et début avec PDO

Messages recommandés

Salut !

 

Avant de suivre cette partie, je vous invite à lire la précédente :

 

Je vais ici essayer de vous faire découvrir HTML, CSS, JS et PHP.

Voici les différents objectives de cette partie :

  • Découvrir les éléments basiques de l'HTML tels que :
    • La doctype
    • Différents balises :
      • Les principales balises telles que le p,h1,ul,td...
      • Les principales balises orphelines telles que le hr, br...
    • Les formulaires qui seront très utiles pour la suite,
    • Les tableaux,
    • Les liaisons :
      • CSS,
      • JS.
  • PHP :
    • Découverte de PDO :
      • Créer sa requête :
        • Préparation,
        • Insertion de données,
        • Exécution,
      • Traiter les données :
        • Nombre de ligne affectée,
        • Colonne affectée,
        • Ligne des colonnes affectées.
    • Divers.

 

Nous avons un emploi du temps assez chargé, nous ferions mieux de nous y mettre maintenant !

 

 

HTML: 

HTML est un langage de balisage. Il dispose de balise.

Je vous propose une petite liste, qui résume les principales balises. @ASIKOO Il faudrait un système pour faire des cartes mentales ! ! (Je sais pas si c'est toi que je devais taguer, mais tu m'as l'air d'être le seul actif...).

Sauf si je précise que les balises sont orphelines, elles devront être ouvertes puis fermées. Utilisez pour les fermer la même balise que pour les ouvrir, mais ajoutez un "/" exemple : <p>Message</p> 

  • Des balises assez spéciales :
    • <!DOCTYPE html>
      • Elle au dessus de tout votre code HTML.
      • Elle est obligatoire, même si le code marche sans, pas de question, c'est obligatoire.
      • Balise orpheline.
    • <head>.. </head>
      • Se place après la balise de doctype.
      • Elle contient les informations complémentaires de la pages telles que :
        • Le titre,
        • Les mots clés,
        • Les importations de :
          • CSS,
          • JS.
        • Toutes les méta-informations.
    • <body> .. </body>
      • Se place après la balise de fermeture </head>
      • Contient littéralement le corps de la page. C'est tout ce qui sera affiché au client.
  • Les balises principales :
    • Texte brut :
      • <p> : Permet de rédiger un paragraphe.
      • <h1>,<h2>... <h6> Permet d'écrire un titre plus ou moins important. L'évolution de l'importance est décroissante par rapport à la valeur associée à h.
    • Les tableaux, un tableau ce compose de ces balises :
      • <table> : Désigne le début et la fin du tableau,
      • <tr> : Désigne une ligne du tableau,
      • <td> : Désigne une cellule du tableau.
      • On va donc créer un tableau comme ceci :
      • <table> --> On crée le tableau
        • <tr> --> On crée une nouvelle ligne
          • <td>.. </td> --> On crée les colonnes en désignant les cellules
        • </tr> --> On marque la fin de la ligne
        • <tr> --> On crée une nouvelle ligne
          • <td>.. </td> --> On crée les colonnes en désignant les cellules
        • </tr> --> On marque la fin de la ligne
      • </table> --> On marque la fin du tableau
      • Il existe aussi (mais nous en reparlerons si nécessaire) :
        • <thead>
        • <tfoot>
        • <tbody>
    • Liste dite ordonnée :
      • <ol>
        • <li> élément </li>
      • </ol>
    • Liste dite non ordonnée :
      • <ul>
        • <li> élément </li>
      • </ul>

Je n'ai pas d'autre balise en tête dans l'instant présent. Si une balise que l'on va utiliser n'est pas présente dans ce petit regroupement, je vous l'expliquerais le moment venu.

 

 

Je vais maintenant vous parlez des liaisons.

 

Si vous ne le savez pas encore l'html, le css, et le javascript ne se mettent pas dans le même fichier pour des raisons évidentes de :

  • Propretés,
  • Efficacités
  • Facilités.

 

Il y a deux types de lignes différents qui se mettent tous les deux dans l'entête (head) du fichier html :

<link href="assets/css/style.css" rel="stylesheet">

Ici, nous importons, créons un lien entre les deux fichiers. Notez que la seule valeur à changer est celle du href="" (Qui désigne une destination) vers la destination du fichier voulu.

 

<script src="assets/js/modernizr.js"></script>

Cette balise est assez bizarre je sais. Vous n'avez qu'à changer la destination nécessaire dans la valeur de l'attribue src.

 

Je vous propose d'entamer maintenant PHP, PDO :

 

PHP --> PDO: 

 

Bien, je vous rappelle que nous avons déjà crée notre connexion PDO stockée dans la variable db.

 

Je vous propose pour commencer de déjà vous apprendre à créer une fonction en php. 

 

Une fonction vous permet d'effectuer un protocole plus ou moins long sans devoir le retaper entièrement. C'est le même principe que les fonctions en mathématiques, sauf qu'ici, nous ne faisons pas qu'ajouter des nombres, multiplier, etc...

La structure d'une fonction est assez simple :

<?php 

function GetUserIP(){
  
}

?>

Ici, nous avons crée notre fonction nommée GetuserIP. Si votre fonction prends en compte des paramètres, (comme un x en mathématiques par exemple), vous les ajouterez entre les parenthèses, sous forme de variable, et séparés par des virgules. Ici, je vous montre une fonction assez technique, ça va peut-être, être même la fonction la plus compliquée que nous allons faire avec ce CMS. Car clairement... Il n'y a rien de compliqué sur un CMS Metin2.

 

Bien, avant de commencer à écrire notre code, il sera préférable de savoir exactement ce que va faire la fonction. Pour des raisons de sécurités, nous allons vérifier que l'utilisateur dispose bien d'une IP valide, et que le serveur peut "capter". On ne sera pas à l'abri des VPNs, mais c'est déjà mieux que rien.

Nous allons définir pour commencer trois variables qui contiendront :

  • client 
    • L'ip de la personne enregistrée si possible
  • forward
    • L'ip malgré un proxy
  • remote
    • L'ip du client qui demande la page courante

Pour cela nous allons utiliser une super variable. Si vous avez lu l'autre tutoriel, vous savez que les supers variables commencent toutes pas : $_ ici, nous allons utiliser la super variable server, donc : $_SERVEUR. Pour client et forward, nous allons mettre un arobase devant le dollars. Pour un soucis de type, je m'attarde pas là dessus, nous ne l'utiliserons plus de toute façon...

Vous ne pouvez pas deviner le code, sauf si vous chercher des heures sur la doc, cela donne :

<?php
	$client  = @$_SERVER['HTTP_CLIENT_IP'];
  	$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
  	$remote  = $_SERVER['REMOTE_ADDR'];
?>

Bien, nous allons maintenant vérifier si au moins client ou forward à le format d'une IP, sinon, nous utiliserons remote. Nous allons pour ça faire un bloc de condition facilement représentable grâce à ce schéma :

  • On définie la variable client
  • On définie la variable forward
  • On définie la variable remote
  • Si client ressemble à une IP valide, si oui :
    • On assimile sa valeur à une autre variable nommée IP
  • Si client n'a pas l'air d'être une IP valide : On vérifie si forwad là, si oui :
    • On assimile sa valeur à une autre variable nommée IP
  • Sinon :
    • On assimile la valeur de remote à la variable nommée IP.

Pour vérifier son format, on va utiliser une filtre, pas d'expression régulière c'est démodée. Vous ne pouvez pas le deviner, cela donne :

<?php
	$client  = @$_SERVER['HTTP_CLIENT_IP'];
  	$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
  	$remote  = $_SERVER['REMOTE_ADDR'];
  	if(filter_var($client, FILTER_VALIDATE_IP)){
   		$ip = $client;
  	}elseif(filter_var($forward, FILTER_VALIDATE_IP)){
		$ip = $forward;
  	}else{
   		$ip = $remote;
  	}
?>

On utilise donc les outils 

  • if --> Il veut dire "Si", soit : Si ce que je te dis dans la parenthèse est vrai (=true) alors :
    • Il fait ce qu'il y a entre les accolades.
    • Si la condition est respectée, on sort de la boucle.
  • elseif marche comme le if à une différence près :
    • Il ne peut être placé qu'après un if
    • Ne s'exécutera que si le if n'est pas respecté
    • Si la condition est respectée, on sort de la boucle.
  • else --> Si aucune des conditions n'est respectées, le code fait ce qui se trouve dans le else.

 

Sachez que additionner des if à la suite, et mettre des elseif n'a pas le même effet. Si vous enchainez des if, le code va tous les essayer un par un. Si vous mettez des elseif, il va tous les vérifier dans l'ordre, mais dès qu'il aura trouvé une solution, il ne va plus suivre les autres elseif de ce bloc.

 

Il ne nous reste plus qu'une chose à faire :

  • Vérifier si la variable IP est définie
    • Si non : On sort de la condition en affichant une erreur
    • Si oui : On retourne l'IP en sortit de variable

Je vous montre une autre façon de faire un if (pas de panique, il n'en n'existe que deux) je vous explique après, notre fonction donne :

<?php
function GetUserIp(){
	$client  = @$_SERVER['HTTP_CLIENT_IP'];
  	$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
  	$remote  = $_SERVER['REMOTE_ADDR'];
  	if(filter_var($client, FILTER_VALIDATE_IP)){
   		$ip = $client;
  	}elseif(filter_var($forward, FILTER_VALIDATE_IP)){
		$ip = $forward;
  	}else{
   		$ip = $remote;
  	}
	if(!isset($ip)) exit("ERREUR");
  		return $ip;
}
?>

Quelques petites précisions :

  • La méthode exit permet de retourner une erreur et d'arrêter le script actuel, il va bloquer l'utilisateur.
  • La méthode return permet de sortir de la fonction en retournant une valeur, ici l'ip.
  • La méthode isset() permet de vérifier si une valeur est définie ou non.
  • Ajouter un ! devant des méthodes telles que isset inverse leur fonctionnement.

En quelque sorte nous faisons ici :

  • Si l'ip n'est pas définie :
    • Tu dégages le mec avec un bon coup de pied au cul
  • Sinon, tu le laisse passer !

 

Et voilà vous avez fait votre première fonction ! Et pas des plus facile en plus. S'il y a du code que vous ne comprenez pas. La divine bible est là pour vous.

 

Bien, allons enfin au vif du sujet : PDO.

 

Pour envoyer une query au serveur, nous allons :

  • Stocker notre requête dans une variable
  • Lui attribuer des paramètres si nécessaires
  • Exécuter la requête.  

 

Pour cela nous allons stocker notre requête dans une variable en utilisant un facteur d'affectation. Nous allons pour ça nous servir de la variable DB de la dernière fois.

Si vous utilisez la variable $db dans une fonction, il faudrait que vous refassiez un include dans cette même fonction.

 

Bien, on va préparer une query, on va utiliser : db->prepare(query);

On va assigner ça à la variable $Akihira par exemple, tapons :

<?php
	$Akihira = $db->prepare();
?>

Bien, nous allons taper une query au hasard, par exemple une assez simple :

<?php
	$Akihira = $db->prepare("SELECT * FROM account.account");
?>

Bien, ici pas besoin d'attribuer des paramètres, vous pouvez exécuter votre fonction comme ceci :

<?php
	$Akihira = $db->prepare("SELECT * FROM account.accoun");
	$Akihira->execute();
?>

Maintenant, nous avons trois façon de récupérer des informations sur ce que nous avons fait :

  • Savoir combien de ligne ont été affectée, ici cela nous renvoie le nombre de compte crée en réalité?
    • rowCount();
  • Sélectionner les lignes affectées avec les colonnes indiqués
    • fetch();
  • Sélectionner toutes les les colonnes de toutes les lignes affectées.
    • fetchAll();

 

Bien, pour le rowCount(); c'est le plus simple, tapez :

<?php
	$Akihira = $db->prepare("SELECT * FROM account.accoun");
	$Akihira->execute();
	$Akihira = $Akihira->rowCount();
?>

Ici, comme nous avons tout sélectionner ("*"), au niveau où vous êtes pour l'instant, il n'y a pas de différence, mais ne vous habituez pas à ça, il y en aura bientôt !

 

Pour le fetch, il va vous créer un tableau, il va falloir utiliser une méthode spécial pour obtenir les résultats. Mais on va voir ça dans un prochaine tutoriel où je vous parlerais plus en détails des tableaux, et on verra aussi la boucle foreach je pense pour pouvoir parler plus en détail du fetchAll.

 

En attendant je vous dis merci d'avoir lu, et référé vous à la doc en attendant ;)


Salut !

 

 

 

 

 

 

 

 

 

Modifié par FrancH

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut! 

Génial, une suite! (a).

J'ai suivi ton tutoriel en essayant de comprendre un maximum de chose, je bloque juste sur une chose pour l'instant (Je crois). 

Concernant la fonction, dois-je la mettre dans le fichier db.php créé lors du premier tutoriel? 

Comme ceci? 

Contenu Masqué

    Répondez au message pour visualiser le contenu

Merci encore! +1. 

Partager ce message


Lien à poster
Partager sur d’autres sites

Tes fonctions, mets les dans functions.php il est fait pour ça ;)

 

Et pas besoin d'additionner les <?php ...?> une fois que tu l'ouvres, fermes le à la fin , pas besoin de les enchainer :o

Si j'ai bien lu, elle les met pour la coloration syntaxique^^'

Partager ce message


Lien à poster
Partager sur d’autres sites

Elle est inutile sauf que je conseil de s'habituer à la mette tout le temps, au moins pas de problème d'oublie dans les autres fichiers. Pensez juste à ne rien mettre après la balise, même des lignes vides, ça générerait du code HTML inutile.

@Takuma C'est exactement ça.

@ASIKOO Non, des petit carrés qu'on peut relier par des traits et mettre un peu où on veut, je l'avais vu sur un autre site il me semble, si je le retrouve je te le montrerais.

@Holly Heureuse que ça te plaise :P

 

Modifié par Akihira

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 08/04/2018 à 17:53, Takuma a dit :

@Akihira Il va falloir pense à continuer mdrr !

On verra ça plus tard, pour l'instant je n'ai pas le temps. Tu pourrais continuer non ? Je ne pense pas t'avoir perdu à ce niveau là ;) 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×

Information importante

By using this site, you agree to our Conditions d’utilisation.