Aller directement au contenu

PHP

23 Sujets 134 Messages

Cette catégorie peut être suivie depuis le web social ouvert via le pseudo [email protected]

Sous-catégories


  • 1 1
    1 Sujets
    1 Messages
    SoulalexS
    [image: symfony_black_02.png] Présentation Symfony est un framework PHP libre développé par une entreprise française SensioLabs qui fournit de nombreuses fonctonnalités modulables pour les développeurs confirmés : Des performances accrues (système de cache, benchmark), Une sécurité parfaite (sécurité des controlleurs et de URLs), Gestion des URLs, Séparation du code selon la norme MVC, Implentation de pulgins. Installation Symfony peut être installé sur tous les systèmes d'exploitation (Windows, Linux, Mac). Il vous suffit pout cela d'entrer les commandes suivantes dans votre invité de commande préféré selon votre système : Pour Windows : php -r "readfile('http://symfony.com/installer');" > symfony Pour Linux et Mac OS : sudo curl -LsS http://symfony.com/installer -o /usr/local/bin/symfony sudo chmod a+x /usr/local/bin/symfony Une fois installé, vous pouvez créer un nouveau projet Symfony avec la commande suivante : symfony new my_project Site officiel de Symfony : https://symfony.com/ GitHub : https://github.com/symfony/symfony Documentation : http://symfony.com/doc/current/book/index.html Cours Openclassrooms : https://openclassrooms.com/courses/developpez-votre-site-web-avec-le-framework-symfony2/symfony2-un-framework-php
  • 4 14
    4 Sujets
    14 Messages
    F
    Hellow les amis ! 1/ Les prérequis Avoir un site fonctionnant en POO Avoir une connexion de base de donnée en PDO Ce servir de ses doigts Une petite explication des prérequis est essentiel. Alors, le script est une "Class" et utilise des mécanismes de la "PDO" pour exécuter les requêtes SQL. 2/ Description du Script Le script "SQLQuery" est un organisateur de requête SQL. Pour être plus précis, il évite les longues et longues requête SQL à taper à la main. De plus, il protège contre les injections SQL automatiquement, plus besoin de le faire avant de les donner en paramètre. :3 Enfin, il évite les erreurs dans les requêtes en plus de rendre le code encore plus lisible et petit ! 3/ Téléchargement et remerciement Le script est à télécharger, il est en P.J. La P.J dispose du script (SQLQuery.class.php) et d'une petite documentation (SQLQuery.doc.txt) sur "comment utiliser tel ou tel fonction". Il à était fait entièrement par mes soins, il date d'environ 1 an, mais il n'est pas dans l'obsolescence, j’entends par là qu'il est viable pour PHP 7. Si vous l'utilisez, n'hésitez pas à laisser un commentaire sur votre utilisation du script ! Pour le mot de la fin, sachez que je ne l'ai pas "terminé" dans le sens ou toute les fonctions possible et inimaginable ne sont pas intégré. Si vous avez des fonctions qui vous manque, je peux me charger de le mettre à jour avec votre retour et de l'utilisation que vous faite en plus. Je vous remercie d'avoir lu et je vous retrouve plus tard pour un nouveau partage de script. :3 [SQLQuery.zip](<base_url>/applications/core/interface/file/attachment.php?id=288)
  • 1 2
    1 Sujets
    2 Messages
    SoulalexS
    Bonjour, Suite à mon guide et aux nombreux tutoriel présents sur le forum PHP, vous êtes en mesure de réaliser votre propre site. Je sais que certains pensent que c'est mission impossible mais je crée cet exercice justement pour qu'un autre membre de la communauté ou moi-même puisse vous aider. Cet exercice fait appel à toutes les notions vues dans mon guide mais je vous propose de pimenter le tout en vous imposant de respecter l'architecture MVC. L'architecture MVC (Modèles, Vues, Controlleur) est une norme consistant à organiser son code source en trois parties : Les modèles : Ils gèrent la base de données. C'est donc avec ces fichiers que nous allons interagir avec notre BDD. Les vues : Elles vont nous permettre d'afficher le contenu généré avec le contrôlleur. Les contrôleurs : Ils vont gérer tout et mettre en relation le modèle et la vue. Ils font tous les calculs nécessaires pour l'affichage de la vue. Vous devez donc réaliser un site très basique en respectant cette norme. Nous allons diviser cet exercice en trois temps mais avant il nous faut créer un fichier à la racine de notre site appelé index.php qui gérera l'ensemble du site (c'est lui qui va appeler le bon contrôleur et qui va afficher ce qu'il retourne). I. Réalisation d'un sytème de news : Dans cette première partie, je vous propose de réaliser un système affichant 5 news par page. Vous devez donc créer un fichier news.php dans le dossier controller et dans le dossier models. Dans votre dossier views, créez un dossier news et ajouter un fichier nommé index.php. Pistes pour débuter : Pour récupérer les 5 dernières news, ajoutez ceci dans votre requête SQL : "ORDER BY id DESC LIMIT 0, 5". Notions abordées : Interactions PHP - BDD. II. Des utilisateurs : Nous allons maintenant ajouter des utilisateurs sur notre site. Il nous faudra donc élaborer un système de connexion / déconnexion, d'inscription et profile. Pistes pour débuter : Ajoutez session_start() avant votre code HTML. Je vous conseille de démarrer la session au tout début de votre script. Quand votre utilisateur voudra se déconnecter, utilisez session_destroy(). Notions abordées : Interactions PHP - BDD. III. Gestion des news : Pour rendre notre site encore plus dynamique, nous allons ajouter un système de gestion des news (donc ajout de news, suppression et insertion). Aussi, seuls les membres gardés "Administrateur" pourront accéder à ce système. Pistes pour débuter : Dans votre base de données, insérez une nouvelle colonne nommé "rank" (0 = Visiteur, 1 = Membre, 2 = Modérateur, 3 = Administrateur) Notions abordées : Interactions PHP - BDD. Voilà. C'est un gros travail de réflexion que je vous demande ici mais c'est ce qu'il faut faire pour s'améliorer
  • Rien ne s'enregistre dans ma BDD

    9
    0 Votes
    9 Messages
    21k Vues
    A
    Bonjours les melinyien, J'ai créé un formulaire que j'ai tout-à-fait bien lié à une page de traitement, mais rien ne s'enregistre dans ma bbd. Je précise qu'aucune erreur ne s'affiche, tout se déroule parfaitement bien... Visiblement. Mais secrètement, les infos transmises via le formulaire ne sont pas du tout enregistrées dans la base de données... Je vous mets le code de la page de traitement : <?php if(isset($_POST['Envoyer'])) { try {     $bdd = new PDO('mysql:host=localhost;dbname=essai;charset=utf8', 'root', ''); } catch(Exception $e) {         die('Erreur : '.$e->getMessage()); } $req = $bdd->prepare('INSERT INTO codef(Greffier, Noloi, Loi, Adoptio, Pour, Contre, Oblatusab, Fonction, Submandatumde, Principioregni, Ultimregni) VALUES("'.$_POST['Greffier'].'", "'.$_POST['Noloi'].'", "'.$_POST['Loi'].'", "'.$_POST['Adoptio'].'", "'.$_POST['Pour'].'", "'.$_POST['Contre'].'", "'.$_POST['Oblatusab'].'", "'.$_POST['Fonction'].'", "'.$_POST['Submandatumde'].'", "'.$_POST['Principioregni'].'", "'.$_POST['Ultimregni'].'")'); $req->execute(array( $_POST['Greffier'], $_POST['Noloi'], $_POST['Loi'], $_POST['Adoptio'], $_POST['Pour'], $_POST['Contre'], $_POST['Oblatusab'], $_POST['Fonction'], $_POST['Submandatumde'], $_POST['Principioregni'], $_POST['Ultimregni'] )); header('Location: afloiscodef.php'); /*echo '<span class="accesblock"><p>Loi ajoutée avec succès !</p></span>';*/ } ?> Merci de votre aide, d'avance ! P.S : Je ne sais pas comment mettre l'affichage de programmation, désolé.
  • Créer un système de Connexion / Inscription en PHP

    32
    0 Votes
    32 Messages
    64k Vues
    4Spartan84
    Bonjour à tous ! Aujourd'hui nous nous attaquons à un tutoriel assez long ! Je vous préviens tout de suite ! Si vous n'avez pas de connaissance en PHP / HTML il est inutile de poursuivre ce tutoriel. Nous allons donc comme dit plus haut utilisé du PHP & du HTML pour réaliser ce tutoriel. 1 - Système de connexion C'est partie ! On s'occupe en premier de la base de donnée : Nous allons donc créer un table nommer "membre" qui regroupera tous les membres du site. CREATE TABLE membre ( id int(11) NOT NULL auto_increment, login varchar(8) NOT NULL, password varchar(8) NOT NULL, PRIMARY KEY (id), KEY ID_2 (id) ); Ici on stocke : L'id, le Pseudo & le Password du membre. Ensuite on créer la page LOGIN.PHP & on insére formulaire HTML de connexion : <form method="post" action=""> <legend>Connexion au Panel</legend> <div class="form-group"> <label class="col-lg-2 control-label">Login</label> <div class="col-lg-10"> <input type="text" class="form-control" name="login" placeholder="Login"> </div> </div><br/><br/><br/> <div class="form-group"> <label class="col-lg-2 control-label">Mot de passe</label> <div class="col-lg-10"> <input type="password" class="form-control" name="password" placeholder="Mot de passe"> </div> </div> <br/><br/><center><button type="submit" name="submit" class="btn btn-primary">Connexion</button></center> </form> Ensuite on créer le système qui vas vérifier & nous connecter : <?php // on se connecte à MySQL $db = mysql_connect('localhost', 'login', 'password'); mysql_select_db('nomdelabase',$db); if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) { $_POST['password'] = hash("sha256", $_POST['password']); extract($_POST); // on recupére le password de la table qui correspond au login du visiteur $sql = "select password from membre where login='".$login."'"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $data = mysql_fetch_assoc($req); if($data['password'] != $password) { echo '<div class="alert alert-dismissable alert-danger"> <button type="button" class="close" data-dismiss="alert">x</button> <strong>Oh Non !</strong> Mauvais login / password. Merci de recommencer ! </div>'; } else { session_start(); $_SESSION['login'] = $login; echo '<div class="alert alert-dismissable alert-success"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>Yes !</strong> Vous etes bien logué, Redirection dans 5 secondes ! <meta http-equiv="refresh" content="5; URL=dashboard"> </div>'; // ici vous pouvez afficher un lien pour renvoyer // vers la page d'accueil de votre espace membres } } else { $champs = '<p><b>(Remplissez tous les champs pour vous connectez !)</b></p>'; } ?> Ensuite nous modifions la ligne : // on se connecte à MySQL $db = mysql_connect('localhost', 'login', 'password'); mysql_select_db('nomdelabase',$db); Ici vous entrez les identifiants de connexion à la base de donnée. Voilà, la connexion est terminée. Maintenant nous passons au plus dur ! 2 - Système d'inscription Ici on créer une page REGISTER.PHP & on créer le système d'inscription. Enfaite ce n'est pas réellement le plus dur car ici nous nous servirons tout simplement d'un système de news en php mais nous le modifierons un petit peut ! Alors go : On créer le formulaire d'inscription et on l'insère dans la page <form method="post" action=""> <legend>S'inscrire sur le site</legend> <div class="form-group"> <label class="col-lg-2 control-label">Login</label> <div class="col-lg-10"> <input type="text" class="form-control" name="login" placeholder="Login"> </div> </div><br/><br/><br/> <div class="form-group"> <label class="col-lg-2 control-label">Mot de passe</label> <div class="col-lg-10"> <input type="password" class="form-control" name="password" placeholder="Mot de passe"> </div> </div> <br/><br/><center><button type="submit" name="submit" class="btn btn-primary">S'Inscrire</button></center> </form> Et on créer le système ! IMPORTANT : Ici nous effectuons une connexion MYSQL PDO (beaucoup plus sécurisé) et tout à l'heure le système était fait de sorte à utiliser une connexion MYSQL BASIQUE qui bientôt disparaitra ... C'est partie : <?php //Connexion à la BDD   try   {       $bdd = new PDO ('mysql:host=localhost;dbname=nomdelabase', 'login', 'password');      }      catch(Exception $e)   {    die('Erreur :'.$e->getMessage());   }        if(ISSET($_POST['submit'])) { //On créer les variables $login =   $_POST['login']; $password = $_POST['password']; $password = hash("sha256", $password); $req = $bdd->prepare('INSERT INTO membre(login, password) VALUES (:login, :password)'); $req->execute(array("login" => $login, "password" => $password)); if(!empty($login) && !empty($password)) { }else{ ?> <b>Pseudo ou MDP vide !</b> <?php } if(empty($login) && empty($password)) { }else{ session_start(); $_SESSION['login'] = $_POST['login']; header('Location: dashboard'); } }        ?> La connexion PDO est ici : <?php //Connexion à la BDD   try   {       $bdd = new PDO ('mysql:host=localhost;dbname=nomdelabase', 'login', 'password');      }      catch(Exception $e)   {    die('Erreur :'.$e->getMessage());   }[/php] Il ne vous reste plus qu'à changer : [php]('mysql:host=localhost;dbname=nomdelabase', 'login', 'password')[/php] Et ici aussi pour le lien de redirection une fois que la SESSION à démarrée : [php] session_start(); $_SESSION['login'] = $_POST['login']; header('Location: LIEN-DE-REDIRECTION'); 3 - Système de vérification ICI nouveau problème : Si on essaye d'accèder à une page qui normalement doit être réservé au personne connectées, par exemple : panel.php. Et bien nous y avons quand même accès même déconnecté ! Nous allons résoudre ce problème avec une page nommée vérif.php. On y inclue ce code : <? session_start(); /*  si la variable de session login n'existe pas cela siginifie que le visiteur  n'a pas de session ouverte, il n'est donc pas logué ni autorisé à acceder à l'espace membres */ if(!isset($_SESSION['login'])) {   echo '<h1>Vous n\'êtes pas connecté, accés interdit !</h1> <meta http-equiv="refresh" content="0; URL=index.php"> '; } ?>  Comme indiqué en haut, on regarde si la SESSION est démarrée, si elle ne l'est pas on interdit l'accès. Ensuite il ne vous reste plus qu'à include ce code sur toutes les pages que vous voulez : <?php include ('verif.php') ; ?> 4 - Système de déconnexion Pour finir l'utilisateur doit bien ce déconnecter une fois qu'il à terminé. Pour ce faire nous créons  la page logout.php et on y inclue ce code : <?php session_start(); session_unset(); session_destroy(); header('Location: login.php'); ?> Ici on déconnecte l'utilisateur & on le redirige vers la page de login ! Ce tutoriel est maintenant terminé ! Attention : Je préviens à l'avance avant que tous le monde spam le topic : Le Topic ne sert en aucun cas de Support ! J'insiste bien la dessus. Vu que je ne suis pas méchant contactez mon plutôt par Mp sur le Forum, c'est quand même mieux ! En espérant vous avoir aidez, à la prochaine !
  • Aide pour création d'un forum

    4
    0 Votes
    4 Messages
    4k Vues
    E
    Bonjour/Bonsoir, Voila mon script: <?php include('style.php'); include('menu.php'); ini_set("display_errors",0);error_reporting(0); header('Content-type: text/html; charset=UTF-8'); if($_GET['pseudo'] === '' || $_GET['pseudo'] === '#'){ echo '<br><center><div id="Erreur"><p>Vous n etes pas connecter!</p></div></center>'; }else{ $Post = '<div id = "inscription">     <form action = "#" method = "post">     <h1>Nouvelle discution: </h1>     <label for = "Message">Sujet: </label><p><input placeholder="ex: Aide pour faire un truc" class="textboxForum" type = "text" name = "Message" id = "Message" /></p>     <p><label for="NomForum">Nom de discution: </label><input placeholder="ex: Aide pour un truc" class="textboxForum" type="text" name="NomForum" id="NomForum" /></p>     <p><label for="Description">Description: </label><input placeholder="Description de l aide" class="textboxForum1" type="text" name="Description" id="Description" /></p>     <p><input type = "submit" value = "Envoyer" id = "valider" /></p><br>     </form> </div>'; function Verif_magicquotes ($chaine) { if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine); return $chaine; } $message = null;     $Sujet = (isset($_POST['Message']) && trim($_POST['Message']) != '')? Verif_magicquotes($_POST['Message']) : null;     $NomForum = (isset($_POST['NomForum']) && trim($_POST['NomForum']) != '')? Verif_magicquotes($_POST['NomForum']) : null;     $Description = (isset($_POST['Description']) && trim($_POST['Description']) != '')? Verif_magicquotes($_POST['Description']) : null; if(isset($Sujet,$NomForum,$Description))     {          $hostname = "#";          $database = "#";          $username = "#";          $password = "#";              $connection = mysql_connect($hostname, $username, $password) or die(mysql_error());          mysql_select_db($database, $connection);          mysql_query("SET NAMES 'utf8'"); $SUJET = mysql_real_escape_string($Sujet);          $NOMFORUM = mysql_real_escape_string($NomForum);          $DESCRIPTION = mysql_real_escape_string($Description);        $Pseudo = $_GET['pseudo'];              $insertion = "INSERT INTO List_Forum(Description,Nom_Forum,Sujet,Pseudo,Date_List) VALUES('".$DESCRIPTION."', '".$NOMFORUM."', '".$SUJET."', '".$Pseudo."', NOW())";              $inser_exec = mysql_query($insertion) or die(mysql_error());              if ($inser_exec === true)              {                  if(isset($resultat['message'])){                  session_start();                  $_SESSION['login'] = $message;                  $message = 'Votre  message a été envoyer.';              }             }          else          {              $message = 'Votre message n a pas été envoyer';          }     } } ?> <!DOCTYPE html> <html> <center> <head>     <title>Liste des Discutions - Site du Panda</title> </head> <body> <p><?php echo $Post; ?></p> <div id="inscription"> <h1>Listes des forums: </h1> <div id="Forum"> <?php     // Connect to database server     mysql_connect("#", "#", "#") or die (mysql_error ()); // Select database     mysql_select_db("#") or die(mysql_error());     // SQL query     $strSQL = "SELECT * FROM List_Forum ORDER BY ID DESC"; // Execute the query (the recordset $rs contains the result)     $rs = mysql_query($strSQL); // Loop the recordset $rs     // Each row will be made into an array ($row) using mysql_fetch_array     while($row = mysql_fetch_array($rs)) { // Write the value of the column FirstName (which is now in the array $row)       echo "Par: ".$row['Pseudo'] ."<br />";       echo $row['Nom_Forum']."<br>";       echo $row['Sujet']."<br>";       echo $row['Date_List']."<br>";       echo "<hr>"; } // Close the database connection     mysql_close();     ?>  </div>  </div> </body> </center> </html> Voila, évidemment la ou il y a les # pour la connection mysql, il y a mes  infos. Sinon, je voudrais de l'aide car, il fonctionne très très bien mais le probleme est que sur les informations qu'il renvois ( a la fin du script ) je voudrais pouvoir clicker sur une informations pour pouvoir acceder a une autre page. EyesGammer.
  • Les hébergeurs images

    2
    0 Votes
    2 Messages
    4k Vues
    mars073M
    Bonjour à tous, Je vais essayer de m'habituer à la nouvelle interface et vous faire un jolie tuto, non je ne vais pas expliquer comment faire un héébergeur d'image je ferais un autre tuto plus aboutis sur ça si vous voulez, mais bon là on va parler de l'hébergement avec par exemple les images payantes que l'on trouve sur google toute belle et quand on clique dessus on se retrouve avec un gros copyright qui rend l'image inexploitable... ou quand on veut ouvrir une image dans un onglet et que l'on est rediriger sans vers la page du site proposant l'image. Mes exemples régénèrent les images donc peuvent être gourmands si les images sont grandes et il existe peut-être des façons plus optimisées mais bon je programme proprement comme un porc :hap: On va donc [réécrire l'adresse](<base_url>/topic/909-re-%C3%A9crire-des-adresses-gr%C3%A2ce-%C3%A0-un-fichier-htaccess/) et [gérer son affichage](<base_url>/topic/477-gestion-dimage/) livre à vous d'utiliser une base de données (ex:sql) et vous ne communiquez qu'une référence ou un vrai nom dans l'url. Trop de blabla pas assez de CODE! :E Encore un petit truc, Google a son propre User-Agent (chaine qui donne des informations que vous utilisez Firefox sur Windows10 64-bit et qu'il est configurer en français) nous alors donc nous servir de cela pour détecter si c'est un moteur de recherche ou un simple utilisateur qui regard, notez qu'il est possible de trafiquer son User-Agent donc il y a mieux comme sécurité en cherchant la liste des ips des serveurs par exemple. Les User-Agents: GoogleBot: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) GoogleBot-Image: Mozilla/5.0 (compatible; Googlebot-Image/1.0; +http://www.google.com/bot.html) YahooSlurp:  Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp) MsnBot: msnbot/1.1 (+http://search.msn.com/msnbot.htm) On va faire un test avec une [expression régulière](<base_url>/topic/941-les-expressions-r%C3%A9guli%C3%A8resregex/) en php pour voir si ça ressemble à un bot Google: header("Content-Type: image/png"); // on dit que c'est une image est pas du php/html $img = imagecreatefrompng("images/tructresinteressant.png"); // image à protéger $cp = image createfrompng("image/copyright.png"); // copyright de protection à appliquer if (!preg_match("~Googlebot\-[a-zA-Z]+(/\d+(\.\d+)?)?~", $_SERVER['HTTP_USER_AGENT'])) imagesettite($img, $cp);  // on applique un motif avec le copyright imagepng($img); imagedestroy($cp); Si vous voulez que la personne soit redirigée quand elle va sur le lien de l'image c'est très simple: // on précise qu'il s'aigt d'une image png et non d'une page html (php compilé) header("Content-Type: image/png"); //vous charger l'image avec $im = imagecreatefrompng("monimage.png"); imagepng($im); imagedestroy($im); // ou plus cours et peut-être moins lourd mais risqué au niveau de l'encodage: echo file_get_contents("monimage.png"); // et enfin la redirection header("Refresh: 0; url=/index.php"); Maintenant on gère le débit, cette option est plus intéressante pour des plus gros fichiers car les images sont jamais très lourdes. // dans notre exemple on aura un débit de 10Ko/s (très lent) $handle = @fopen("monimage.png"); if ($handle) {     while (($buffer = fgets($handle, 1024)) !== false) { // 1024 => nombre d'octet dans le buffer que l'on écrit         echo $buffer;         usleep(100); // 10 => nombre de milliseconde entre chaque envoie, 1000 = 1seconde     } } [En cours de rédaction.... des idées? :)] PS: j'ai tapé le code directement sur le fofo donc s'il a y des fautes prévenez moi^^'
  • faire son propre BB-Code

    7
    0 Votes
    7 Messages
    3k Vues
    mars073M
    Bonjour à tous, Donc comme si bien dit dans mon titre je vais vous expliquer comment faire un système de bbcode en php. Et pour ceux qui ne savent pas ce qu'est le bbcode c'est un système de balise utilisé principalement sur les forums par exemple ici si vous voulez mettre un image avec un lien (si comme moi vous écrivez le bbcode à la main à la place d'utiliser l'interface) vous aurez un "code" comme celui-ci: [url=http://mon_utrl/][img=mon_image.png][/url] mais une fois traité il s'affichera sous une forme html: <a href="http://mon_url/" target="_blank"> <img src="mon_image.png" border="0" /> </a> ps: dans mon contexte les liens s'ouvrent dans un onglet et le desactive les bords pour IE Pourquoi ne pas laisser le code html aux utilisateurs/clients? Parce que celà fait une faille XSS ([plus d'info sur ce topic](<base_url>/topic/479-faille-de-s%C3%A9curit%C3%A9-les-plus-fr%C3%A9quente-en-relation-directindirect-php/)) même si vous pouvez aussi en désactiver/activer certaines seulement. Je vais donc vous expliquer comment faire: une balise orpheline (ex: [ img=], elle n'a aucune fermeture) une balise non-orpheline (ex: [ code] une balise non-orpheline + paramètre (ex: [ url=], il y a un paramètre en plus dans la balise) Donc pour faire notre bbcode vous allons utiliser ce qui s'appel des expressions régulières (aussi appelé "motif de recherche"), un truc que personnellement je n'aime pas car je me trompe souvent... Et donc une expression c'est en réalité une structure dans un texte (par exemple) on peut donc analyser s'il y a des chiffres, une chaîne de caractères ou autre, c'est souvent utilisé pour les e-mails pour voir si ce que vous avez entré ressemble à un e-mail, je ferais donc peut-être (si j'ai le courage un topic sur ça, sinon je connais un site assez bien. Bref donc nous allons commencer par une balise orpheline: // Contexte: J'ai fais une shoutbox et je mettre en place une balise [ img=] donc <img... en html $msg = "Bonjour! [img=heart.gif]"; $bb = '#\[ img=(.+)\]#iUs'; $htm = '<img src="$1" border="0" />'; $msg = preg_replace($bb, $htm, $msg); Donc l'expression: '##iUs' Elle est délimité par des # On utilise les antislashes ("") avant certains caractères car ils peuvent être utilisé pour la structure (expression), caractères tels "[", "]", "(", ")", ... "(.+)" : les parenthèses "()" symbolise un groupement littéral le point (".") symbolise qu'il peut s'agir de n'importe quel caractère et le plus ("+) symbolise qu'il peut y avoir 1 ou plusieurs caractères "#iUs' : "i" effectuer une recherche insensible à la casse (par de différence entre une lettre majuscule et une minuscule). "U" cette option inverse la tendance à la gourmandise des expressions rationnelles. "s" permet au point "." de correspondre à encore plus de caractères et/ou un retour à la ligne. Documentation PHP::Options de recherche Maintenant une balise pour center donc [centre][/centre] devient <center></center>, je vais un peux compacter le code pour avoir plus simple: $msg = "[centre]Coucou![/centre]"; $msg = preg_replace('#\[centre\](.+)\[\/centre\]#iUs', '<center>$1</center>', $msg); Il a donc suffit de déplacer "(.+)" et pour ceux qui n'avait pas encore compris la partie trouvée ici va remplacer le "$1", il sagit en réalité d'un tableau donc quand vous cherchez plusieurs expressions vous avez donc "$2", "$3",.. qui arrive. Nous allons donc maintenant avoir une balise avec un paramètre et pour complexer un peut on va dire que le paramètre est obligatoirement un chiffre décimal ^-^ // balise [taille=][/taille] remplacée par <font size=""></font> $msg = "[taille=5]Hello World! [/taille]"; $msg = preg_replace('#\[taille=(\d+)\](.+)\[\/taille\]#iUs', '<font size="$1">$2</font>', $msg); Comme vous le voyait j'ai mis la mettre "\d" à la place d'un "." donc à la place de chercher n'importe quel caractère je dis que c'est un chiffre décimal et le "+" spécifie qu'il peut-être composé de plusieurs chiffres même si je pense que font-size ne peut prendre que une valeur entre 1 et 5 j'aurais pu mettre directement "([1-2-3-4-5])" mais bon je ferais une explication plus détaillée dans un prochain topic PS: pour les smileys c'est un simple str_replace(): str_replace(":D", "<img src=\"images/smiley.gif\" />", $msg); PPS: et si vous avez plusieurs balise directement vous pouvez faire un tableau (si vous voulez vous pouvez mettre par exemple $htm[0] = "<b>$1</b>"; et donc pour reprendre toutes les balises faites + anti-faille XSS dans une fonction: function BBCode($msg = '') { $msg = htmlentities($msg); // suprresion des caractères spéciaux (html), à placer avant les modifications sinon vous affichez le message avec les balises (en lisible) $bb = array( '#\[img=(.+)\]#iUs', '#\[centre\](.+)\[\/centre\]#iUs', '#\[taille=(\d+)\](.+)\[\/taille\]#iUs', '#\[url=(\.*)\](.+)\[\/taille\]#iUs' ); $htm = array( '<img src="$1" border="0" />', '<center>$1</center>', '<font size="$1">$2</font>', '<a src="$1" target="_blank">$2</a>' ); return preg_replace($bb, $htm, $msg); } echo BBCode("[centre]<b>XSS</b>[/centre]"); /!\j'ai mis des espaces dans les balises pour pouvoir publier (ex: "[ img]")! Bonne programmation à tous! Cordialement, Mars073
  • [Sécurité] Sécuriser ses $_POST & $_GET

    11
    0 Votes
    11 Messages
    8k Vues
    BrokeosB
    Bonsoir, vous n'êtes pas sans savoir que, les hackeurs utilisent une méthode appelée "l'injection sql", qui comme son nom l'indique, permet d'injecté du code sql dans une fonction POST ou GET d'une page php. Elle est souvent utilisé pour contourner des connexion (par exemple, 'OR "="). Mais comment se protégé ? Tout simplement, rajoutez dans votre méthode POST ou GET : mysql_escape_string(); Ce qui donnerais au final (avec la variable et la méthode) : $user = mysql_escape_string($_POST['user']); Voila, j'espère que ça vous auras aidé ! ^^
  • Cours d'initiation aux rudiments du PHP

    Épinglé
    10
    0 Votes
    10 Messages
    3k Vues
    SoulalexS
    ![c0d23d2d6769e53e24a1b3136c064577-php_log](<base_url>/applications/sslimageproxy/interface/image.php?url=http://www.php.net/manual/fr/images/c0d23d2d6769e53e24a1b3136c064577-php_logo.png) Le PHP est un langage de programmation web permettant d'insérer du contenu dynamique dans vos pages. Ce langage offre de nombreuses possibilités telles que la gestion de news ou encore l'envoie d'eamil et combiné à une base de données, ses performances sont considérables. Le PHP nécessite de nombreux outils et de nombreuses heures d’apprentissage. Pour commencer, vous aurez besoin de Xampp ou Wamp ou tout autre logiciel incluant Apache, PHP et MySQL. Ensuite, je vous conseille vivement de garder la documentation proposée par PHP afin de trouver rapidement des fonctions ainsi qu'un cours bien rédigé comme celui de Mateo21 sur OpenClassrooms. Bien que dans ce cours elles ne sont pas utiles, le PHP requière des connaissances en HTML/CSS. En combinant tous ces langages, vous pourrez obtenir un site à la fois dynamique et élégant. Vous pourrez le rendre encore plus dynamique en utilisant le langage Javascript.
  • Apprendre le PHP

    Épinglé
    3
    0 Votes
    3 Messages
    2k Vues
    SoulalexS
    [image: c0d23d2d6769e53e24a1b3136c064577-php_logo.png] Si vous souhaitez vous lancer dans l'apprentissage du PHP, ce petit guide va vous aider à vous orienter vers les ressources dont vous aurez besoin tout au long de votre formation à ce nouveau langage. Les outils nécessaire : Un éditeur de texte (Sublim Text, Notepad++, Bloc note). Un serveur web avec PHP (xampp est un logiciel contenant tous les outils nécessaires pour ce faire). Un navigateur web (Firefox; Chrome) pour accéder à vos applications web avec éventuellement quelques outils de débug (Firebug). Sur Melinyel : [Cours d'initation aux rudiments du PHP](<base_url>/topic/1760-cours-dinitiation-aux-rudiments-du-php/?do=findComment&comment=17266) : Ce guide contient l'essentiel pour débuter en PHP. Il va vous permettre d'apprendre les rudiments de ce langage Cours : Concevez votre site web avec PHP et MySQL : Ce cours complet créé par Mathieu Nebra d'OpenClassrooms va vous permettre d'atteindre un bon niveau en PHP. Il est a noter que plusieurs mois d'apprentissage sont nécéssaire avant d'acquérir la certification finale. Tutoriels : [Créer un système de Connexion / Inscription en PHP](<base_url>/topic/437-cr%C3%A9er-un-syst%C3%A8me-de-connexion-inscription-en-php/?do=findComment&comment=4649) [Faire son propre BB-Code](<base_url>/topic/728-faire-son-propre-bb-code/?do=findComment&comment=7797) [Créer un moteur de recherche de base](<base_url>/topic/469-moteur-de-recherche-de-base/?do=findComment&comment=5088) [Gestion d'image en PHP](<base_url>/topic/477-gestion-dimage/?do=findComment&comment=5162) Documentations : Documentation officielle en français : Cette documentation est votre amie en toute circonstance. Elle vous permettra de comprendre certaines fonctions dont vous aurez besoin.
  • effectuer une requête POST

    4
    0 Votes
    4 Messages
    4k Vues
    mars073M
    Bonjour à tous, Je vais vous partagez un bout de code (que vous pouvez transformer en fonction) assez utile pour faire des requêtes POST (non pas avec du html) tout en PHP à quoi ça sert? quand vous désirez faire un système distant un peu sécurisé ou quand quelqu'un vous ennuie et qu'il n'a pas d'anti-robot sur sa page d'inscription... /* Contexte: ayant bricolé un serveur apache et installé PHP avec beaucoup de mal vous n'arrivez pas à installer un serveur SMTP (gestion d'envoie et de réception d'email). Alors pour pallier à ce problème vous utilisez un script distant sur un ftp ayant un serveur smtp vous devez effectuer une requête POST avec des variable: l'espéditeur, le destinataire, le sujet ($sujet), le contenu ($content) et une clé de sécurité. le serveur répond "OK" si l'envoie c'est fait, on récupère la réponse dans la variable $result */ $data = array( 'exp' => "[email protected]", // expéditeur 'dest' => "[email protected]", // destinataire 'subject' => $sujet, // sujet 'content' => $content, // contenu du mail 'key' => 0258410025412002541200255210 // clé de sécurité ); $url = "http://mars073.be/smtp.phps"; // url sur la quelle il faut envoyer la requête $data_url = http_build_query($data); $data_len = strlen($data_url); $x = array ('content'=>file_get_contents ($url, false, stream_context_create (array ('http'=>array ('method'=>'POST', 'header'=>"Connection: close\r\nContent-Type: application/x-www-form-urlencoded\r\n". "Content-Length: $data_len\r\n", 'content'=>$data_url)))), 'headers'=>$http_response_header ); $result = $x['content']; if ($result == "OK") { echo "L'envoie a été un succés."; } else { echo "t'as foiré #YOLO."; } Bonne programmation à tous! Cordialement, Mars073
  • Des bouts de code

    9
    0 Votes
    9 Messages
    3k Vues
    mars073M
    Bonjour à tous, Je fais ce topic pour tout les petits codes pour éviter de faire plein de topic, si vous avez besoin de quelque chose en php vous le dites et je l'ajoute Tester si un port est ouvert: -> fsockopen if (@fsockopen("127.0.0.1", 80, $errno, $errstr, 1) { // port ouvert } #en compact echo (@fsockopen("127.0.0.1", 80, $errno, $errstr, 1))? "En ligne":"Hors-ligne"; [/php] Notes: le @ empêche de faire apparaître une erreur si une erreur est rencontré; "127.0.0.1" est à remplacer par l'ip ou le domaine; 80 est à remplacer par le port; $errno et $errstr servent à récupérer l'erreur mais je les mets que pour utiliser le paramètre suivant; 1 est le temps maximum pour que le serveur réponde en seconde (un serveur actuellement prend 0.002sec pour faire un ping à l'opposé du monde en moyen). Vérification de base pour un include Le 27/07/2014 à 15:34, AlexMog a dit : Pour ma part, un petit bout de code (j'ai passé pas mal de temps à trouver des solutions pour éviter les failles includes, et j'ai trouvé mon bonheur en travaillant dur en sécu \o/) donc, pour ceux qui ont peur des failles includes: /* on change les // et les .. par rien \o/ (protection++) */ $file = str_replace(array("..", "//"), "", $_GET['file']); /* Ici, je vérifie que le fichier demandé a bien la même arboressence que l'endroit où je stock mes fichiers*/ if (!file_exists($file) || realpath(dirname($file)) == realpath(".")) { // A noter qu'il faudra changer "." par la racine du des fichiers echo "File error."; exit(); } Afficher le visage d'un skin minecraft à partir du nom de compte et d'une dimension(optionnel) header('Pragma: public'); header('Cache-Control: max-age=86400'); header('Expires: '. gmdate('D, d M Y H:i:s \G\M\T', time() + 86400)); header("Content-type: image/png"); $size = (isset($_GET['size'])&&is_numeric($_GET['size'])&& $_GET['size']<=128&&$_GET['size']>=8) ? $_GET['size'] : 64; $name = (isset($_GET['name'])) ? $_GET['name'] : "char"; $img = imagecreate($size, $size); $src = @imagecreatefrompng("http://minecraft.net/skin/{$name}.png"); if(!$src){ $src = @imagecreatefrompng("http://www.minecraft.net/skin/char.png"); } imagecopyresized($img, $src, 0, 0, 8, 8, $size, $size, 8, 8); imagepng($img); imagedestroy($img); imagedestroy($src); Notes: les paramètres (nom et dimension) sont dans l'url (donc en $_GET) la dimension reste carré est s'exprimer à l'aide d'un entier de 8 à 128, si l'utilisateur s'appel "Mars075" et que que l'on veut d'une taille de 32px sur 32px l'url ressemblera à "head.php?name=Mars075&size=32". Si le nom n'est pas spécifié ou si le compte "officiel" n'a pas de skin correspondant le skin par défaut est affiche, si aucune taille n'est spécifiée la taille par défaut est de 64pixels, le site pour les apparences étant assez lent les images sont mises en cache pendant 24 heures (86400 secondes). Ma fonction pour charger une image $_FILES sans se soucier de tout les imagecreatefrom* function imagecreatefromfile($file) {            $func = "imagecreatefrom".substr($file['name'], strrpos($file['name'], ".")+1);            $func = stri_replace(array("jpg", "jpe"), "jpeg", $func);             return (function_exists($func)) ? $func($file['tmp_name']) : false; } défaut principal: ne fonctionne pas avec imaged2part mais bon suffit de modifier un peu pour ceux qui l'utilise
  • [Cours 1 - Débutant] Les bases du PHP.

    3
    0 Votes
    3 Messages
    5k Vues
    JonSnowJ
    Yop, donc tout d'abord je fais un petit tutoriel sur les bases du PHP. Bien sûr ce tutoriel aura une suite, faisons comme si vous étiez des débutants en PHP et que vous devez suivre des tutoriels, cours par cours. Ce tutoriel sera basé sur les choses que j'ai appris, vous pouvez également suivre une formation ailleurs et apprendre les mêmes fonctions qu'il y a sur ce tutoriel. Le tutoriel reste simple, il faut être un minimum logique et gérer l'HTML. I. La différence entre l'XHTML et le PHP Le PHP peut être utilisé sur l'XHTML donc j'explique cela sous forme d'exemple.   Exemple de code XHTML n'utilisant pas le PHP : <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Melinyel</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="style.css" media="screen" type="text/css" /> </head> <body> Bienvenue sur Melinyel ! </body> </html> Exemple de code XHTML utilisant le PHP : <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Melinyel</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="style.css" media="screen" type="text/css" /> </head> <body> <?php echo 'Bienvenue sur Melinyel !'; ?> </body> </html> Donc comme vous l'avez vu, il y a une légère différence et c'est l'affichage de texte. Pour qu'un texte soit affiché, il faut faire <?php echo 'Votre texte'; ?>   Un autre exemple ? Sur votre code HTML : L'affichage d'un texte.   Version HTML : [Vos lignes de code...] <p>Bienvenue sur Melinyel !</p> [Vos lignes de code...]   Version PHP : [Vos lignes de code...] <?php echo '<p>Bienvenue sur Melinyel !</p>'; ?> [Vos lignes de code...] Donc ici, votre code est inséré entre les deux '. II. Débuter en PHP Un code utilisant le PHP est présenté sur ces deux balises : <?php // Le code PHP ?> Ce sont des balises appelées tags.   Plus bas, on voit que j'ai utilisé "//", c'est quoi ça ? C'est un commentaire. Personnellement, j'utilise les // pour me retrouver dans mon code.   Exemple  : else { // Si l'utilisateur ne demande aucune page     include "templates/public/accueil.inc.php"; // J'inclus la page d'accueil. } Ensuite, exemple plus simple si vous n'avez pas compris : <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Melinyel</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="style.css" media="screen" type="text/css" /> </head> <body> <?php echo 'Bienvenue sur Melinyel !'; ?> // Texte de bienvenue </body> </html> En gros, ceci représente les "<!-- texte -->" qu'on utilise en HTML. III. Les variables Une variable va contenir des données, ces données pourront changer au fil du temps. Imaginons que vous voulez affiché le prénom d'un visiteur. Vous ne pouvez pas l'affiché directement comme ceci : <?php      echo 'prénom';  ?> Mais là vous pouvez l'affiché : <?php       $prenom = 'Baptiste';         echo $prenom; // Affiche "Baptiste"  ?> En gros $prenom s'affichera sur votre site Baptiste.   Autres exemples réunis : <?php       $nom    = 'Mades';       $prenom = 'Baptiste';         echo $nom.$prenom; // Va afficher "MadesBaptiste"       echo $nom.' '.$prenom; // Va afficher "Mades Baptiste"         echo '$nom.$prenom'; // Va afficher "$nom.$prenom"       echo '$nom$prenom'; // Va afficher $nom$prenom         $nom .= $prenom; // est équivalent à $nom = $nom . $prenom         echo $nom; // Affichera "MadesBaptiste"         $nom  = 'Mades';         $nom .= ' '.$prenom;         echo $nom; // Affichera "Mades Baptiste"  ?> Les opérations = Addition = Soustration * = Multiplication / = Division % = Division entière (modulo)   Exemple d'opération (qui n'est pas de moi) : <?php       $entier   = 7;       $flottant = 2.5;       $somme    = 4 + 5; // $somme vaut 9       $multiplic= 2*5;   // $multiplic vaut 10       $division = 9/3;   // $division vaut 3       $modulo   = 10 % 3 // $modulo vaut 1         $multi_variables = $entier * $flottant; //7 * 2.5 = 17.5 donc $multi_variables vaut 17.5 ?> Ajouter des paramètres à sa page ? Pour avoir ceci : http://melinyel.net/index.php?prenom=valeur&style=1 Il faut faire : <?php       $_GET['prenom'] = 'X'; // Le prénom      $_GET['style']  = '1'; // Style qui est ici une chaîne de caractères  ?> $_GET sont appelés des variables superglobales.   Exemple de code XHTML : <form method="post" action="index.php"> <p><input type="text" name="age" /></p> <p><input type="submit" value="Envoyer" /></p> </form> Exemple de code PHP : <?php       if(isset($_POST['age']) AND ctype_digit($_POST['age']) AND $_POST['age'] > 0)       {            echo htmlentities($_POST['age']);       }  ?> IV. Les fonctions include et require. Sinon, les "include" et "require" servent à quoi ? Tu possèdes un site qui à le même menu sur la droite du site en XHTML et que tu es obligés de copier/coller le même code à chaque fois sur d'autres pages. (Exemple : Ton menu de la page index et le même que celui de la page inscription) Et bien, ces fonctions vont te faciliter la tâche. Utilisation de la fonction include Le code ne doit pas être obligatoirement en PHP, inutile de vous cassez la tête. Vous faites le code en HTML mais vous l'enregistrez en .php Exemple, je crée un fichier "haut.php" Contenu : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <title>Melinyel</title> </head> <body> <h1>Bienvenue sur Melinyel !</h1> </body> </html> Ce qu'il y aura sur votre index.php : <?php       include 'haut.php';         echo 'Contenu du site'; // Le contenu du site entier ?> Utilisation de la fonction require Inutile d'expliquer, des exemples seront mieux que des explications. Exemple du code (pas entier) : <?php       include 'verif.php';         /*       * Code qui s’exécutera si l'identification est réussi      */         echo 'Vous êtes membre !';  ?> Ce qu'il y a sur votre "verif.php" <?php       if(!est_membre())       {            exit('Vous devez être membre pour accéder à cette page');       }  ?> Sauf qu'ici j'utilise la fonction include si vous avez bien suivis. J'utilise la fonction est_membre() qui renvoie au TRUE et si le membre n'est pas identifié elle renvoie au FALSE. Or, si le fichier "verif.php" n'existe pas, le site affichera "Vous êtes membre !" mais ce n'est pas ce qu'on veut faire. Donc on utilise la fonction require. <?php       require 'verification.php'; // Coupera l'exécution du code si le fichier n'a pu être inclus par PHP.        /*       * Code qui s’exécutera si l'identification est réussi      */         echo 'Vous êtes membre !';  ?> En gros, require permet à la différence d'include de couper l'exécution du script PHP si le fichier à inclure n'a pu être inclus.   Pour l'instant vous en savez plus sur le PHP. Pour des questions, merci d'en poser sur le tutoriel. Il est interdit de mettre ce tutoriel sur un autre site, il est fait pour Melinyel ; Millenium-Corp et LoremGraphics. Anciennement Mades ; Makaveli sur d'autres forums.
  • Moteur de recherche de base

    5
    0 Votes
    5 Messages
    5k Vues
    mars073M
    Bonjour à tous, Aujourd’hui je vais vous montrer comment coder un moteur de recherche de base, vous pouvez donc aussi bien améliorer la structure de vos tables que la condition de recherche elle même. Contexte: Le moteur de recherche sert à trouver un joueur et afficher ses statistiques. Structure table: CREATE TABLE `players` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `guild` text NOT NULL, `token` int(11) NOT NULL, PRIMARY KEY (`id`) ) AUTO_INCREMENT=1 ; Le formulaire de recherche (search.php): <form action="./search.php" method="GET"> <label for="name">Nom du joueur</label> <input type="text" name="name"> <input type="submit" value="Rechercher"> </form> Je ne m'attarde pas sur le html vu que c'est un tuto php/my-sql. à la suite du code html vous allons ajouter du php: <table width="100%"> <tr> <th>#</th> <th>Nom</th> <th>Points</th> </tr> <?php $page = 0; if (isset($_GET['name']) { $page = 1; // Page par défaut affichée $np_page = 25; // Nom de résultat par page $name = addslashes($_GET['name']); // suppression faille sql $icxn = mysqli_connect("127.0.0.1", "root", "toor", "game"); //connexion mySQLi // vérification du numéro de la page si elle est indiqué dans l'url en "?page=n" if (isset($_GET['page'])&&is_numeric($_GET['page'])&& $_GET['page']>0&&$_GET['page']<9999999) $page = $_GET['page']; $fourchette = ($page - 1) * $np_page; $iquery = mysqli_query($icxn, "SELECT * FROM `players` WHERE `name` LIKE '%$name%' ORDER BY `name` ASC LIMIT $fourchette, $np_page"); while ($char = mysqli_fetch_array($iquery)) { echo <<<LINE <tr> <td>{$char['id']}</td> <td><b>{$char['name']}</b></td> <td>{$char['token']}</td> </tr> LINE; } } ?> </table> <?php if ($page!=0) { echo "page(s): "; $iquery_count = mysqli_query($icxn, "SELECT * FROM `players` WHERE `name` LIKE '%$name%'"); $count = mysqli_nums_rows($iquery_count); for ($i = 1; $i < $count/$np_page; $i++) { echo '<a href="./search.php?page='.$i.'">'.$i.'</a>&nbsp;'; } } ?> Conseil pour améliorer: -Si la table est beaucoup avec votre moteur faite une colonne de plus où il y a une simplification des caractères (ex: "é" => "e"; "â" => "a"; etc). -Attention aux caractères html utilisiez la fonction strip_tag() ou autre sur ce qui causer des faille xss par exemple si le client peu choisir le nom de son personnage et mettre du code html dedans c'est mort. -Supprimez les caractères "%" et "_" si ils sont présent dans $name et instauré une limite au niveau du nombre de caractères pour la recherche exemple: minimum 4 caractères, pour évites de charger trop de chose. Version pdo pour les gens qui aiment la pdo: <table width="100%"> <tr> <th>#</th> <th>Nom</th> <th>Points</th> </tr> <?php $page = 0; if (isset($_GET['name']) { $page = 1; // Page par défaut affichée $np_page = 25; // Nom de résultat par page $name = $_GET['name']; $cxn = new PDO('mysql:host=127.0.0.1;dbname=game', 'root', 'toor'); //connexion mySQL // vérification du numéro de la page si elle est indiqué dans l'url en "?page=n" if (isset($_GET['page'])&&is_numeric($_GET['page'])&& $_GET['page']>0&&$_GET['page']<9999999) $page = $_GET['page']; $fourchette = ($page - 1) * $np_page; $query = $cxn->prepare("SELECT * FROM players` WHERE `name` LIKE '%:name%' ORDER BY `name` ASC LIMIT :fourchette, :npp"); $query->bindValue(':name', $name, PDO::PARAM_STR); $query->bindValue(':fourchette', $fourchette, PDO::PARAM_INT); $query->bindValue(':npp', $np_page, PDO::PARAM_INT); $query->execute(); while ($char = $query->fetch()) { echo <<<LINE <tr> <td>{$char['id']}</td> <td><b>{$char['name']}</b></td> <td>{$char['token']}</td> </tr> LINE; } } ?> </table> <?php if ($page!=0) { echo "page(s): "; $query_count = $cxn->prepare("SELECT * FROM `players` WHERE `name` LIKE '%:name%'"); $query_count->bindValue(':name', $name, PDO::PARAM_STR); $query_count->execute(); $count = $query_count->rowCount(); for ($i = 1; $i < $count/$np_page; $i++) { echo '<a href="./search.php?page='.$i.'">'.$i.'</a>&nbsp;'; } } ?> Bonne programmation à tous! Cordialement, Mars073
  • Failles de sécurité les plus fréquentes en relation directe/indirecte php

    3
    0 Votes
    3 Messages
    6k Vues
    mars073M
    Bonjour à tous, Aujourd'hui je fais essayer de faire un truc plus sérieux, les failles les plus courantes (sql, xss, csrf et exploit cookie). Les failles SQL, c'est le fait que le client peut modifier une requête sql sur vote site, ses failles peuvent permettent de modifier, afficher, supprimer toutes les tables voir la base de donnée. Contexte: J'affiche mes news avec une variable ?page dans l'url <?php $query = mysql_query("SELECT * FROM `news` LIMIT ".$_GET['page'].",10"); ?> normalement l'url va ressemble à: http://mars073.be/faille.php?page=2 . mais si quelqu'un écrit : http://mars073.be/faille.php?page=2;TRUNCATE%20news# bah... vous perdez toutes vos news, la requête sera double: SELECT * FROM `news` LIMIT 2; TRUNCATE `news`; #,10 il existe des programmes pour exploiter plus facilement les failles ils permettent aussi de lister les autres tables ._. solution: 1 - vérifier que la variable est un chiffre (numérique); <?php $page = 0; if (isset($_GET['page'])&&is_numeric($_GET['page'])) $page = $_GET['page']; $query = mysql_query("SELECT * FROM `news` LIMIT $page,10"); ?> étrangement cette erreur est très fréquente encore... mais bon parfois y a un pare-feu derrière et c'est pas marrant 2-dans le cadre où il s'agit d'un texte faites appel à la fonction: addslashes(). Exemple: $titre = addslashes($_GET['titre']); 3-Simplement coder en pdo mais ça peut-être dérangeant quand vous n'avez pas codé le site et que vous devez donc tout refaire... Les failles xss, aussi très courantes c'est une faille qui permet au client d'afficher du code html ou javascript, ce qui permet de faire des forkbomb, redirections, voler les logins, etc. Contexte: je débute et j'ai fais une chatbox avec une faille xss: <?php $query = $cxn->query("SELECT * FROM `chat`"); $query->execute(); while ($msg = $query->fetch()) { echo $msg['user']." a dit:".$msg['content']; } ?> maintenant Jean-Kevin envoie le message suivant: <meta http-equiv="refresh" content="0;url=http://JeanKevdu06.free.fr/"> ce qui aura pour effet de rediriger une fois la page charger sur un autre site. pour pallier à ce problème il suffit de faire appel à une fonction: htmlspecialchars(), il existe d'autre fonction avec plus où moins le même effet, c'est à dire convertir le code en caractère lisible. exemple avec le code au dessus: <?php $query = $cxn->query("SELECT * FROM `chat`"); $query->execute(); while ($msg = $query->fetch()) { $msg['content'] = htmlspecialchars($msg['content']); // Dans le contexte le nom d'utilisateur ne peut pas comporter de caractères spéciaux. echo $msg['user']." a dit:".$msg['content']; } ?> je considère les failles "include" comme des failles xss mais si c'est pas totalement vrai, je suppose que vous connaissez tous la fonction include(), vu que c'est la base du php... Bref beaucoup de site utile utilise une variable $_GET (ex: $_GET['p']) et donc il font un code du genre: <?php if (isset($_GET['p'])&&is_file($_GET['p'])) include("pages/".$_GET['p'].".php"); ?> mais bon une fois de plus si le méchant utilisateur change l'url: en ?p=../includes/config bah... ça inclue le fichier config ._. il y a beaucoup de façon différente pour résoudre cette faille mais dans le contexte ej vais utiliser le switch() <?php if (isset($_GET['p'])) { //on test si la page est spécifiée switch (strtolower($_GET['p'])) { // test la valeur de la variable en minuscule pour avoir plus facile case 'home': include("pages/home.php"); //l'acccueil break; case 'contact': include("pages/contact.php"); break; case 'machin': include("pages/machin.php"); // machin break; default: include("pages/404.php"); //page d'erreur } } else { include("pages/home.php"); //si aucune page spécifiée on met l'accueil } ?> Les failles csrf, déjà plus rare, ça consiste dans le faire exécuter par le biais d'une image comme une signature sur un forum, je vais prendre pour exemple un forum. Contexte: Je fais une signature qui va vous déconnecter automatiquement quand vous l'afficherait: je mets le lien pour se déconnecter comme le lien d'une image. [img=http://forum.mars073.be/deconnect.php] Dans ce cas ci il faut utiliser un token, c'est une variable qui va contenir une suite aléatoire. Exemple dans votre script de connexion vous allez surement utiliser des variables $_SESSION, donc il suffit d'ajouter dans votre script de connexion: <?php // ... $_SESSION['token'] = dechex(rand(0, 999999))."-".dechex(rand(0, 999999)); ?> votre bouton déconnexion: <a href="deconnect.php?t=<?=$_SESSION['token']?>">Déconnexion</a> et le script deconnect.php: <?php session_start(); if (isset($_GET['t'])&&$_GET['t']==$_SESSION['token']) { session_unset(); session_destroy(); echo "Vous avez bien été déconnecté"; } else { echo "La requête est incorrect"; } ?> Le forum Melinyel a un système similaire mais en plus n'autorise que certaines extensions mais le systèmes d'extension ne sert à rien vu qu'il peut être trompé avec le ".htaccess". Nous arrivons donc au dernier type de faille les voles de cookies, miam miam... Contexte: mon script php camouflé en "cookie.png" doit voler le cookie du nom de "autolog" qui permet que le compte se connecter automatiquement. /!\Rappel: le cookie est stocké du coté client il y a un risque de modification, donc cryptait le un maximum pour pas qu'il puisse détourner sa connexion sur un autre compte, comme pour les variables caché html ou js. donc nous allons créer votre cookie avec une protection correcte: $crypt = $user['id']."|".md5(sha1($user['name']).$user['haspass']); setcookie( "autolog", $crypt, time()+60*60*24*31, "./marsLogin", "mars073.be", false, true); donc $crypt dans mon exemple est composé de l'id de l'utilisateur et le cumule crypté du nom d’utilisateur crypté et de son mot de passe crypté, même crypté normalement on ne met pas le mot de passe dans le cookie je dis bien normalement. paramètres de mon cookie: 1 - Son nom: "autolog" 2 - sa valeur: $crypt 3 - sa date d'expiration en seconde: 31jours après création 4 - dossier ou je vais le ranger 5 - le seul site (domaine) qui a le droit d'y accéder: "mars073.be" 6 - si le cookie ne peut être utilisé que par des site en https:// : non (si votre site à le https:// mettez "true" si vous voulez) 7 - Interdit la modification du cookie par du javascript par exemple (ne fonctionne pas tout le temps). mais comment faire maintenant pour vérifier l'utilisateur? Comme ça: <?php if (isset($_COOKIE['autolog'])) { $data = explode("|", $_COOKIE['autolog']; // On sépare l'id du reste if (isset($data[1])&&is_numeric($data[0])) { // On vérifie la structure du cookie $query = $db->query("SELECT * FROM `user` WHERE `id` = ".$data[0]." LIMIT 1"); $query->execute(); $user = $query->fetch(); if ($data[1] == md5(sha1($user['name']).$user['haspass'])) { $_SESSION['login'] = $user; echo "Connexion réussite"; } else { echo "cookie incorrect"; } } else { echo "Cookie corrumpue"; } } ?> Je pense avoir fait le tour des trucs les plus courant en php... ps: exemple d'image en php qui passe à travers le filtre du forum avec un simple dossier, quand vous actualisez elle change: [image: mel.png] Bonne programmation à tous! Cordialement, Mars073
  • Captcha (anti-robot)

    4
    0 Votes
    4 Messages
    3k Vues
    mars073M
    Bonjour à tous, J'ai fais un topic sur la création d'image et la sécu, et j'ai eu aucun commentaire :E mais bon là je vais faire un mélange des 2 je vais vous expliquer comment faire une captcha de base. Pour ceux qui ne qui n'ont jamais entendu parler des captcha, et non chapka (le chapeau russe), c'est le plus nouveau une suite de chiffre ou/et de lettre qu'il faut recopier lorsque l'on inscrit ou que l'on fait appel à un service sur un site. Contexte: On doit généré un code qui fait entre 3 et 5 caractères alphanumérique en majuscule sauf 0 (car c'est lourd mélanger le O et le 0). <?php $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire for ($i = 0; $i < $code_len; $i++) { $code .= $chars[rand(0, strlen($chars)-1)]; // ajout d'un caractère au hasard } echo $code; ?> maintenant on génère un image avec: <?php header('Expires: Mon, 1 Jan 2000 01:00:00 GMT'); // date à la quelle l'image doit d'être supprimée (il y a +14 ans xD) header('Cache-Control: no-store, no-cache, must-revalidate'); // on dit que ça doit pas mettre sauvegardé dans le cache header('Cache-Control: post-check=0, pre-check=0', false); // même chose header("Content-type: image/png"); // type d'image png, vous pouvez aussi mettre en jpeg et diminuer la qualité pour avoir un truc pour perturber les robots... $img = imagecreatetruecolor(120, 30); // génération d'une image de 120px de large et 30px de haut imagefill($img, 0, 0, 0xFFFFFF); // la couleur de fond est blanc dans ce cas-ci $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire for ($i = 0; $i < $code_len; $i++) { $code .= $chars[rand(0, strlen($chars)-1)]; // ajout d'un caractère au hasard } imagestring($img, 5, 20, 10, $code, 0x000000); imagepng($img); imagedestroy($img); ?> rendu: [image: captcha.old.png] fonction non-vu dans mon autre topic: imagecratetruecolor() crée une image avec toute les couleurs (+16 million). imagefill() ça vous permet de remplir votre image d'une certaine couleur. imagestring() écrire un simple texte sur l'image. 0x000000 est l'équivalent du code couleur hexadécimal #000000 le système souvent utilisé en html, css, lua, etc. Normalement on utilise une variable (car les couleurs ne sont pas correctes de mémoire) le code pour le remplissage aurait donc due être: <?php $blanc = imagecolorallocate($img, 255, 255, 255); imagefill($img, 0, 0, $blanc); // la couleur de fond est blanc dans ce cas-ci ?> la fonction imagecolorallocate() permet de déclarer une couleur en peu comme en css avec par exemple: "rgb( 255, 255, 255);". une image php peut se mettre au même titre que n'importe quelle image dans un code html: <!-- Contexte: L'image php s'appel "captcha.php" et se trouve dans le même dossier que le code html --> <img src="captcha.php" border="0"> <input type="text" name="antirobot" placeholder="Recopier le code..."> Mais comment on fait pour connaître code après? simplement avec une variable $_SESSION et au passage on va ajouter entre 2 et 6 lignes en arrière-plan. <?php session_start(); header('Expires: Mon, 1 Jan 2000 01:00:00 GMT'); // date à la quelle l'image doit d'être supprimée (il y a +14 ans xD) header('Cache-Control: no-store, no-cache, must-revalidate'); // on dit que ça doit pas mettre sauvegardé dans le cache header('Cache-Control: post-check=0, pre-check=0', false); // même chose header("Content-type: image/png"); // type d'image png, vous pouvez aussi mettre en jpeg et diminuer la qualité pour avoir un truc pour perturber les robots... $img = imagecreatetruecolor(120, 30); // génération d'une image de 120px de large et 30px de haut imagefill($img, 0, 0, 0xFFFFFF); // la couleur de fond et blanc dans ce cas-ci $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire $line_n = rand(2, 6); // nombre de ligne aléatoire entre 2 et 6 for ($i=0; $i < $line_n; $i++) { // position du point de départ et de fin de la ligne au hasard imageline($img, rand(1, imagesx($img)), rand(1, imagesy($img)), rand(1, imagesx($img)), rand(1, imagesy($img)), 0x000000); } for ($i = 0; $i < $code_len; $i++) { $code .= $chars[rand(0, strlen($chars)-1)]; // ajout d'un caractère au hasard } $_SESSION['code'] = $code; imagestring($img, 5, 20, 10, $code, 0x000000); imagepng($img); imagedestroy($img) ?> fonctions: imageline() tracer une ligne sur une image avec un point de départ et un point de fin. imagesx() retourne la largeur de l'image. imagesy() retourne la hauteur de l'image. Protégé contre les robots? haha t'es marrant, je te tuerais en dernier. En faite il est extrêmement compliqué... enfin les vrai robot pas les trucs en mousse codé en javascript ou en vb. maintenant on va faire en sorte que les lettres soient positionnées un peu aléatoirement: <?php session_start(); header('Expires: Mon, 1 Jan 2000 01:00:00 GMT'); // date à la quelle l'image doit d'être supprimée (il y a +14 ans xD) header('Cache-Control: no-store, no-cache, must-revalidate'); // on dit que ça doit pas mettre sauvegardé dans le cache header('Cache-Control: post-check=0, pre-check=0', false); // même chose header("Content-type: image/png"); // type d'image png, vous pouvez aussi mettre en jpeg et diminuer la qualité pour avoir un truc pour perturber les robots... $img = imagecreatetruecolor(120, 30); // génération d'une image de 120px de large et 30px de haut imagefill($img, 0, 0, 0xFFFFFF); // la couleur de fond et blanc dans ce cas-ci $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire $line_n = rand(2, 6); // nombre de ligne aléatoire entre 2 et 6 for ($i=0; $i < $line_n; $i++) { // position du point de départ et de fin de la ligne au hasard imageline($img, rand(1, imagesx($img)), rand(1, imagesy($img)), rand(1, imagesx($img)), rand(1, imagesy($img)), 0x000000); } for ($i = 0; $i < $code_len; $i++) { $char = $chars[rand(0, strlen($chars)-1)]; // un caractère au hasard $code .= $char; // ajout du catactère imagestring($img, 5, 20+($i*12)+rand(-2, 2), 10+rand(-10, 5), $char, 0x000000); } $_SESSION['code'] = $code; imagepng($img); imagedestroy($img) ?> maintenant on va mettre des couleurs et flouter l'image avec une matrix: <?php session_start(); header('Expires: Mon, 1 Jan 2000 01:00:00 GMT'); // date à la quelle l'image doit d'être supprimée (il y a +14 ans xD) header('Cache-Control: no-store, no-cache, must-revalidate'); // on dit que ça doit pas mettre sauvegardé dans le cache header('Cache-Control: post-check=0, pre-check=0', false); // même chose header("Content-type: image/png"); // type d'image png, vous pouvez aussi mettre en jpeg et diminuer la qualité pour avoir un truc pour perturber les robots... $img = imagecreatetruecolor(120, 30); // génération d'une image de 120px de large et 30px de haut imagefill($img, 0, 0, 0xA3A3A3); // la couleur de fond et blanc dans ce cas-ci $chars = "123456789AZERTYUIOPQSDFGHJKLMWXCVBN"; // La liste des caractères possible $code = ""; $code_len = rand(3, 5); // longueur de code aléatoire $line_n = rand(2, 6); // nombre de ligne aléatoire entre 2 et 6 for ($i=0; $i < $line_n; $i++) { // position du point de départ et de fin de la ligne au hasard imageline($img, rand(1, imagesx($img)), rand(1, imagesy($img)), rand(1, imagesx($img)), rand(1, imagesy($img)), "0x".dechex(rand(20, 200)).dechex(rand(20, 200)).dechex(rand(20, 200))); } for ($i = 0; $i < $code_len; $i++) { $char = $chars[rand(0, strlen($chars)-1)]; // un caractère au hasard $code .= $char; // ajout du catactère imagestring($img, 5, 20+($i*12)+rand(-2, 2), 10+rand(-10, 5), $char, "0x".dechex(rand(180, 255)).dechex(rand(180, 255)).dechex(rand(180, 255))); } $_SESSION['code'] = $code; $flou = array( array(1.0, 2.0, 1.0), array(2.0, 4.0, 2.0), array(1.0, 2.0, 1.0) ); imageconvolution($img, $flou, 16, 0); imagepng($img); imagedestroy($img) ?> ps: la fonction dechex() permet de transformer un chiffre décimal en hexadécimale pour le code couleur. et donc le test de la captcha en requête POST (par exemple) donnerait: <?php session_start(); if (isset($_POST['antirobot'])) { if ($_POST['antirobot']==$_SESSION['code']) { echo "Le code est valide"; } else { echo "Le code est incorrect"; } } ?> Rendu final: [image: captcha.png] moche et compliqué à lire, c'est ça le principe? non à vous de modifier Bonne programmation à tous! Cordialement, Mars073
  • Gestion d'image

    2
    0 Votes
    2 Messages
    4k Vues
    mars073M
    Bonjour all, Je vais vous expliquer comment générer une image en php. je vais partir directement sur un exemple assez complexe vous allons nous baser sur l'image suivante (j'avais bien commencé mais bon j'avais la flemme donc j'ai fais un arbre vite fait avec un quadrillage dégeu au dessus trop chiant dessiner à la souris rip mon stylet ![island_air-44f87bd.png](<base_url>/applications/sslimageproxy/interface/image.php?url=http://img102.xooimage.com/files/1/6/a/island_air-44f87bd.png) et un petit personnage très mystérieux ![char-44f8849.png](<base_url>/applications/sslimageproxy/interface/image.php?url=http://img107.xooimage.com/files/1/b/a/char-44f8849.png) et donc dans cet exemple nous allons positionner un personnage sur le quadrillage le coté le plus à gauche est le point d'origine (0, 0). contexte: vous avez votre bonhomme à déplacer sur le quadrillage grace à une variable $x et $y que l'on dans l'url ($_GET) et vous devez conserver la transparence des 2 images. <?php $x = $y = 0; // on initialise la variable $x et $y à zéro // on test l'existant de ?x et ?y dans l'url et si ils sont compris entre 0 et 6 if (isset($_GET['x'])&&is_numeric($_GET['x'])&& $_GET['x']>=0&&$_GET['x']<=6) $x = $_GET['x']; if (isset($_GET['y'])&&is_numeric($_GET['y'])&& $_GET['y']>=0&&$_GET['y']<=6) $y = $_GET['y']; // on spécifie le type MIME, c'est à dire que le script php va se faire passer pour un autre type de fichier si vous ne mettez pas ça en accédant à la page vous aurez exactement le même résultat que lorsque voys ouvrez l'image avec bloc note header('Content-Type: image/png'); $map = imagecreatefrompng("island_air.png"); // on charge l'île volante $char = imagecreatefrompng("char.png"); // on charge le bonhomme mystèrieux // on copie l'image du petit bonhomme et on la colle sur le terrain avec la position relative imagecopy($map, $char, (210 + ($x * 12) + ($y * 13)), 140 + ($y * 14) - ($x * 10), 0, 0, 23, 43); // on conserve le canal alpha, c'est à dire la transparence imagealphablending($map, false); imagesavealpha($map, true); // on fait le rendu de l'image dans le format MIME imagepng($map); // on supprime les calques que l'on a fait (pour vider la mémoire) imagedestroy($map); imagedestroy($char); ?> donc en récapitulatif vous devez: -choisir le type MIME (format de rendu) [liste utile] -créer à calque à partir d'une image même si elle est distante (ex: imagecreatefromjpeg("http://picture.com/A0001.jpg")) ou vous pouvez créer un calque vide aux dimensions désirées (exemple: imagecreate(600, 400), pour créer une image de 600px de large et 400px de haut). -faire un rendu dans le format que vous aviez choisis (ex: imagejpeg($image)) si vous désirez enregistrer votre rendu vous pouvez le faire directement par exemple en rendu jpg ou jpeg vous ajoutez simplement un paramètre avec le nom de destination exemple: <?php imagejpeg($image, "rendu.jpg"); // vous pouvez aussi choisir la qualité en ajoutant un troisième paramètre de 0 à 100 ou de 0 à 75 selon le format imagejpeg($image, "rendu.jpg", 45); // vous pouvez aussi choisir le rendu sans enregistrer en remplacant la destination par NULL: imagejpeg($image, NULL, 45); ?> > documentation php si vous avez eu du mal à comprendre la syntaxe de image copie de vous invite à Cliquer ici. Si vous desiez vous pouvez rendre moins mystérieux le bonhomme on lui mettant un nom au dessus de sa tête avec la fonction imagestring(); ça vous fera un petit exercice Bonne programmation à tous! Cordialement, Mars073
  • le test (no-stress c'est pas pour vous)

    7
    0 Votes
    7 Messages
    3k Vues
    mars073M
    Shalut all, Je vais vous expliquer comment faire des tests et c'est super simple Il y a juste plein de façon de le faire! xD Pour faire un test simple, on fait comme ceci: If ([valeur à tester] [symbôle du test (voir le bas)] [La valeur à la quelle elle est comparée]) { [Le code à exécuter si le test se révèle positif]; } exemple: If ($check == true) { include("W\tourbilol.php"); } // ou If ($check == true): include("W\tourbilol.php"); endif; // ou If ($check == true) { include("W\tourbilol.php"); } // ou If ($check == true) {include("W\tourbilol.php");} // ou If ($check == true) include("W\tourbilol.php"); // Ces systaxes ont exactement le même effet // version courte souvent utilisée dans la syntaxe: <?=([condition]) ? 'oui' : 'non'?> : include ($check == true) ? "W\tourbilol.php" : "W\tourbilol_v2.php"; Imaginons que nous programmons un jeu et que vous voulons tester la position_X soit 3 et que le position_Y soit 5 on va faire comme cela: If (($position_X=3) AND ($position_Y=5)) { [Le code à exécuter si le test se révèle positif]; } // ou If (($position_X=3) && ($position_Y=5)) { [Le code à exécuter si le test se révèle positif]; } Il suffit juste de mettre les 2valeurs entre parenthèse et de mettre un "And"(et) ou "&&" entre les deux.^^ Toujours facile.. alors on va compliquer les choses x) Imaginons toujours notre petit jeux, cette fois je veux que la position_X soit 3 ou 5 et que que la position_Y soit 5 toujours simple mais bon : If ((($position_X=3) OR ($position_X=5)) AND ($position_Y=5)) { [Le code à exécuter si le test se révèle positif]; } // ou If ((($position_X=3) || ($position_X=5)) && ($position_Y=5)) { [Le code à exécuter si le test se révèle positif]; } on ajoute encore des parenthèses et on met un "Or"(ou) ou "||" même principe que le "And" On monte encore un peu dans la difficulté Cette fois la position_X doit être compris entre 3 et 5 et la position_Y doit doit être 5. è_é If ((($position_X>3) AND ($position_X<5)) && ($position_Y==5)) { [Le code à exécuter si le test se révèle positif]; } Cette fois le test demande si le nombre est supérieur et si il est inférieur ^^ Maintenant on va demander que si number est 1 il envoie un message "c'est 1!"; si c'est 2 un message "c'est deux" et si ce n'est pas un des deux, le programme envoie un message "chiffre inconnu", et pour cela on va mettre un "ElseIf": If (number==1) { echo "c'est 1!"; } ElseIf (number==2) { echo "c'est 2!"; } Else { echo "chiffre inconnu"; } Il existe aussi la méthode du "Case Of" ou plus communément appellé "Switch()" en PHP: Switch (number) { Case 1: echo "c'est 1!"; break; // Important! Il faut mettre un "break;" à la fin du code à exécuter si la condition est remplie. Case 2: echo "c'est deux!"; break; Case 3: Case 4: echo "c'est trois ou quatre!"; Break; Default: // Équivalent d'un "Else" echo "chiffre inconnu"; } Les symboles de test === : est égale exactement... (le plus souvent utilisé lors d'un test avec une fonction par exemple qui retourne une valeur booléen [ true ou false]) !== : n'est pas du tout commun avec ... == : égale à ... > : supérieur à ... < : inférieur à ... >= : supérieur ou égale à... <= : inférieur ou égale à... != : n'est pas égale à... Fonction utile: empty et isset: Empty sert à tester si une valeur est vide Isset sert à tester si la variable existe (n'est pas égale à null) // On test si la variable $text est vide: if (empty($text)) {echo "Le texte est vide";} // On test si la variable id contenu dans l'url existe (ex: http://0.0.0.0/view.php?id=1234&AutreVar=0) if (isset($_GET['id'])) {echo "Article N°", $_GET['id'];} // ou aussi : if ($_GET['id']) {echo "Article N°", $_GET['id'];} test en une ligne, afficher "online" si $test = 1 et "offline" dans le cas contraire: echo ($test==1) ? "online" : "offline"; Bonne programmation à tous! Cordialement, Mars073
  • [Mooc] Concevoir des sites web avec le PHP

    2
    0 Votes
    2 Messages
    2k Vues
    E
    Bonjour, Si ça peut en intéresser quelques uns, voici un Mooc pour apprendre à concevoir son site web dynamique en PHP. Voici le lien : http://fr.openclassrooms.com/mooc/concevez-votre-site-web-avec-php-et-mysql?utm_source=Homepage-OC&utm_medium=Encart A la Une&utm_campaign=Encart-mooc-php Si ça peut vous donner envie... Voilà