Commpteur sql

Mammouth du PHP | 687 Messages

17 mars 2012, 15:12

Bonjour,
je souhaite mettre en place un systeme de parrainage sur mon site qui aura pour but d'afficher un code après avoir parrainés 3 personnes.
J'ai donc créé une table :
CREATE TABLE IF NOT EXISTS `eden_parrainage` (
  `mail_parrain` varchar(250) NOT NULL,
  `mail_filleuil` varchar(250) NOT NULL,
  `count` int(11) NOT NULL,
  `code` int(11) NOT NULL,
  UNIQUE KEY `mail_filleuil` (`mail_filleuil`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Puis un formulaire:
<form action="insert_parrainage.php" method="post"> 
<table border="0" cellspacing="0" cellpadding="0" width="100%" align="center">
<tbody>
<tr>
<td>
<table border="0" cellspacing="1" cellpadding="1" width="100%" align="center">
<tbody>
<tr>
<td>Mon Mail</td>
<td><input name="mail_filleuil" size="35" type="text" /></td>
</tr>
<tr>
<td>Mail de mon Parrain</td>
<td><input name="mail_parrain" size="35" type="text" /></td>
</tr>
<tr>
<th colspan="2"><input type="submit" value="Parrainage" /></th>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</form>
Et pour finir l'insertion dans la base :
<?php

//--------les includes des fonctions permettent le bon fonctionnement du site-------------- 
include "include_fns.php";
//-----------------------------------------------------------------------------------------
//------------------------ recuperation des variables et formatage ------------------------
  $mail_parrain = $_POST['mail_parrain'] ;
  $mail_filleuil = $_POST['mail_filleuil'] ;
  $code = round(time()/1500000);
  $compteur= 'JE NE SAIS PAS COMMENT FAIRE POUR CETTE PARTIE';
//-----------------------------------------------------------------------------------------

//--------------------------------- si la variable n'existe pas ---------------------------
   if (!$_POST['mail_parrain'] || !$_POST['mail_filleuil'] ) {
	echo "<h1>".ECHEC_ABONNEMENT."</h1>";
	echo "<div id=\"message\">".IMPOSSIBLE_POURSUIVRE_SAISIE_INCOMPLETE." !<br />";
       	echo "[  <a href=\"javascript:history.go(-1)\">".RETOUR."</a>  ]</div><br />";
//-----------------------------------------------------------------------------------------

//-------------------- affichage du bas de page et quitte le programme --------------------
	include "bas.php";	
	exit();
   }
//----------------------------------------------------------------------------------------- 

//----------------- connexion db requete sql sur table parrainage -------------------------
  $conn = db_connect();
  $query = "insert into parrainage values ('$mail_parrain','$mail_filleuil','$compteur', '$code')";
  $resultat = mysql_query($query);
//-----------------------------------------------------------------------------------------

//---------------------- si l'insertion est correcte alors message information ------------
    if ($resultat) {	
	echo "<h1>".CONFIRMATION_ABONNEMENT."</h1>";
	echo "<div id=\"message\">".CONFIRMATION_ABONNEMENT_TEXTE."...<br />";
       	echo "<img src=\"$dir_image/time.gif\" alt=\"\" /></div><br />";
//-----------------------------------------------------------------------------------------

//-------------------- affichage du bas de page et quitte le programme --------------------
	include "bas.php";	
	echo "<meta http-equiv=\"refresh\" content=\"3;url=index.php\" />";
	exit();
    }
//-----------------------------------------------------------------------------------------

//---------------si l'insertion n'est pas correcte alors message information --------------
    else {
	echo "<h1>".ECHEC_ABONNEMENT."</h1>";
	echo "<div id=\"message\">".ECHEC_ABONNEMENT_TEXTE." !<br />";
       	echo "[  <a href=\"javascript:history.back()\">".RETOUR."</a>  ]</div><br />";	
//-----------------------------------------------------------------------------------------

//-------------------- affichage du bas de page et quitte le programme --------------------
      include "bas.php";	
      exit();
   }
//-----------------------------------------------------------------------------------------
?>
Je pense donc qu'il faut initialiser un compteur pour que par exemple monsieur X qui parraine 3 personnes DIFFERENTES puisse avoir son code...
Problème c'est comment?
Idem, lorsque Monsieur X a utilisé son code, celui-ci ne sera plus valide...
Comment faire s'il vous plait?

Merci par avance.

Cordialement.

Mammouth du PHP | 687 Messages

18 mars 2012, 18:21

personne ne sait?

Mammouth du PHP | 687 Messages

18 mars 2012, 18:21

personne ne sait?

Mammouth du PHP | 687 Messages

18 mars 2012, 19:12

Bon j'ai avancé un peu:

j'ai modifié la base de données comme ceci:
CREATE TABLE IF NOT EXISTS `parrainage` (
  `pseudo_parrain` varchar(250) NOT NULL,
  `pseudo_filleuil` varchar(250) NOT NULL,
  `id` int(11) NOT NULL,
  UNIQUE KEY `mail_filleuil` (`pseudo_filleuil`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
J'ai ensuite utilisé un lien de parrainage avec redirection (http://127.0.0.21/SITE/index.php?affich ... rrain=toto) vers le formulaire d'inscription pour le filleul avec la fonction $_GET et j'affiche le pseudo du parrain:
	echo "<tr><td colspan=\"1\"><b>Votre Parrain est :</b></td><td><input type=\"text\" size=\"22\" name=\"pseudo_parrain\" value=\"".$_GET['pseudo_parrain']."\"class=\"inputTextContact\"  />  </td></tr>";
c'est ensuite envoyé vers la base sql après validation du formulaire :
	  $conn = db_connect();
	  $sql_parrainage = "insert into parrainage values ('$pseudo_parrain', '$login_user', '$id')";
	  
  	  $result = mysql_query($sql_parrainage, $conn);
Ma question est comment gérer la suite...
Par exemple je souhaite qu'un code automatique soit attribué au parrain après avoir parrainé 3 personnes, puis une fois utilisé ce code est inutilisable?
Mais comment faire?


Merci beaucoup pour votre aide

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2012, 19:37

Bah en fait ça dépend de ce que tu veux faire... si c'est juste compter le nombre de filleuls d'un parrain, une simple table idParrain/idFilleul serait suffisante pour stocker tous les filleuls qui ont désignés leur parrain. Dès lors, un simple COUNT(idFilleul) FROM taTable WHERE idParrain = XX, te donnerait le nombre de filleuls associés.

Autre solution, mais qui ne donne pas la liste des filleul dans ta table d'utilisateurs, tu créer une colonnes dans laquelle tu stockes le nombre de filleuls qui l'ont déclaré et tu l'incrémente de 1 à chaque nouveau filleul.

Quant à la validité du code, ben si tu ne peux en avoir qu'un seul, suffit d'un flag dans ta table qui dit s'il a été prit ou non. Si jamais j'ai un nouveau code tous les 3 filleuls qui débarquent, faut une table pour les stocker avec un flag qui dira s'il a été consommé ou pas :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 687 Messages

18 mars 2012, 19:53

Waouh!
Merci pour cette réponse détaillée.
Je vais essayer de faire la première solution qui consiste à compter les filleuls et à faire un flag (je ne sais pas trop ce que c'est) sur la table...
Alors combien faut il créer de tables?
Celle que j'ai créer peut servir ou elle est nul?

Merci vraiment

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2012, 20:01

Alors un flag, c'est tout simplement une information (en général un booléen oui/non) qui va te permettre de savoir si quelque chose s'est passé ou non. Je n'en connais pas l'origine, mais je pense que c'est lié à ces boites aux lettres aux usa sur lesquelles le facteur relève un petit drapeau pour indiquer qu'il a déposé du courrier, ce qui t'évite de sortir pour rien si tu vois qu'il n'y en a pas :)

Bref...

Tu peux effectivement réutiliser ta table, la seule différence avec celle que je te propose, c'est qu'au lieu de stocker les pseudos, il vaut mieux stocker les id. Comme ça le jour où quelqu'un te demande à changer de pseudo, ça casse pas tout ton système :) (les utilisateurs demandent rarement à changer d'id ;))

Quant au nombre de tables, ben il dépend de ce que tu souhaites mettre en place... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 687 Messages

18 mars 2012, 20:08

Mdr. Merci pour cette explication qui mine de rien m'a permis de comprendre la chose. ;-)
Ok, alors petites questions (encore. Lol) comment faire pour générer un id? L'id parrain et l'id filleul doivent être différents?

Pour résumer il me suffit de réutiliser ma table en ajoutant un champs pour le flag et de remplacer ou d'ajouter le champs pseudo par id
Ce qui m'amene à une table :
Id_parrain
Id_filleul
Flag

Et que fais-je avec la génération du code?
Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2012, 21:37

Ben en fait je suis parti du principe que tu devais avoir une table d'utilisateur qui devait contenir un id, un pseudo et surement plein d'autre informations... et je proposais donc une table avec dans un champ l'id de l'utilisateur désigné comme parrain et l'id de l'utilisateur filleul, mais après réflexion, on peut faire plus simple.

En effet, un utilisateur n'ayant à priori qu'un seul parrain, il suffit de rajouter dans ta table utilisateur une colonne "id_parrain" qui contiendra l'id de l'utilisateur parrain (quand il y en a un). Le principe reste le même : au moment où je m'inscrit, si je renseigne le pseudo d'un parrain (et qu'il existe en base) tu stockes son id dans ma fiche à moi.

Ca c'est pour la relation parrain/filleul.

Après pour le code promo, ça dépend de ce que tu veux faire : combien de code est-ce que je peux avoir en même temps ? est-ce un code pour 3 filleuls et ça s'arrête là ? est-ce tous les 3 filleuls ? est-ce un ce un code pour 3 filleuls, puis un pour 10, puis ... ? Est- ce que c'est un code qui doit être propre à chaque utilisateur ou commun ? ... les tables seront à modifier/ajouter en fonction :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 687 Messages

18 mars 2012, 21:52

Ah oui en effet j'ai une table utilisateur avec l'id, pseudo, coordonnées etc...
Des qu'une personne s'inscrit grâce au lien fourni par son parrain il vient s'inscrire dans la même table que le parrain mais du coup possède un id diffèrent...

Pour ce qui est du code c'est un code unique valable 1 seul fois suivant e principe:
Je parraine 3 personnes alors code puis génération d'un nouveau code à chaque fois que je parraine 3 nouvelle personne.
Tu vois un peu le truc?

Mammouth du PHP | 687 Messages

19 mars 2012, 14:29

Bon alors j'ai réussi à gérer les inscriptions avec la génération d'id.
J'ai donc deux tables:
- une pour gérer les utilisateurs avec un id_parrain attribué automatiquement comme ça tout le monde peut être parrain.
- une qui permet de gérer les filleul (parrainage par lien et récupération des $_GET pour faire correspondre le parrain et le filleul dans la table parrainage.

Mon soucis est de savoir comment générer un code aléatoire (peut avec un rand() ?) des que l'utilisateur parraine 3 nouvelles personnes et des utilisation de ce code il n'est plus valable :
Exemple:
Je parraine 3 personnes alors je bénéficie d'un code avantage qui est utilisable qu'une seul fois mais je bénéficie d'un nouveau code à chaque fois que je parraine 3 nouvelles personnes.

Voilà un peu commen je voyais les choses. Le truc c'est que je ne sais pas trop comment créer et mettre en place ce système...

Merciiii...

Mammouth du PHP | 687 Messages

19 mars 2012, 22:43

Personne pour m'aiguiller?

Mammouth du PHP | 687 Messages

20 mars 2012, 22:57

Ryle? Une petite idée?

Merci

Mammouth du PHP | 687 Messages

22 mars 2012, 03:26

:-( toujours pas d'idées?