interdire les carractere spéciaux php

interdire les carractere spéciaux php - PHP - Programmation

Marsh Posté le 31-12-2010 à 11:22:51    

Bonjour
J'ai fais des formulaires et je voulais savoir si vous aviez des fonctions qui permet d'interdire l'envoi des carractère spéciaux et une autre fonction pour interdire d'entré deux fois le meme utilisateur dans la base de donnée.  
Merci d'avance

Reply

Marsh Posté le 31-12-2010 à 11:22:51   

Reply

Marsh Posté le 31-12-2010 à 11:29:50    

Pour les caractères spéciaux, dans ton code php qui reçoit les infos de formulaire, tu fais un mysql_escape_string($_POST['ta_variable'])
 
Pour éviter d'utiliser deux fois le même utilisateur, tu dois faire une pré-requête SELECT où tu cherches si un utilisateur portes le même nom / login / autres infos.

Reply

Marsh Posté le 02-01-2011 à 12:30:06    

Arrêtez de conseiller mysql_escape_string à tort et à travers! On est en 2011, pas en 1990!
Duffman39: De nos jours, il y a 2 solutions faciles, fiable, rapides et qui t'offrent plein d'autres avantages que tu réaliseras par la suite :
- Les requêtes préparées ( http://www.php.net/manual/en/mysqli.prepare.php )
- L'utilisation d'une interface comme PDO ( http://www.php.net/manual/fr/book.pdo.php )  
 
Il est bon de lire la 1ere solution rapidement mais je te conseille d'utiliser la 2ème car c'est là que ça devient vraiment intéressant!


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 02-01-2011 à 19:55:13    

esox_ch a écrit :

Arrêtez de conseiller mysql_escape_string à tort et à travers! On est en 2011, pas en 1990!
Duffman39: De nos jours, il y a 2 solutions faciles, fiable, rapides et qui t'offrent plein d'autres avantages que tu réaliseras par la suite :
- Les requêtes préparées ( http://www.php.net/manual/en/mysqli.prepare.php )
- L'utilisation d'une interface comme PDO ( http://www.php.net/manual/fr/book.pdo.php )  
 
Il est bon de lire la 1ere solution rapidement mais je te conseille d'utiliser la 2ème car c'est là que ça devient vraiment intéressant!


A la question " Y a t'il une fonction", la réponse était parfaitement adaptée.
 
Maintenant s'il avait posé la question " Y a t'il moyen de repisser tout mon code d'une autre manière" alors ta réponse l'aurait était.
 

Reply

Marsh Posté le 02-01-2011 à 20:05:42    

Joue pas au con ...  
- Tu peux faire des prep. statements avec la fonction prepare (et vient pas me dire que tu l'as pas proposé parce que c'est une methode et non pas une fonction)
- Il est manifestement paumé s'il vient poser une question du genre, ça te semble la bonne occasion de lui sortir la pire des solutions juste pour être sûr de ne pas sortir de 1mm du scope de sa question?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 02-01-2011 à 21:18:06    

On peut même faire des requêtes préparées avec PDO.  :love:


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 03-01-2011 à 11:53:12    

esox_ch a écrit :

Joue pas au con ...  
- Tu peux faire des prep. statements avec la fonction prepare (et vient pas me dire que tu l'as pas proposé parce que c'est une methode et non pas une fonction)
- Il est manifestement paumé s'il vient poser une question du genre, ça te semble la bonne occasion de lui sortir la pire des solutions juste pour être sûr de ne pas sortir de 1mm du scope de sa question?


J'aurai du effectivement lui proposer mysql_real_escape_string()  :jap:  
 
Désolé, ça ne me semble pas "la pire" des solutions, je ne suis pas encore super au fait de PHP 5, et donc proposer une fonction simple me paraissait un conseil adapté :jap:
 
Maintenant, il est évident que si le but est de ramener sa science de manière désagréable, alors je m'inscris en faux, et toi en vrai.
 
Ceci dit, ça ne m’empêchera pas de regarder / appliquer les conseils que tu as donné, je ne t'en attribuerai juste pas le mérite.
 
Cordialement, touSSa

Reply

Marsh Posté le 03-01-2011 à 12:05:06    

En faite j'avais fais cela en javascript mais cétait pas formidable

Reply

Marsh Posté le 03-01-2011 à 13:10:48    

@hinomura: Peut-être que je suis allé un peu fort sur mon 2ème message.. Par contre mysqli_prepare() est aussi une fonction (bien que PHP5).
@duffman30: Le faire en JS c'est totalement inutile parce que ça peut être facilement contourné


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 03-01-2011 à 14:15:28    

Enfaite je demande pas un truc super compliquer cest pour une utilisation en intranet.
Juste un petit script me sufirait.

Reply

Marsh Posté le 03-01-2011 à 14:15:28   

Reply

Marsh Posté le 03-01-2011 à 14:19:43    

Va falloir que tu te fasses à l'idée que programmer en PHP, c'est compliqué [:dawa]
 
La première réponse est la plus simple et contenait déjà tout ce qu'il te faut.

Reply

Marsh Posté le 03-01-2011 à 14:19:45    

Voir mon 1er message


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 03-01-2011 à 14:25:32    

J'ai essayé mais ça ne marche pas  
Enfin je mis prend peut etre mal aussi
voila mon code
 
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. <title>Admin</title>
  6. </head>
  7. <body>
  8. <form method="POST" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
  9.   <p>
  10.   Login :
  11.   <input type="text" name="login" size="20" maxlength="45" id="login"  />
  12.   </p>
  13.   <p>Mot de passe :
  14.     <input type="password" name="mdp" size="20" maxlength="45" id="mdp" />
  15.   </p>
  16.   <p>Dossier :
  17.     <input type="text" name="dossier" size="20" maxlength="45" id="dossier" />
  18.     <br><br>
  19.     <input type="submit" value="Envoyer" name="envoyer" />
  20.   </p>
  21. </form>
  22. </body>
  23. </html>
  24. <?php
  25. mysql_escape_string($_POST['login'],$_POST['dossier']) ;
  26. $login_af=$_POST['login'];
  27. $mdp_af=$_POST['mdp'];
  28. ////////////////////////////////////////
  29. //           //
  30. //           //
  31. //    Envoi des données formulaire    //
  32. //           //
  33. //           //
  34. ////////////////////////////////////////
  35. // On récupère les champs
  36. mysql_escape_string($_POST['login']) ;
  37. mysql_escape_string($_POST['dossier']) ;
  38. $login=$_POST['login'];
  39. $mdp=md5($_POST['mdp']);
  40. $dossier=$_POST['dossier'];
  41. // On vérifie si les champs sont vides
  42. if(empty($login) OR empty($mdp) OR empty($dossier))
  43.     {
  44.     echo '<font color="red"><b>Attention, vous navez pas remplit touts les champs !</b></font><br />';
  45.     }
  46. // Aucun champ n'est vide, on peut enregistrer dans la table
  47. else   
  48.     {
  49.     $db = mysql_connect('localhost', 'root', 'root');  // connexion à la base
  50.     mysql_select_db('base',$db);                  // sélection de la base
  51.    
  52.  
  53.         $sql = "INSERT INTO acces(login,mdp,dossier) VALUES('$login','$mdp','$dossier')";
  54.         mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  55.  mkdir($dossier);
  56.        
  57.         // on affiche le résultat pour le visiteur
  58. echo '<font color="#00CC00"><b>Vos infos ont été ajoutées.</b></font><br />';
  59. echo '<table border="1" cellpadding="0" cellspacing="0">
  60.   <tr>
  61.     <td valign="middle">Le login du nouvelle utilisateur est <b>';
  62. echo $login_af;
  63. echo '</b><br />';
  64. echo 'Son mot de passe est <b>';
  65. echo $mdp_af;
  66. echo '</b></td>
  67.   </tr>
  68. </table><br />';
  69.        
  70.        
  71.     mysql_close();  // on ferme la connexion
  72.     }

Reply

Marsh Posté le 03-01-2011 à 14:27:55    

Et voilà ce qui arrive quand on conseille n'importe quoi à un débutant sous prétexte que c'est "plus simple" => Il fait n'importe quoi...  
Bravo la pédagogie [:pingouino]


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 03-01-2011 à 14:32:26    

<font color="#00CC00">


Oh putain le vieux html du XXème siècle  [:zytrasnif]

Reply

Marsh Posté le 03-01-2011 à 14:40:24    

Y a que ça qui te frappe ? :D
Son truc doit déjà être compromis dans tous les sens vu qu'il stocke les mdp en clair dans sa base ...
 
Edit: Voilà, vous avez fait les malins en lui donnant une solution "rafistolé vite fait", maintenant vous nettoyez les conneries :D


Message édité par esox_ch le 03-01-2011 à 14:41:20

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 03-01-2011 à 14:44:44    

Non les mot de passe ne sont pas stocker en claire dans la base

Code :
  1. $mdp=md5($_POST['mdp']);


Reply

Marsh Posté le 03-01-2011 à 14:46:04    

Et je ne parle pas des fautes d'orthographe  [:zytrahusathome]  

Attention, vous navez pas remplit touts les champs


Reply

Marsh Posté le 03-01-2011 à 14:46:13    

Après pour le font color j'aurais pu faire du CSS mais jsuis pas sur la partie graphique pour le moment

Reply

Marsh Posté le 03-01-2011 à 14:48:55    

duffman39 a écrit :

Non les mot de passe ne sont pas stocker en claire dans la base

Code :
  1. $mdp=md5($_POST['mdp']);




 
Toutes mes excuses, tu as raison :jap:
 
(Par contre quand même ... le md5 ça fait un moment qu'on arrive à le "casser" (j'entends par là, créer des collisions). Utilise au moins du sha1  :bounce:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 03-01-2011 à 14:49:08    

bah justement, si t'es pas sur la partie graphique, pourquoi t'as mis des font color ?  [:mister_k@]

Reply

Marsh Posté le 03-01-2011 à 14:55:42    

Oui jpensais faire un md5+graindesel mais bon, sa va encore alourdir le code

Reply

Marsh Posté le 03-01-2011 à 14:57:18    

oui pas faux enfin jsuis pas sur la partie graphique dans mon post.
Après je sais bien que c'est pas super pro ce que j'ai fais c'est pour cela que je demande de l'aide


Message édité par duffman39 le 03-01-2011 à 14:57:41
Reply

Marsh Posté le 03-01-2011 à 15:02:01    

Le soucis de ton code c'est qu'on voit qu'il a été fait un peu "à l'arrache", sans trop savoir dans quel sens tu pars, et du coup y manque de la structure ...
Tu as regardé les 2 liens que je t'ai donnés? ça te semblera peut-être un peu compliqué au départ, mais le soucis c'est que faire un code PHP "vite fait" ça rime souvent avec "mal fait - pas sécurisé". Une fois que t'auras bien assimilé les concepts, tu pourras écrire un truc qui tient la route.

 

Edit: Te préoccupe pas d'avoir un code "lourd", c'est pas avec un script de 15 lignes que tu vas y arriver ... Essaie d'avoir un code propre, logique et qui fait ce que tu veux. Le jour où t'auras des problèmes de performances, tu auras probablement acquis assez de compétences entre temps pour améliorer là où il faut


Message édité par esox_ch le 03-01-2011 à 15:03:18

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 03-01-2011 à 21:59:39    

Ils sont méchants mais c'est pour ton bien.
 
T'es le premier débutant qui s'acharne en php sur le forum depuis très longtemps. Continues comme ça, c'est en forgeant qu'on devient forgeron ;)


Message édité par CyberDenix le 03-01-2011 à 22:00:19

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 04-01-2011 à 09:45:58    

enfaite j'en avais fais il y a 5ans et j'ai laissé tomber et cette année, j'essai de mis remettre, surtout qu'on me demande d'en faire dans ma boite mais je galère pas mal et c'est aussi pour ça que je m'acharne un peu


Message édité par duffman39 le 04-01-2011 à 09:46:55
Reply

Marsh Posté le 04-01-2011 à 10:01:33    

Est-ce que tu as un bon bouquin de référence? Parce que c'est quand même bien utile pour se mettre dans le bain ..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-01-2011 à 12:07:57    

non pas vraiment, j'ai que le site du zéro comme aide, mais bon c'est vraiment la base

Reply

Marsh Posté le 04-01-2011 à 12:55:37    

Oui et même comme base c'est pas tout à fait glop ...  
Voilà un bon livre : http://ptgmedia.pearsoncmg.com/ima [...] X_book.pdf  
Si tu veux la version papier, elle existe sur Amazon
 
Sinon en français : http://g-rossolini.developpez.com/tutoriels/php/cours/


Message édité par esox_ch le 04-01-2011 à 12:56:26

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 04-01-2011 à 14:39:42    

Merci bien pour le coup de pouce, je pense que ça me fera progresser surtout quand je suis pas du tout ce domaine d'activité, je suis dans une imprimerie :-S

Reply

Marsh Posté le 04-01-2011 à 14:41:33    

De rien, tu verras que si tu arrives à rester croché et à tout bien lire et apprendre, ça prendra du temps mais tu pourras faire des trucs pas mal à la fin :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-01-2011 à 21:24:31    

Et pour l'usage, même si la fonction pue du bout pour certains, mysql_escape_string ( ou mysql_real_escape_string ) s'utilise comme ça

 
Code :
  1. $pwd = mysql_real_escape_string($_POST['password']);
  2. $login = mysql_real_escape_string($_POST['login']);
  3. // tests conditions touSSa
  4. $query = "INSERT INTO ma_table (login,password) VALUES ('" , $login , "','", $pwd , "')";
  5. // puis executer la requete touSSa
 

Après y a le PDO, les requêtes préparées etc qui sont plus propres aussi :jap:


Message édité par hinomura le 05-01-2011 à 21:30:35
Reply

Marsh Posté le 05-01-2011 à 21:27:53    

esox_ch a écrit :

@hinomura: Peut-être que je suis allé un peu fort sur mon 2ème message.. Par contre mysqli_prepare() est aussi une fonction (bien que PHP5).
@duffman30: Le faire en JS c'est totalement inutile parce que ça peut être facilement contourné


Le problème n'est pas tant que tu ais raison, c'est surtout que je bosse principalement sur un intranet PHP4, et je développe sur une infra existante, sans pdo, sans php5, donc je suis assez peu coutumier des technos PHP5 et des classes / méthodes qui ne sont pas utilisés dans le code sur lequel je dois m'adapter, mais je te concède que ça reste la manière la plus propre. ;)

Reply

Marsh Posté le 05-01-2011 à 21:36:01    

Non mais d'accord mais la question n'est pas là, la question est surtout de savoir à quel point vous êtes d'accord que l'application se pète la gueule un jour où l'autre... C'est pas le côté "propre" du code qui me fait utiliser des requêtes préparées (franchement c'est 3x plus long qu'écrire la requête à la main). Par contre le fait que ça te permette d'augmenter les perf des requêtes en utilisant le cache MySQL c'est vachement intéressant ... suffi de lire la doc pour se rendre compte qu'il n'y a AUCUNE excuse à ne pas l'utiliser


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-01-2011 à 22:05:32    

esox_ch a écrit :

Non mais d'accord mais la question n'est pas là, la question est surtout de savoir à quel point vous êtes d'accord que l'application se pète la gueule un jour où l'autre... C'est pas le côté "propre" du code qui me fait utiliser des requêtes préparées (franchement c'est 3x plus long qu'écrire la requête à la main). Par contre le fait que ça te permette d'augmenter les perf des requêtes en utilisant le cache MySQL c'est vachement intéressant ... suffi de lire la doc pour se rendre compte qu'il n'y a AUCUNE excuse à ne pas l'utiliser


Ca y est tu t'emballes encore, prends tes medocs, on a le temps :jap:
 
La question n'est pas de savoir si on doit le faire, c'est si on peut.
 
Si on te fout sur un dev de module d'un truc existant avec 2000 pages, des requêtes partout, et qu'on te dit juste de développer un module, tu vas pas leur re-pondre tout leur code pour que ça soit clean, surtout si c'est pas spécifié par le CDC hein, donc tu fais ton taf avec les outils dispos et les fonctions déjà utilisés pour que le code reste cohérent.
 
Dans le cas d'un nouveau dev, oui, tu consultes ce qu'il se fait de nouveau ...

Reply

Marsh Posté le 06-01-2011 à 08:52:19    

Belle mentalité ... avec une optique aussi volontaire et avanguardiste ne t'étonne pas si on ne te proposera jamais de boulot plus intéressant ...
Tes décideurs ils en savent foutre rien de comment marche le site (et ils s'en foutent, et ils ont bien raison parce que c'est pas leur taf, c'est le tien). Donc c'est à toi de leur dire "Si on investi un peu pour reprendre la merde qui a été faite avant, vous gagnerez X% de productivité, et Y € en investissement serveur". C'est clair que si t'arrives avec tes propos du "Faudrait passer le code en PDO parce que c'est plus propre" ils vont te botter le cul, et là encore ils ont raison


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-01-2011 à 09:39:33    

C'est pas une "mentalité", c'est la réalité du marché : à partir du moment où tu commences une phrase par "si on investit un peu", t'as une réponse négative.

Reply

Marsh Posté le 06-01-2011 à 09:46:49    

Bah vous avez pas de bol alors avec vos clients ... Ou alors vous savez pas les prendre ...
Si tu leur montre un lien direct (et avec peu de risque) entre un petit investissement aujourd'hui et une épargne le mois prochain (pas dans 10 ans), en général ça passe ...
Après le tout est de parler "financier" et non pas "troll poilu" .. sinon c'est clair que tu te fais botter le cul (bon en même temps en tant que consultant c'est un peu mon rôle de pousser les gens qui ont des thunes à investir dans des trucs qu'ils comprennent pas :D )


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-01-2011 à 11:46:43    

esox_ch a écrit :

Belle mentalité ... avec une optique aussi volontaire et avanguardiste ne t'étonne pas si on ne te proposera jamais de boulot plus intéressant ...
Tes décideurs ils en savent foutre rien de comment marche le site (et ils s'en foutent, et ils ont bien raison parce que c'est pas leur taf, c'est le tien). Donc c'est à toi de leur dire "Si on investi un peu pour reprendre la merde qui a été faite avant, vous gagnerez X% de productivité, et Y € en investissement serveur". C'est clair que si t'arrives avec tes propos du "Faudrait passer le code en PDO parce que c'est plus propre" ils vont te botter le cul, et là encore ils ont raison


Mais mon pauvre petit gars, c'est toi qui ne vis pas sur la même planète :)
 
Si ta mission n'est pas de re-développer un outil fonctionnel, tu peux proposer autant que tu veux, ce sont les objectifs prioritaires qui priment.
 
Et si un intranet / erp est codé sans tes mysql_prepare, ça n'en fait pas un mauvais outil pour autant.
 
Sors de ta bulle, parce que du boulot on m'en propose, et je sais m'adapter aux outils ET aux missions.
 
Si toi lorsque tu arrives tu proposes de refaire tout cash à ta sauce, c'est là qu'ils doivent rigoler :lol:
 
Bref, c'est pas grave, t'es dans ta bulle, si t'avances professionnellement en étant aussi obtus, tant mieux pour toi ;)
 
Je ne vais pas m'attarder avec toi, parce que ta prose sort du contexte originel et que je sens que ça va être très vite lassant.
 
A+

Reply

Marsh Posté le 06-01-2011 à 12:09:17    

Très bien :) Le jour où tu devras intervenir sur un projet plus gros que les news de la boucherie du coin tu comprendras :)
 
A+


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed