Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1349 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Protéger mon champs $_POST dans mon panier

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Protéger mon champs $_POST dans mon panier

n°1723189
hppp
Serveur@home
Posté le 23-04-2008 à 22:03:19  profilanswer
 

Salut a tous,
 
Vous vous explique mon problème, j'ai un panier sur mon site e-commerce et j'ai un champ $_POST pour changer la quantité, Mais j'ai trouvé 2, 3 bug.
Je peut mettre 2.3, mais je peut peut pas commander 2.3 quantité d'un produit, alors comment avoir que des nombre entier? il y a sûrement une fonction PHP mais je la connais pas
J'ai aussi trouvé que quand je met 2,3 , la "," me fait buger mon code Mysql, alors comment faire pour avoir que des nombre numérique et pas de caractère spéciaux ou de lettre? il y a sûrement aussi un fonction et la sa réglerait aussi mon premier bug. Voila Merci beaucoup.  

mood
Publicité
Posté le 23-04-2008 à 22:03:19  profilanswer
 

n°1723222
sielfried
Posté le 23-04-2008 à 22:58:17  profilanswer
 
n°1723223
hppp
Serveur@home
Posté le 23-04-2008 à 23:00:07  profilanswer
 

ok Merci

n°1723231
hppp
Serveur@home
Posté le 23-04-2008 à 23:24:47  profilanswer
 


et y aurai pas une fonction comme elle mais à la place a vérifier si il y a des entiers, qu'elle enlève tous se qu'il n'est pas et qu'elle laisse que des nombres? Merci

n°1723233
sielfried
Posté le 23-04-2008 à 23:33:17  profilanswer
 

preg_replace('/[^0-9]/', '', $tontruc)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1723235
hppp
Serveur@home
Posté le 23-04-2008 à 23:41:41  profilanswer
 

ok Merci

n°1723247
art_dupond
je suis neuneu... oui oui !!
Posté le 24-04-2008 à 00:10:06  profilanswer
 

intval ne fait pas ça ?


---------------
oui oui
n°1723253
hppp
Serveur@home
Posté le 24-04-2008 à 00:21:10  profilanswer
 

Je voulais savoir autre chose, Je voudrai savoir si on peut passer par $_GET un champ de formulaire? Je m'explique, la visiteur sur la fiche du produit rentre la quantité qu'il veut et valide, et je voudrai passer cette quantité par $_GET? est-ce possible? Ou il faut vraiment que je passe par $_POST? Merci

n°1723255
hppp
Serveur@home
Posté le 24-04-2008 à 00:22:11  profilanswer
 

art_dupond a écrit :

intval ne fait pas ça ?


La Fonction de sielfried marche très bien, je sais pas pourquoi je n'y avais pas penser. Sûremet car je l'utilise trop peut.

n°1723257
art_dupond
je suis neuneu... oui oui !!
Posté le 24-04-2008 à 00:50:08  profilanswer
 

je préfère faire intval que preg_machin :o


---------------
oui oui
mood
Publicité
Posté le 24-04-2008 à 00:50:08  profilanswer
 

n°1723277
sielfried
Posté le 24-04-2008 à 07:33:42  profilanswer
 

Ça dépend ce qu'il veut. intval (ou un cast en int, ce qui revient à peu près au même je crois) est probablement plus adaptée, mais j'ai répondu strictement à sa question. intval ne fait pas que virer les non-chiffres, c'est une fonction numérique. :o        


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1723278
sielfried
Posté le 24-04-2008 à 07:34:05  profilanswer
 

hppp a écrit :

Je voulais savoir autre chose, Je voudrai savoir si on peut passer par $_GET un champ de formulaire? Je m'explique, la visiteur sur la fiche du produit rentre la quantité qu'il veut et valide, et je voudrai passer cette quantité par $_GET? est-ce possible? Ou il faut vraiment que je passe par $_POST? Merci


 
<form method="get"


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1723298
FlorentG
Posté le 24-04-2008 à 09:22:02  profilanswer
 

hppp a écrit :

Je voulais savoir autre chose, Je voudrai savoir si on peut passer par $_GET un champ de formulaire? Je m'explique, la visiteur sur la fiche du produit rentre la quantité qu'il veut et valide, et je voudrai passer cette quantité par $_GET? est-ce possible? Ou il faut vraiment que je passe par $_POST? Merci


