IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] Probleme d'actualisation dans un caddie


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 159
    Points : 54
    Points
    54
    Par défaut [Sécurité] Probleme d'actualisation dans un caddie
    Bonjour,

    donc voilà le lien me permettant d'augmenter la quantité d'un produit de un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="index2.php?panier=1&action=ajoutun&idpdt=<? echo $cat['IDARTICLE'];?>">
    <img src="images/boutonplus.gif" border="0">
    </a>
    ensuite je vérifies l'action a effectué et elle s'effectue donc voilà le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?
    session_start();
    if(array_key_exists('action', $_GET)){
    	$actionpanier=$_GET['action'];
    	$idartsuppr=$_GET['idsuppr'];
    	$idproduit=$_GET['idpdt'];
    	if ($actionpanier=='supprligne'){
    		unset($_SESSION['achats'][$idartsuppr]);
    	}
    	if ($actionpanier=='vider'){
        	unset($_SESSION['achats']);
    	}
    	if ($actionpanier=='ajoutun'){
    		$nouvelleqte = $_SESSION['achats'][$idproduit]['qte'] + 1;
    		$_SESSION['achats'][$idproduit] += $nouvelleqte;
    	}
    	if ($actionpanier=='supprun'){
    		$nouvelleqte = $_SESSION['achats'][$idproduit]['qte'] - 1;
    		$_SESSION['achats'][$idproduit] += $nouvelleqte;
    	}
    }
    ?>
    mon problème est que quand je fais actualiser il recharge la page et augmente donc la page a nouveau de un j'aimerais donc savoir comment faire pour remettre juste le lien d'affichage du caddie, je ne peux pas mettre un headerlocation car il y du html avant le php.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    tu peux ajouter un mécanisme de jeton.
    Lors de l'affichage d'une page tu génères un jeton que tu injecte dans tout tes liens qui sont critiques (là ou le reload est pénalisant) + tu le stocke en session.
    Lorsque tu recois une requete, tu récupères le jeton de la requete et tu le compare avec celui en session. si c'est le meme tu executes la requete, puis tu invalide le jeton en session, et si c'est pas le meme c'est qu'il y a eu un refresh ou autre siouxerie qui mettrait le bazar.
    pour ton jeton => rand, uniqid, ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 159
    Points : 54
    Points
    54
    Par défaut
    1 - J'ai ma page index2.php, qui contient :
    * le menu
    * une colonne news
    * un bas de page
    * le corps de la page

    2 - Dans le corps de la page, j'ai un include qui me permet t'appeler mais différentes pages, mais ce sont des bouts de tableaux (probleme du a la présentation imposée)

    3 - j'ai donc mis dans toutes mes parties du corps de page la ligne suivante comme tu me l'as dis, sauf dans la page du panier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!isset($_SESSION['verif_value'])) $_SESSION['verif_value'] = rand(1,1000000);

    4 - dans la page panier voilà mon code maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    if(array_key_exists('action', $_GET)){
        $actionpanier=$_GET['action'];
        $idartsuppr=$_GET['idsuppr'];
        $idproduit=$_GET['idpdt'];
        if ($actionpanier=='supprligne'){
            unset($_SESSION['achats'][$idartsuppr]);
        }
        if ($actionpanier=='vider'){
            unset($_SESSION['achats']);
        }
        if($_SESSION['verif_value'] == $_GET['verif_value']){
            if ($actionpanier=='ajoutun'){
                $nouvelleqte = $_SESSION['achats'][$idproduit]['qte'] + 1;
                $_SESSION['achats'][$idproduit] += $nouvelleqte;
            }
            if ($actionpanier=='supprun'){
                $nouvelleqte = $_SESSION['achats'][$idproduit]['qte'] - 1;
                $_SESSION['achats'][$idproduit] += $nouvelleqte;
            }
        }
    }
    5 - j'ai ensuite réouvert le site, recréé un panier, mais quand j'augmente le nombre et que j'actualise j'ai le meme probleme, ca réaugmente

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Tu as oublié une étape : invalider le jeton en session !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 159
    Points : 54
    Points
    54
    Par défaut
    heu... :

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ben oui. Le jeton est à usage unique. donc une fois qu'il est utilisé (formulaire traité), tu le supprimes de la session (unset)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 159
    Points : 54
    Points
    54
    Par défaut
    je le supprime apres mes if pour ajouter un et supprimer un ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 159
    Points : 54
    Points
    54
    Par défaut
    J'ai fais comme ça mais ça ne change toujours rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?
    session_start();
    if(array_key_exists('action', $_GET)){
    	$actionpanier=$_GET['action'];
    	$idartsuppr=$_GET['idsuppr'];
    	$idproduit=$_GET['idpdt'];
    	if ($actionpanier=='supprligne'){
    		unset($_SESSION['achats'][$idartsuppr]);
    	}
    	if ($actionpanier=='vider'){
        	unset($_SESSION['achats']);
    	}
    	if($_SESSION['verif_value'] == $_GET['verif_value']){
        	if ($actionpanier=='ajoutun'){
    			$nouvelleqte = $_SESSION['achats'][$idproduit]['qte'] + 1;
    			$_SESSION['achats'][$idproduit] += $nouvelleqte;
    		}
    		if ($actionpanier=='supprun'){
    			$nouvelleqte = $_SESSION['achats'][$idproduit]['qte'] - 1;
    			$_SESSION['achats'][$idproduit] += $nouvelleqte;
    		}
    		unset($_SESSION['verif_value']);
    	}
    }
    ?>

  9. #9
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Cadeau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
     
    session_save_path(dirname(__FILE__));
    session_start();
     
    $msg = '';
    if (isset($_REQUEST['action']) && isset($_REQUEST['jeton'])) {
        if (isset($_SESSION['jeton']) && $_SESSION['jeton'] == $_REQUEST['jeton']) {
            $msg = 'action effectuée !!!';
            unset($_SESSION['jeton']);
        } else {
            $msg = '/!\ action pas effectuée /!\\';
        }
    }
    $_SESSION['jeton'] = rand(1, 10000);
     
    echo $msg;
    ?>
    <form action="" method="POST">
    <fieldset>
        <legend>Formulaire</legend>
        <input type="hidden" name="jeton"  value="<?=$_SESSION['jeton']?>" />
        <input type="submit" name="action" value="Action !" />
    </fieldset>
    </form>
    <a href="?jeton=<?=urlencode($_SESSION['jeton'])?>&amp;action=lien">Une autre action par un lien</a>

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 159
    Points : 54
    Points
    54
    Par défaut
    la position de mon unset ne reviens pas au meme

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 159
    Points : 54
    Points
    54
    Par défaut
    j'ai pas mis unset je regénère le jeton et ca marche, merci beaucoup pour ton aide :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    if(array_key_exists('action', $_GET)){
    	$actionpanier=$_GET['action'];
    	$idartsuppr=$_GET['idsuppr'];
    	$idproduit=$_GET['idpdt'];
    	if ($actionpanier=='supprligne'){
    		unset($_SESSION['achats'][$idartsuppr]);
    	}
    	if ($actionpanier=='vider'){
        	unset($_SESSION['achats']);
    	}
    	if($_SESSION['verif_value'] == $_GET['verif_value']){
        	if ($actionpanier=='ajoutun'){
    			$nouvelleqte = $_SESSION['achats'][$idproduit]['qte'] + 1;
    			$_SESSION['achats'][$idproduit] += $nouvelleqte;
    		}
    		if ($actionpanier=='supprun'){
    			$nouvelleqte = $_SESSION['achats'][$idproduit]['qte'] - 1;
    			$_SESSION['achats'][$idproduit] += $nouvelleqte;
    		}
    		$_SESSION['verif_value'] = rand(1,1000000);
    	}
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. JTable dans un JScrollPane probleme d'actualisation
    Par grm26 dans le forum Composants
    Réponses: 1
    Dernier message: 17/07/2008, 11h28
  2. Réponses: 2
    Dernier message: 04/01/2004, 15h14
  3. [BPW]Problème de recherche dans une boîte liste
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 14
    Dernier message: 05/07/2003, 15h10
  4. Probleme d'éffacement dans le cookie
    Par Geulderack dans le forum XMLRAD
    Réponses: 6
    Dernier message: 02/04/2003, 14h17
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo