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

PHP & Base de données Discussion :

Acheter de nouveau un article déjà acheté


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Par défaut Acheter de nouveau un article déjà acheté
    Bonjour,

    Je vous présente le problème. J'ai deux tables « Articles » et « Commandes ». Dans l'état actuel, on ne peut acheter qu'une fois un article avec une quantité X. Je voudrais pouvoir supprimer cette condition et autoriser le client à acheter une nouvelle fois une quantité Y de l'article déjà acheté. Quand je supprime le test incriminé, je ne serai pas redirigé vers la page de paiement étant donné que l'état de la commande est marqué « payé ». Dans le panier, j'aurai l'article acheté une seconde fois avec la nouvelle quantité Y remplaçant la première quantité X. Or, je souhaite avoir dans mon panier deux lignes distinctes : la quantité X du premier achat avec le statut « payé » ou « en cours » et la quantité Y du deuxième achat avec le statut « payé » ou « en cours ».

    Autre chose, si les deux commandes sont payées, vaudrait-il mieux afficher dans le panier une ligne avec les quantités X + Y ou bien deux lignes correspondant aux quantités X et Y ?

    Auriez-vous une idée de comment réaliser cela ? Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faudrait nous montrer les parties de code concernant ton panier et pointer précisément les éléments qui te posent problème.
    Tu as tout écrit au conditionnel, ce sont des suppositions que tu fais ou ce sont les cas que tu rencontres réellement ?

    Tu indiques notamment que ton panier contient des articles "payés". Dans la logique d'un panier, une fois le paiement effectué, le panier est vide.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Par défaut
    J'ai employé panier pour désigner la page « Mes commandes » listant les différents articles achetés (désignation de l'article, quantité, total, statut (payé ou en cours)). Tout ce que j'avais décrit est le résultat obtenu après la réalisation d'un deuxième achat.

    Lorsque je clique sur le bouton « Acheter un article », c'est la page PHP ci-dessous qui sera appelée. La ligne 21 empêche le rachat d'un article déjà commandé. Si l'article est commandé et pas encore payé, je peux le commander de nouveau mais j'obtiens une commande avec la nouvelle quantité qui remplace l'ancienne quantité. Si je supprime le test à la ligne 21, je peux commander de nouveau un article, mais le site « pense » que l'article est déjà payé (statut payé qui n'a pas été réinitialisé) et m'affiche la commande avec la nouvelle quantité choisie et le statut payé (pas de redirection vers la page de paiement).
    Code PHP : 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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    <?php
    require_once(dirname(dirname(__FILE__)) . '/app.php');
     
    $id = abs(intval($_GET['id']));
     
    $team = Table::Fetch('team', $id);
    if ( !$team || $team['begin_time']>time() ) {
        Session::Set('error', 'Cet élément est invalide');
        Utility::Redirect( WEB_ROOT . '/index.php' );
    }
     
    $ex_con = array(
            'user_id' => $login_user_id,
            'team_id' => $team['id'],
            );
    $order = DB::LimitQuery('order', array(
        'condition' => $ex_con,
        'one' => true,
    ));
     
    if ($order && $order['state']!='unpay') {
        Session::Set('error', 'Vous avez déja acheté ce deal! Revenez demain pour de nouvelles affaires');
        Utility::Redirect( WEB_ROOT . "/team.php?id={$id}"); 
    }
     
    if ( $_POST ) {
        need_login(true);
        $table = new Table('order', $_POST);
        if ( $table->quantity == 0 ) {
            Session::Set('error', 'Le montant ne peut être inférieur à 1');
            Utility::Redirect( WEB_ROOT . "/deals/buy.php?id={$team['id']}");
        }
        elseif ( $team['per_number'] > 0 && $table->quantity > $team['per_number'] ) {
            Session::Set('error', 'Vous avez dépassé la limite de 1 achat');
            Utility::Redirect( WEB_ROOT . "/deals/buy.php?id={$team['id']}");
        }
     
        if ($order && $order['state']=='unpay') {
            $table->id = $order['id'];
        }
     
        $table->user_id = $login_user_id;
        $table->team_id = $team['id'];
        $table->city_id = $team['city_id'];
        $table->express = ($team['delivery']=='express') ? 'Y' : 'N';
        $table->fare = $table->express=='Y' ? $team['fare'] : 0;
        $table->price = $team['team_price'];
        $table->credit = 0;
     
        if ( $table->id ) {
            $eorder = Table::Fetch('order', $table->id);
            $table->origin = ($table->quantity * $team['team_price']) + ($team['delivery'] == 'express' ? $team['fare'] : 0) - $eorder['card'];
        } else {
            $table->create_time = time();
            $table->origin = ($table->quantity * $team['team_price']) + ($team['delivery'] == 'express' ? $team['fare'] : 0);
        }
     
        $insert = array(
                'user_id', 'team_id', 'city_id', 'state', 
                'fare', 'express', 'origin', 'price',
                'address', 'zipcode', 'realname', 'mobile', 'quantity',
                'create_time', 'remark',
            );
     
        if ($flag = $table->update($insert)) {
            $order_id = abs(intval($table->id));
            Utility::Redirect(WEB_ROOT."/orders/check.php?id={$order_id}");
        }
    }
     
    //each user per day per buy
    if (!$order) { 
        $order = json_decode(Session::Get('loginpagepost'),true);
        settype($order, 'array');
        if ($order['mobile']) $login_user['mobile'] = $order['mobile'];
        if ($order['zipcode']) $login_user['zipcode'] = $order['zipcode'];
        if ($order['address']) $login_user['address'] = $order['address'];
        if ($order['realname']) $login_user['realname'] = $order['realname'];
        $order['quantity'] = 1;
    }
    //end;
     
    $order['origin'] = ($order['quantity'] * $team['team_price']) + ($team['delivery']=='express' ? $team['fare'] : 0);
     
    include template('team_buy');

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Difficile de debarquer au milieu d'un script de ce genre.
    D'ou vient-il ?

    Si je le lis bien, en modifiant la ligne 38 comme ça, cela augmentera la quantité s'il existe déjà un article "unpay"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ($order && $order['state']=='unpay') {
            $table->id = $order['id'];
            $table->quantity += $order->quantity
        }
    A tester.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Avatar de Wachter
    Homme Profil pro
    Développeur
    Inscrit en
    Octobre 2008
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 404
    Par défaut
    Oui, c'est difficile de maintenir un code déjà écrit et surtout pas commenté. C'est un site qui propose l'achat de services en ligne.

    J'ai effectué la modification que vous avez proposée qui me paraît logique, mais j'obtiens hélas une commande avec la nouvelle quantité choisie...

    À la ligne 26, j'ai pensé qu'il faudrait rajouter une entrée dans la table des commandes avec le statut « non payé ». Cette entrée correspondra à l'article à acheter de nouveau.

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il faudrait tout le script et faire du debugage dessus pour comprendre comment il fonctionne.
    Bref c'est un travail conséquent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. PS3 à réparer ou acheter de nouveau ?
    Par binouzzz19 dans le forum Consoles
    Réponses: 9
    Dernier message: 11/09/2009, 18h38
  2. [ACHAT] Acheter le nouveau macbook maintenant ?
    Par Invité dans le forum Apple
    Réponses: 14
    Dernier message: 21/10/2008, 13h49

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