-
Compteur de contenus
566 -
Inscription
-
Dernière visite
-
Days Won
27
Tout ce qui a été posté par mars073
-
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%20`news`# 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: Bonne programmation à tous! Cordialement, Mars073
-
en Belgique mon niveau c'est 4éme secondaire générale section informatique (c'est les même grilles que sciences fortes mais avec 7heures d'info en plus et 1 heure de moins de gym)... doublé 2 fois (1ére sec et 4éme)... mais je sais pas c'est quoi l'équivalence française. Système Belge: -3 années maternelle -6 années primaire -6 années secondaire voir 7 années dans les études profesionnel -Haute école ou Université de 2 à 7 ans PS: merci à tout ceux qui m'ont souhaités et me souhaiteront la bienvenu
- 16 réponses
-
- présentation
- graphisme
-
(et %d en plus)
Étiqueté avec :
-
Je suis leur ancien webmaster mais vu que j'ai arrêté wow je me suis éloigner du staff peu à peu je sais même pas si je suis toujours dedans x')
- 16 réponses
-
- présentation
- graphisme
-
(et %d en plus)
Étiqueté avec :
-
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 et un petit personnage très mystérieux 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
-
l'autre droite c'est ça?
-
voted
-
imaginez la facture d'électricité
-
l'usb c'est lent, très lent même en 3.0 du moins comparé à du ssd ._.
-
Niveau jeu: -2d: Ghost Dream's: http://ghostd.hostoi.com/ -3d: Chicken Burne: http://mars073.zz.mu/demo/1.1.zip Niveau site: -mon préféré même si j'ai jamais finis la boutique pour ça qu'il est pas dispo...: (demo: http://ext-eternity.pusku.com/demo/connected/ ) -http://tags-beta.site90.com/ (générateur de couverture fb, même plu le bon format^^' -autres créations: http://www.mars073.zz.mu/y/ (certains j'ai juste fais coté code) Niveau application: -Launcher wow plein de fonctions que je devrais penser à mettre à jour... Infographie: -3d: je savais pas quoi choisir j'ai retrouvé mon pantin et vu qu'il est sexy: remake de stuff de wow irl (a): -2d: ouais c'est du crayon mais graphie quand même Calligraphie: -gothique: sur cd c'est classe: -latine:noraj -fussing: pas d'exemple de couture/tricot sur mon pc :x
- 16 réponses
-
- présentation
- graphisme
-
(et %d en plus)
Étiqueté avec :
-
$bitch=0 while (1==1) { $bitch++; echo "+$bitch"; }
-
ah oui merci
- 16 réponses
-
- présentation
- graphisme
-
(et %d en plus)
Étiqueté avec :
-
oui, je l'ai gratté direct sur le forum donc je suis même pas sûr qu'il fonctionne complètement x') je m'étais mis la tabulation en c/c pour alligner le code c'était galère xD
- 4 réponses
-
Bonjour à tous, Je vais donc me présenter... J'ai 18 ans, je suis Belge (montois), je programme depuis que j'ai ~12ans, j'ai arrêter de programmer pendant 2ans pendant les quelles j'étais devenu un no-life addict de world of warcraft qui reste pour moi LE meilleur jeu du monde^-^ Actuellement je me suis remis à programmer, je code en html, css, js(+jquery&ajax), php, c(quand je suis vraiment motivé), delphi, pascal, vb.net et tout ce qui est sous-langage comme sur des cartes arduino, le sql et le bash(win/unix). Je code principalement des sites et des jeux 3d. Je fais aussi de l'infographisme 2d/3d, de la calligraphie (latine et gothique), du fussing (travailler le verre), du tricot (mais du tricot High-Tech ), de la couture et de la cuisine ._. Je passe le 3/4 de mon temps libre à travailler gratuitement pour des gens que je connais pas ou dormir au lieu d'étudier ce qui se voit dans mes notes *tousse*. que dire de plus... j'ai connu ce forum par un autre forum euh... mon pseudo que j'utilise depuis si longtemps vient d'un générateur de pseudo car "Mars" était déjà utilisé x') j'aime le jus de cranberrys et les pommes
- 16 réponses
-
- présentation
- graphisme
-
(et %d en plus)
Étiqueté avec :
-
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> '; } } ?> 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> '; } } ?> Bonne programmation à tous! Cordialement, Mars073
- 4 réponses
-
- 3
-
-
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 <3 à 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
-
j'aurais pas pu faire le jeu de mot dans ce cas u_u
-
j'ai ajouté les liens
-
toujours un plaisir de partager mon savoir surtout quand y a au moins quelques personnes que ça intéresse x')
- 4 réponses
-
- JQuery
- Javascript
-
(et %d en plus)
Étiqueté avec :
-
Salut all, j'avais fais un beau tuto bien long et bien expliqué mais je me suis fail et tout a disparu en enfer... D: Donc je fais une version abrégée, le mySQL est différent des autres oui, par exemple cette saloperie de SQLite ne prend pas le caractère " ` " pour isoler les variables même si il n'est pas obligatoire de plus certaines fonctions ne sont pas disponible. bref mySQL c'est bien et gratuit. ^-^ je vais pas refaire tout un truc sur la structure... il était tellement bien mon autre tuto disparu :'( la structure de la commande se compose d'une action, une cible, de valeur(s)(optionnel), de condition(s)(optionnel), d'un ordre(optionnel) et une limite(optionnel). exemple pour un ajout on utilise: une action, une cible et des valeurs:: #syntaxe: INSERT INTO [CIBLE] ([VARIABLE(S)]) VALUES([VALEURS]); INSERT INTO `ma_table` (`texte`, `chiffre`) VALUES('Coucou', 123); Donc:- la "cible" c'est la table que vous voulez affecter vous pouvez la sélectionner aussi à travers une db (ex: `db_forum`.`ma_table`). - les variables sont les noms des colonnes dans votre table. - les valeurs sont les valeurs (._.) que vous donnez aux variables. > Documentation Mysql::INSERT si la valeur est un chiffre vous n'êtes pas obligé de mettre de guillemets mais si vous désirez mettre un guillemet dans une phrase vous devait mettre un anti-slash devant (ex: 'C\'est bon le chocolat!'). il existe une syntaxe où vous n'êtes pas obligé de donner le nom des variables mais alors vous devez donner les valeurs pour toutes les variables dans l'ordre. #dans le contexte il y a une variable guid qui sert d'index et l'ordre est: guid, texte, chiffre INSERT INTO `ma_table` VALUES(NULL, 'Coucou', 123); "NULL" retourne la valeur par défaut (ou une case vide) si la variable est un index avec une AI (auto-incrémentation) la valeur sera égale à l’incrémentation actuel de l'index de l'IA ._. EDIT: je viens de me relire après ~8mois et je viens de voir que je n'ai pas indiqué comment ajouter plusieurs lignes en une commande, c'est simple il suffit de mettre une virgule entre les paquets de valeurs (les parenthèses). Ce qui donne: #syntaxe: INSERT INTO [CIBLE] ([VARIABLE(S)]) VALUES([VALEURS]); INSERT INTO `ma_table` (`texte`, `chiffre`) VALUES('Coucou', 123), ('tu veux?', 456); vous pouvez en mettre plus mais je ne connais pas la limite maintenant pour modifier des variables: action, cible, variables, nouvelles valeurs, limite (non obligatoire mais c'est une petite sécurité):: #syntaxe: UPDATE [CIBLE] SET [VARIABLES] = [VALEURS] WHERE [CONDITION] LIMIT 1 #dans le contexte notre commande précédente, a affecté la valeur 58 à `guid` UPDATE `ma_table` SET `texte` = 'Au revoir', `chiffre` = (`chiffre` + 250) WHERE `guid`= 58 LIMIT 1; quand vous avez plusieurs variables à mettre à jour vous n'avez cas les séparer par une virgule et vous pouvez aussi réutiliser les variables dans votre ligne comme par exemple pour augmenter la valeur d'un chiffre de 250. Vous pouvez appliquez une modification à toutes lignes en supprimant "WHERE [CONDITION]" et la limite.> Documentation Mysql::UPDATE pour bien illustrer le "WHERE" dans mon exemple précédent je vais vous expliquer le "SELECT" (la sélection, impressionnant non?), la syntace: SELECT [COLONNE] FROM [CIBLE] WHERE [CONDITION] ORDER BY [ORDRE] LIMIT [LIMIT]; -[COLONNE] : Les informations que vous souhaites récupérer, j'aurais pu aussi mettre [VARIABLES]comme au dessus mais bon ça reste une légende.-[CIBLE] : La table dans la quelle vous désirez faire votre recherche. -[CONDITION] : La condition pour que la donnée soit sélectionnée. -[ORDRE] : Ordre croissant (ASC) ou décroissant (DESC). -[LIMIT] : La limite de la sélection. > Documentation Mysql::SELECT Premier exemple, nous allons sélectionner l'utilisateur dont l' "ID" est 169 dans une table du nom de "users": SELECT * FROM `users` WHERE `ID` = 169 LIMIT 1; Comme vous avez pu le constater j'ai mis un * dans les colonnes que je veux récupérer, celà signifie que je veux récupérer tout les colonnes de la ligne mais attention il n'est pas disponible dans toute les variantes SQL, le "LIMIT 1" est optionnel et inutile mais je le mets par hygiène de code maintenant nous allons faire un truc un peu plus compliqué, nous allons chercher dans une table du nom de "news" si le mot "patate" est présent dans la colonne "title" (titre) ou "content" (le contenu) et nous allons récupérer que le titre, le contenu et sont "guid" (qui correspond à son numéro d'index dans la table) dans l'ordre croissant selon le titre, mais vous vous dites pour trouver le mot ça va être compliqué non en faite regardez : SELECT `guid`, `title`, `content` FROM `news` WHERE (`title` LIKE '%patate%') OR (`cotent` LIKE '%patate%`) ORDER BY `title` ASC; Comme vous pouvez le voir le "LIKE" est apparu, il est utilisé au même titre que le caractère "=", et il est complémenté par le caractère "%" qui dans la recherche signifie qu'il peut s'agir de n'importe quel caractère ou même de plusieurs mais vous désirez avoir qu'une possibilité que de 1 caractère il suffit de mettre un "_" à la place du "%".il y a aussi l’apparition du "OR" qui signifie "ou", je dis donc à la requête que c'est ça ou ça pour être sélectionné, je mets des parenthèses pour bien séparer les conditions, vous pouvez aussi mettre un "AND" ("et" en français) si vous désirez que les deux conditions soient remplies. pour un peu mieux illustrer l'exemple au dessus je vais le "traduite" dans un langage plus un langage plus "humain": Sélectionne le `guid`, `title`, `content` dans les `news` où dans le `title` ressemble à '[n'importe]patate[n'importe]' ou dans le `content` si il y a une ressemblance à '[n'importe]patate[n'importe]' dans l'ordre de `title` en croissant. c'est moche et pire à comprendre mais bon il existe des langages en français... ^-^ maintenant la suppression <3 rien de plus simple de mettre fin aux jours de sa création, comme exemple je vais reprendre l'exemple de l'users 169 ci-dessus et vu qu'il est méchant on va le supprimer: #content: l'user (utilisateur) dont le `guid` (numéro index unique donné) est 169 est méchant donc on le supprime. #syntaxe: DELETE FROM [CIBLE] WHERE [CONDITION]; DELETE FROM `users` WHERE `guid`= 169 LIMIT 1; /!\ Attention, avec les commandes il n'est jamais possible de revenir en arrière sauf si vous avez une bonne mémoire ou une sauvegarde.Le "LIMIT 1" est présent non pas pour hygiène mais par sécurité car une faute de syntaxe et vous risquez de grave perte si vous ne mettez pas de conditions c'est tout le mode qui disparait. > Documentation Mysql::DELETE La remise à zéro, la commande "DELETE" c'est bien mais la commande "TRUNCATE" c'est mieux, quand vous utilisez la commande "DELETE" si votre table à un ou plusieurs index il(s) reste(nt) marqué(s) donc si vous voulez tout effacer et repartir à zéro (0) vous devez utiliser la commande "TRUNCATE": #context: vous avez un vieux site et vous désire l'utiliser avec ses dbs mais ils y a plein de vieux users à supprimer. #syntaxe: TRUNCATE TABLE [CIBLE] TRUNCATE TABLE `cible`; une raison de plus de ne pas avoir de faille sql dans son serveur...> Documentation Mysql::TRUNCATE Je pense avoir expliquer les commandes le plus utilisés, je ferais un autre topic sur la gestion des tables elle même, les comptes mysql et autre si j'en ai le courage x') Bonne programmation à tous même si je considère par le SQL comme de la prog, Mars073.
