Bloquer les pages aux gens n'ayant pas acheté un produit

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Bloquer les pages aux gens n'ayant pas acheté un produit

Re: Bloquer les pages aux gens n'ayant pas acheté un produit

par amonet3 » 24 nov. 2011, 12:41

Merci beaucoup pour cette piste, je vais déja creuser de ce coté là !

:wink:

Re: Bloquer les pages aux gens n'ayant pas acheté un produit

par Cyrano » 23 nov. 2011, 07:57

Salut,
le principe de base est assez simple : il faut créer une table relationnelle entre cette table-ci et celle des utilisateurs enregistrés.

Le schéma relationnel part du fait qu'un utilisateur peut acheter de 0 à n vidéo, et qu'une vidéo peut être achetée par 0 à n utilisateurs. On ne peut donc pas mettre d'indicateur de l'un directement dans l'autre, par contre on peut avoir entre les deux une table qui indique cela : elle comportera une clé primaire composite constituée de deux clés étrangères : l'identifiant de l'utilisateur d'une part, et l'identifiant de la vidéo d'autre part. Éventuellement on pourrait rajouter dans cette table relationnelle une colonne date_achat.

Du coup, lorsque l'utilisateur se connecte, on retrouve la liste de ses commandes par relation à travers cette table relationnelle. Très schématiquement, ça pourrait ressembler à ça :
+--------------+         +-----------------+         +----------------+
| utilisateur  |         | achats          |         | video          |
+---------+----+         +------------+----+         +-----------+----+
| utl_id  | PK |---------| utl_id     | PK |---------| vid_id    | PK |
| utl_nom |    |         | vid_id     | PK |         | vid_title |    |
| ..      |    |         | date_achat |    |         | ...       |    |
+--------------+         +------------+----+         +-----------+----+
Le blocage devient alors très simple : lorsque l'utilisateur est connecté, on établit a liste des vidéos qu'il a acheté dans la table achats. Si on ne trouve pas celle dont il tente d'afficher la page, on le redirige.

Bloquer les pages aux gens n'ayant pas acheté un produit

par amonet3 » 22 nov. 2011, 15:30

Bonjour,

Ca n'est pas réellement un problème, mais plutôt une demande d'aide pour un script particulier.
Ce site vends des vidéos en streaming et en téléchargement. Lorsqu'un client achète une vidéo, un lien apparait dans la page "Mes Commandes". Ce lien emmène vers une page web. Mais si cette personne donne l'url de la page a quelqu'un d'autre qui est loggé sur le site, il peut quand meme regarder la vidéo meme si il ne l'a pas achetée.

Je voudrais donc écrire un script pour chacune de ces pages qui aille voir dans la base de données si l'utilisateur a acheté la vidéo. Et si c'est le cas, le laisser sur la page, sinon l'envoyer vers une page lui expliquant qu'il n'a pas acheté la vidéo.


Je vous colle le contenu de la table et d'une ligne de la table contenant les commandes :

Code : Tout sélectionner

# # Table structure of table `download_orders` # CREATE TABLE `download_orders` ( `id` int(11) NOT NULL auto_increment, `checkid` varchar(255) NOT NULL default '', `title` varchar(255) NOT NULL default '', `purchased` datetime NOT NULL default '0000-00-00 00:00:00', `files` varchar(255) NOT NULL default '', `downloads` smallint(1) NOT NULL default '3', `code` varchar(20) NOT NULL default '', `email` varchar(255) NOT NULL default '', PRIMARY KEY (`id`), KEY `code` (`code`,`email`) ) ENGINE=MyISAM AUTO_INCREMENT=968 DEFAULT CHARSET=utf8 ; # # Data contents of table `download_orders` # INSERT INTO `download_orders` VALUES (1, 'fd99924dcd727b636f72ca309719d64c', 'Le principe de précaution - Vidéo complète (F012-VC)', '2011-01-31 18:21:16', 'URL DE LA PAGE', 10000, 'cmh5KpSiHE', '******@*****.com');
Et voici ce que j'ai commencé à penser. Attention je n'ai rien réellement codé, mais juste mis sur le "papier" comment je comptais structurer le code... Je suis un gros noob en codage php/mysql donc soyez indulgents s'il vous plait.
Grosso-modo, je pensais faire une détection sur le nom du produit (ici 'Le principe de précaution - Vidéo complète (F012-VC)') par rapport à l'adresse mail de l'utilisateur connecté (vu que je ne vois pas ou est inscrit le nom d'utilisateur) et le rediriger ou non.

Code : Tout sélectionner

<?php $cnx = mysql_connect( "localhost", "root", "" ); //sélection de la base de données: $db= mysql_select_db( "DB" ); //création de la requête SQL: $sql = "SELECT * je ne sais pas quoi mettre ici"; //exécution de notre requête SQL: $requete = mysql_query( $sql, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" ); wp_get_current_user(); //TABLE: download_orders echo 'User email: ' . $current_user->user_email . '<br />'; if($title = 'Le principe de précaution - Module 1 (F012-M1)'){ echo 'OK'; } elseif($title = 'Le principe de précaution - Vidéo complète (F012-VC)'){ echo 'OK2'; } else{ echo 'changement de page'; } ?>
Merci d'avance pour votre aide !!!