Il faut que ça soit du POST obligatoirement, car l'action a des effets de bords.

n°1723313
art_dupond
je suis neuneu... oui oui !!
Posté le 24-04-2008 à 09:53:42  profilanswer
 

intval transforme 2,3 - 2.3 - "2.3" et "2,3" en 2
c'est ce qu'il voulait :o


---------------
oui oui
n°1723325
sielfried
Posté le 24-04-2008 à 10:05:24  profilanswer
 

art_dupond a écrit :

intval transforme 2,3 - 2.3 - "2.3" et "2,3" en 2
c'est ce qu'il voulait :o


 
Une fonction qui vire tout ce qui n'est pas numérique dans "2,3" retourne "23", pas 2. intval est probablement plus adapté à son cas mais sa question était dans ce cas très mal formulée. [:spamafote]  
 
Bref.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1723337
sielfried
Posté le 24-04-2008 à 10:12:34  profilanswer
 

hppp a écrit :


après alors tu la récupère avec un $_GET? elle apparaît pas dans l'URL?


 
Si, elle apparaîtra dans l'URL. De toute façon c'est une très mauvaise idée comme l'a signalé FlorentG. Quel est le but ?


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1723338
art_dupond
je suis neuneu... oui oui !!
Posté le 24-04-2008 à 10:13:18  profilanswer
 

aaaah je n'avais effectivement pas compris ça comme ça :jap:
 


---------------
oui oui
n°1723347
hppp
Serveur@home
Posté le 24-04-2008 à 10:18:39  profilanswer
 

sielfried a écrit :


 
Si, elle apparaîtra dans l'URL. De toute façon c'est une très mauvaise idée comme l'a signalé FlorentG. Quel est le but ?


C'est bon j'ai compris comment ça marchait .  
En fait j'ai un produit à vendre, le visiteur sélectionne la quantité dans un champ et après il valide et est redirigé  vers le panier.
Mais ouiat je pense que POST est le plus propre.

n°1723349
hppp
Serveur@home
Posté le 24-04-2008 à 10:21:08  profilanswer
 

sielfried a écrit :


 
Une fonction qui vire tout ce qui n'est pas numérique dans "2,3" retourne "23", pas 2. intval est probablement plus adapté à son cas mais sa question était dans ce cas très mal formulée. [:spamafote]  
 
Bref.


ouiat aussi d'un coté c'est peut être mieux. :??:  Mais bon je pense que je vais laisser comme ça.

n°1723558
hppp
Serveur@home
Posté le 24-04-2008 à 13:32:57  profilanswer
 

je voulais savoir un autre truc, est-ce que cette requête est juste? Merci
 
mysql_query('INSERT INTO lcg_boutique_commandes VALUES('','.$date_commande.','.$_SESSION['id_client'].','','.$_POST['total_commande'].','.$_POST['paiement'].','','','.1.','.$donnees_client['nom'].','.$donnees_client['prenom'].','.$donnees_client['adresse'].','.$donnees_client['adresse2'].','.$donnees_client['code_posta'].','.$donnees_client['ville'].','.$donnees_client['code_pays'].','','.$donnees_client['pays'].')') or die(mysql_error());

n°1723635
tostiere
Posté le 24-04-2008 à 14:24:24  profilanswer
 

Salut,
ton code est très dangereux comme ça, en fait on peut aisement faire des injections sql pour peu qu'on s'y connaisse.
 
Je te conseille de récupèrer tous tes posts dans des variables comme ceci :
 
$truc = htmlspecialchars(addslashes($_POST['valeur']));
 
Ca résout également le problème des virgules qui font bugguer le code et ton code est plus sécurisé.
 
D'ailleurs ne laisse surtout pas la fonction mysql_error() dans la version finale de ton site, si les visiteurs voient l'erreur retournée ça facilitera la tâches des injections sql...
 
 
Sinon, j'aurais plutôt fait :
(...) VALUES('".$date_commende."', '".$_SESSION['id_client']."', (...)


Message édité par tostiere le 24-04-2008 à 14:26:29
n°1723641
hppp
Serveur@home
Posté le 24-04-2008 à 14:26:57  profilanswer
 

ok Merci beaucoup pour cette aide, je vais faire comme tu dit.
EDIT: Sa sert a rien de le faire sur les données récupéré dans une BDD et après réenregistré?


Message édité par hppp le 24-04-2008 à 14:29:43
n°1723647
art_dupond
je suis neuneu... oui oui !!
Posté le 24-04-2008 à 14:28:45  profilanswer
 

vaut mieux faire B, voire même C :o
 
http://forum.hardware.fr/forum2.ph [...] w=0&nojs=0


---------------
oui oui
n°1723661
tostiere
Posté le 24-04-2008 à 14:34:39  profilanswer
 

Citation :

EDIT: Sa sert a rien de le faire sur les données récupéré dans une BDD et après réenregistré?


 
Du moment que c'est du $_POST (ou du $_GET), peu importe d'où proviennent les données... tu dois le faire !
 
par ailleurs merci à art_dupond pour la précision, en effet il est mieux de faire :
 
$truc = htmlspecialchars(mysql_real_escape_string($_POST['valeur']));  
 
;)

Message cité 3 fois
Message édité par tostiere le 24-04-2008 à 14:35:03
n°1723670
art_dupond
je suis neuneu... oui oui !!
Posté le 24-04-2008 à 14:39:09  profilanswer
 

à noter qu'il faut d'abord ouvrir la connexion à la DB avant de pouvoir utiliser mysql_real_escape_string() (enfin si je ne parkinsonise pas déjà trop).

 


Spoiler :

oui c'est pas parkinson, mais justement je suis déjà trop atteint pour me rappeler du nom de la maladie :sweat:

 



Message édité par art_dupond le 24-04-2008 à 14:39:29

---------------
oui oui
n°1723678
hppp
Serveur@home
Posté le 24-04-2008 à 14:45:32  profilanswer
 

tostiere a écrit :

Citation :

EDIT: Sa sert a rien de le faire sur les données récupéré dans une BDD et après réenregistré?


 
Du moment que c'est du $_POST (ou du $_GET), peu importe d'où proviennent les données... tu dois le faire !
 
par ailleurs merci à art_dupond pour la précision, en effet il est mieux de faire :
 
$truc = htmlspecialchars(mysql_real_escape_string($_POST['valeur']));  
 
;)


 
OK merci pour toutes ces précisions.  :jap:  

n°1723698
FlorentG
Posté le 24-04-2008 à 14:53:03  profilanswer
 

tostiere a écrit :

$truc = htmlspecialchars(mysql_real_escape_string($_POST['valeur'])); ;)


Surtout pas de htmlspecialchars à ce niveau là. La donnée sera insérée dans la base, il suffit de la protéger en vue d'une injection SQL.
 
L'htmlspecialchars interviendra au moment de l'affichage.

n°1723713
sielfried
Posté le 24-04-2008 à 15:01:11  profilanswer
 

En effet htmlspecialchars n'a strictement rien à faire là.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1723714
tostiere
Posté le 24-04-2008 à 15:02:57  profilanswer
 

Je ne vois pas en quoi ça gêne un htmlspecialchars ?
 
Pouvez-vous détailler un peu plus svp ?

Message cité 1 fois
Message édité par tostiere le 24-04-2008 à 15:03:34
n°1723727
sielfried
Posté le 24-04-2008 à 15:08:05  profilanswer
 

tostiere a écrit :

Je ne vois pas en quoi ça gêne un htmlspecialchars ?


 
C'est absolument pas fait pour ça. C'est une fonction d'affichage, pas de protection des données.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1723736
tostiere
Posté le 24-04-2008 à 15:12:38  profilanswer
 

Bon, je sais que c'est pas propre, mais si on fait tout le temps comme ça et pour tous les POST, à priori il n'y aura pas de problème, non ?

n°1723753
sielfried
Posté le 24-04-2008 à 15:21:08  profilanswer
 

tostiere a écrit :

Bon, je sais que c'est pas propre, mais si on fait tout le temps comme ça et pour tous les POST, à priori il n'y aura pas de problème, non ?


 
Il vaut mieux comprendre ce que fait chaque fonction plutôt que de les combiner un peu au hasard pour "protéger les variables de tout". [:petrus75]  
 
