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 :

Actualisation porte monnaie virtuel


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut Actualisation porte monnaie virtuel
    Yop, je suis actuellement en train de coder la partie boutique de mon site. Je souhaite faire un systeme de porte monnaie virtuel. Après avoir rechargé son porte monnaie, l'utilisateur peut accéder à la partie boutique et cliquer sur le produit qu'il veut. En cliquant, l'utilisateur doit confirmer par un ptit message jscript et lorsque ceci est fait, son porte monnaie s'actualise.


    Voici mon code actuel:

    Affichage des produits de la boutique:

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <div id="boutique">
        <h1>Explications Boutique</h1>
    <?php
        $req = mysql_query('SELECT * FROM products');
     
        $total = mysql_num_rows($req);
     
     
     
        $nbcol=2;
    // on compte le nombre de miniatures
    $nbpics = $total;
     
    // si on a au moins une miniature, on les affiche toutes
    if ($nbpics != 0) {
        echo '<table>';
        for ($i=0; $i<$nbpics; $i++){
        $products = mysql_fetch_array($req);
            if($i%$nbcol==0) echo '<tr>';
            // pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle
            echo "<td><div class=\"produit\">";
            echo "<div id=\"prod_titre\">".$products['name']."</div>";
            echo "<div id=\"prod_contenu\">";
            echo "<div id=\"prod_image\"><img src=\"images/Achats/$products[id].png\" ></div>";
            // echo "<div id=\"prix\">";
            echo "<div id=\"nprix\"><br/><br/><br/>".$products['prix']."</div></div>";
            echo "<div id=\"img_prix\"><a href='' onclick=\"Actualiser($products[id], $products[prix])\"><img src=\"images/Achats/prix.png\" ></a></div></div><br /></td>";
            // echo "<div id=\"nprix\">".$products['prix']."</div></div><br /></td>";
     
            if($i%$nbcol==($nbcol-1)) echo '</tr>';
        }
        echo '</table>';
    }
    // si on a aucune miniature, on affiche un petit message <img src="../../bundles/tinymce/vendor/tiny_mce/plugins/emotions/img/smile.png" title=":)" alt=":)">
    else echo 'Aucune image à afficher';
     
    // }
     
        ?>
    </div>
    <script type="text/javascript" src="js/fonctions.js"></script>
    Fonctions javascript :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function Actualiser(id, prix){
     
        var xhr = new XMLHttpRequest();
     
        // Lorsqu'un réponse est émise par le serveur
        xhr.onreadystatechange = function() {
        if (xhr.status == 200 && xhr.readyState == 4) {
            document.getElementById('content').innerHTML = xhr.responseText;
     
            // xhr.responseText contient exactement ce que la page PHP renvoi
        }
    };
    xhr.open('GET', 'achat.php?id='+id);
    xhr.send('');
    }

    Page php qui est censée actualiser le porte monnaie de l'utilisateur:

    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
    <?php
    session_start();
    include('config.php');
    ?>
     
     
    <?php
    if(isset($_GET[id])){
     
        $id_prod = $_GET[id];
        $req1 = mysql_query('SELECT Aum FROM users WHERE id = $_SESSION[id]');
        $req2 = mysql_query('SELECT prix FROM products WHERE id = $id_prod');
        $products = mysql_fetch_array($req2);
        $aum = mysql_fetch_array($req1);
     
        $monnaie = $aum[0] - $products[0];
     
        $sql = 'UPDATE users SET Aum='.$monnaie.' WHERE id='.$_SESSION['id']; // Ici on prend une valeur DU SERVEUR et surtout pas une valeur venant du JavaScript
        $req = mysql_query($sql);
     
    }
    ?>
    Avez-vous des remarques? des suggestions?

    Il n'y a aucune erreur javascript d'après la console sur chrome..pourtant ça ne fait pas ce que je veux.. Quand je clique sur un produit la page s'actualise seulement.

    Merci d'avance

    Peace

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xhr.open('GET', 'achat.php?id='+id); // le prix n'est pas envoyé mais seulement l'id
    xhr.send('');// à remplacer par xhr.send(null)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(isset($_GET[id])){ // $_GET["id"]
     
        $id_prod = $_GET[id]; //  $_GET["id"]
        $req1 = mysql_query('SELECT Aum FROM users WHERE id = $_SESSION[id]'); // Les variables ne sont pas interprétées dans les single quote
        $req2 = mysql_query('SELECT prix FROM products WHERE id = $id_prod');// Les variables ne sont pas interprétées dans les single quote
    A+.

  3. #3
    Membre chevronné

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Billets dans le blog
    1
    Par défaut
    Bon j'espère que tu vérifies bien en amont que $_SESSION['id'] existe.
    Tu ne filtres pas la valeur de $_GET['id'] et ne vérifies pas non plus que tes requêtes produises un résultat (quid d'un id produit qui n'existe pas, ou d'une tentative d'injection SQL ?).
    De même, $_GET[id] n'existe pas. C'est $_GET['id'] qui existe
    Voilà quelques corrections :
    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 (isset($_GET['id']))
    {
        $id_prod = intval($_GET['id']); // on filtre pour être certain de récupérer un nombre entier
        $req1 = mysql_query('SELECT Aum FROM users WHERE id = '.$_SESSION['id'].' LIMIT 1');
        $req2 = mysql_query('SELECT prix FROM products WHERE id = '.$id_prod.' LIMIT 1');
     
        if (FALSE !== $req1 && mysql_num_rows($req1) && FALSE !== $req2 && mysql_num_rows($req2)) // La requête est passée et on a bien au moins un résultat
        {
            $products = mysql_fetch_assoc($req2); // Te renvoie un tableau associatif au lieu d'un tableau doublement indexé, légérement plus optimisé
            $aum      = mysql_fetch_assoc($req1);
            $monnaie = $aum[0] - $products[0];
     
            $sql = 'UPDATE users SET Aum='.$monnaie.' WHERE id='.$_SESSION['id']; // Ici on prend une valeur DU SERVEUR et surtout pas une valeur venant du JavaScript
            $req = mysql_query($sql);
        }
        else
        {
            // Erreur : une des deux requêtes a échoué ou il n'y a aucun produit / user correspondant aux ids fournis
        }
    }
    Dernière remarque : mysql_ est dépréciée, passes sous mysqli_ ou PDO !
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut
    Bonjour,

    Merci pour vos réponses très précises. J'ai fais les quelques modifications que vous m'avez proposé. Bien évidemment, cela m'a permit de comprendre un peu mieux mes erreurs et pour ça, vous êtes géniaux !

    Cependant, j'ai toujours le même problème à savoir, la page s'actualise sans actualiser le porte monnaie.

    Mon javascript est il bon? (J'ai modifié le xhr.send comme le l'a préconisé andry aime)

    Merci d'avance

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Peut-on voir ton code actuel?

    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
    function Actualiser(id, prix){
     
        var xhr = new XMLHttpRequest();
     
        // Lorsqu'un réponse est émise par le serveur
        xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            if (xhr.status == 200 || xhr.status == 0){
                  document.getElementById('content').innerHTML = xhr.responseText;
            }
            else{
                  alert ("erreur"+xhr.status);
             }
            // xhr.responseText contient exactement ce que la page PHP renvoi
        }
    };
    xhr.open('GET', 'achat.php?id='+id);
    xhr.send(null);
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2013
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Février 2013
    Messages : 155
    Par défaut
    Mon code actuel:

    Ma page Boutique.php où mes produits sont affichés :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
    	 include('modules/config.php');
    ?>
     
     
    <div id="boutique">
    	<h1>Explications Boutique</h1>
    <?php 
    	$req = mysql_query('SELECT * FROM products');
     
    	$total = mysql_num_rows($req);
     
     
     
    	$nbcol=2;
    // on compte le nombre de miniatures
    $nbpics = $total;
     
    // si on a au moins une miniature, on les affiche toutes
    if ($nbpics != 0) {
    	echo '<table>';
    	for ($i=0; $i<$nbpics; $i++){
    	$products = mysql_fetch_array($req);
    		if($i%$nbcol==0) echo '<tr>';
    		// pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle
    		echo "<td><div class=\"produit\">";
    		echo "<div id=\"prod_titre\">".$products['name']."</div>";
    		echo "<div id=\"prod_contenu\">";
    		echo "<div id=\"prod_image\"><img src=\"images/Achats/$products[id].png\" ></div>";
    		// echo "<div id=\"prix\">";
    		echo "<div id=\"nprix\"><br/><br/><br/>".$products['prix']."</div></div>";
    		echo "<div id=\"img_prix\"><a href='' onclick=\"Actualiser($products[id], $products[prix])\"><img src=\"images/Achats/prix.png\" ></a></div></div><br /></td>";
    		// echo "<div id=\"nprix\">".$products['prix']."</div></div><br /></td>";
     
    		if($i%$nbcol==($nbcol-1)) echo '</tr>';
    	}
    	echo '</table>';
    }
    // si on a aucune miniature, on affiche un petit message :)
    else echo 'Aucune image à afficher';
     
    // }
     
    	?>
    </div>
    <script type="text/javascript" src="js/fonctions.js"></script>
    Ma fonction javascript :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function Actualiser(id, prix){
     
        var xhr = new XMLHttpRequest();
        // Lorsqu'un réponse est émise par le serveur
        xhr.onreadystatechange = function() {
        if (xhr.status == 200 && xhr.readyState == 4) {
            document.getElementById('content').innerHTML = xhr.responseText;
     
            // xhr.responseText contient exactement ce que la page PHP renvoi
        }
        };
        xhr.open('GET', 'achat.php?id='+id);
        xhr.send(NULL);
    }

    Ma page achat.php qui est executé à chaque clique sur un produit de l'utilisateur:

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    session_start();
    include('config.php');
    ?>
     
     
    <?php
    if(isset($_SESSION['id'])){
     
    	if (isset($_GET['id']))
    	{
    	    $id_prod = intval($_GET['id']); // on filtre pour être certain de récupérer un nombre entier
    	    $req1 = mysql_query('SELECT Aum FROM users WHERE id = '.$_SESSION['id'].' LIMIT 1');
    	    $req2 = mysql_query('SELECT prix FROM products WHERE id = '.$id_prod.' LIMIT 1');
     
    	    if (FALSE !== $req1 && mysql_num_rows($req1) && FALSE !== $req2 && mysql_num_rows($req2)) // La requête est passée et on a bien au moins un résultat
    	    {
    	        $products = mysql_fetch_assoc($req2); // Te renvoie un tableau associatif au lieu d'un tableau doublement indexé, légérement plus optimisé
    	        $aum      = mysql_fetch_assoc($req1);
    	        $monnaie = $aum[0] - $products[0];
     
    	        $sql = 'UPDATE users SET Aum='.$monnaie.' WHERE id='.$_SESSION['id']; // Ici on prend une valeur DU SERVEUR et surtout pas une valeur venant du JavaScript
    	        $req = mysql_query($sql);
    	    }
    	    else
    	    {
    	        echo "Erreur : une des deux requêtes a échoué ou il n'y a aucun produit / user correspondant aux ids fournis";
    	    }
    	}
    }
    else{
     
    	echo "Vous n'avez pas l'autorisation d'accéder à la page.";
    }
    ?>
    Pour le javascript, je voudrais aussi rajoiter une boite de confirmation d'achat avec une alert, mais je ne sais pas ou la plasser dans la fonction.

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

Discussions similaires

  1. Ports séries virtuels
    Par Guillaume38 dans le forum Windows
    Réponses: 3
    Dernier message: 13/09/2017, 16h34
  2. creation d'une paire de port com virtuel
    Par KnightCoder dans le forum Windows
    Réponses: 1
    Dernier message: 17/09/2007, 12h00
  3. [WD11] Création Port COM Virtuel
    Par C-Faust dans le forum WinDev
    Réponses: 2
    Dernier message: 27/07/2007, 08h02
  4. piloter un port usb via un port serie virtuel?
    Par passion_info dans le forum C++Builder
    Réponses: 2
    Dernier message: 10/10/2006, 12h56
  5. [DRIVER]Développer drivers port serie virtuel
    Par f.colo dans le forum Windows
    Réponses: 9
    Dernier message: 21/02/2006, 08h41

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