mysql_real_escape_string (ou mieux, des prepared statements avec PDO/mysqli) permet d'échapper de façon sécurisée une donnée à insérer dans une base MySQL. htmlspecialchars et les fonctions du genre permettent de transformer les caractères spéciaux du html en leur équivalent en entités "non interprétées", donc notamment pour protéger des attaques XSS lorsqu'on affiche un truc saisi par l'utilisateur.
 
Les deux choses sont complètement différentes.


Message édité par sielfried le 24-04-2008 à 15:25:20

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1723768
FlorentG
Posté le 24-04-2008 à 15:25:20  profilanswer
 

tostiere a écrit :

Bon, je sais que c'est pas propre, mais si on fait tout le temps comme ça et pour tous les POST, à priori il n'y aura pas de problème, non ?


Et si t'as besoin de la donnée ailleurs que dans l'HTML ?

n°1723770
sielfried
Posté le 24-04-2008 à 15:26:32  profilanswer
 

FlorentG a écrit :


Et si t'as besoin de la donnée ailleurs que dans l'HTML ?


 
http://fr.php.net/manual/fr/functi [...] decode.php voyons !  [:dawa]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1723775
tostiere
Posté le 24-04-2008 à 15:28:54  profilanswer
 

Ben oui hein, namého  :o  
 
 
(tapez pas ! c'était juste une question  :p )

n°1723779
masklinn
í dag viðrar vel til loftárása
Posté le 24-04-2008 à 15:31:35  profilanswer
 

tostiere a écrit :

$truc = htmlspecialchars(mysql_real_escape_string($_POST['valeur']));  
 
;)


[:ciler]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1723783
art_dupond
je suis neuneu... oui oui !!
Posté le 24-04-2008 à 15:33:39  profilanswer
 

Si ce sont des données de toute façon destinées à être affichées, *chien de mickey* que de htmlspecialchariser à chaque fois, pourquoi ne pas le faire une fois pour toute ?

 

Perso je ne le fais pas parce que je me dis qu'il se pourrait qu'un jour j'utilise les données autrement (puis y a le cache), mais sinon je vois pas pourquoi c'est "si" mal :??:

 


edit: oups, j'ai un peu mis de temps à poster :p


Message édité par art_dupond le 24-04-2008 à 15:34:39

---------------
oui oui
n°1723788
art_dupond
je suis neuneu... oui oui !!
Posté le 24-04-2008 à 15:37:52  profilanswer
 

Sinon, suffit de se faire sa fonction qui échappe les trucs et au pire de modifier le jour où on a besoin des données autrement - ce que je faisais puis je n'ai jamais eu besoin des données autrement :p


---------------
oui oui
n°1723790
masterpsx
Aigloun foutougrafe
Posté le 24-04-2008 à 15:39:00  profilanswer
 

Parceque ca modifie les données a l'enregistrement alors que normalement on le fait à l'affichage, utiliser mysql_real_escape_string() permet d'eviter de modifier, tout en sécurisant ses requétes.
 
Si tu utilises addslashes(), tu seras obligé d'utiliser stripslashes() aussi, quand à htmlspecialchars() ca peut te poser des problèmes avec l'encodage et d'autres trucs.

n°1723795
art_dupond
je suis neuneu... oui oui !!
Posté le 24-04-2008 à 15:44:37  profilanswer
 

la question est : pourquoi absolument le faire à chaque affichage au lieu de ne le faire qu'une fois à l'enregistrement (si ça marche, qu'il n'y a pas de problème...)


---------------
oui oui
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Protéger mon champs $_POST dans mon panier

 

Sujets relatifs
champs adresse ip[MySQL] Copier des champs d'une base vers une autre.
champs liés entre 2 tables (mysql)Function JS calcul automatique des champs
Ajouter un nombre dans tous les champschamps access
Gérer un panier avec les cookies = gros souci......._
Formulaire avec champs obligatoiresComment protéger une macro dans excel de tout accès extérieur
Plus de sujets relatifs à : Protéger mon champs $_POST dans mon panier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR