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 :

Affichage différent en fonction de l'utilisateur


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Affichage différent en fonction de l'utilisateur
    Bonjour à tous et à toutes !

    J'ai un soucis avec mon code php, voici tout d'abord ma situation :

    Chaque jour mes utilisateurs reçoivent un mail. Ce mail contient un lien pour effectuer un "clic bonus", il peut en effectuer un chaque jour. Si il n'a pas encore effectué son clique et qu'il arrive sur la page j'affiche "Vous venez d'utiliser votre clic bonus" et je fais les requêtes en fonction, si il l'a déjà effectué j'affiche "Désolé ! Vous avez déjà utilisé votre clics bonus " .

    Clic bonus pas encore utilisé = 0
    Clic bonus utilisé = 1

    Voici mon 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
     
    $key = $_GET['key'];
    $id = $_GET['ani'];
    $subid = $_GET['subid'];
     
    require_once("./aideanimaux/connect.php"); // Connexion à la base de données
    $connexion = connect_db();
     
    $sql1 = "SELECT * FROM `jos_acymailing_subscriber` WHERE `key` LIKE '$key' AND `subid` LIKE '$subid'";
    $req1 = mysql_query($sql1) or die('Erreur dans la base de données<br>'.$sql1.'<br>'.mysql_error());
     
    while($data = mysql_fetch_assoc($req1))
    {
     
    	if($data['clic_bonus'] == 1 ) // Si le clic bonus a déjà été utilisé
    		{
    		echo '<div class=\'text_bonus\'>Désolé ! Vous avez déjà utilisé votre clics bonus </div>';
    		}
     
    	if($data['clic_bonus'] == 0 ) // Si le clic bonus n'a pas été utilisé
    		{
    		$sql2 = "SELECT * FROM animaux_liste WHERE id = '$id'";
    		$req2 = mysql_query($sql2) or die('Erreur dans la base de données<br>'.$sql2.'<br>'.mysql_error());
     
    		while($data = mysql_fetch_assoc($req2))
    		{
    		echo '<div class=\'text_bonus\'>Vous venez d utiliser votre clic bonus<div />';
    		}
     
    		$sql3 = "UPDATE `jos_acymailing_subscriber` SET `clic_bonus` = '1' WHERE `key` LIKE '$key' AND `subid` LIKE '$subid'";
    		$req3 = mysql_query($sql3) or die('Erreur dans la base de données<br>'.$sql3.'<br>'.mysql_error()); // Ajout de la participation de l'utilisateur
     
    		$sql4 = "UPDATE animaux_liste SET clic_int = clic_int + 3,clic_total = clic_int + clic_sms + clic_don + clic_vte,clic_rea_prct  = (clic_total / clic_objectif)*100 WHERE id = '$id' AND etat = 1";
    		$req4 = mysql_query($sql4) or die('Erreur dans la base de données<br>'.$sql4.'<br>'.mysql_error());
     
    		}
     
    }
     
     
     
     
    mysql_close();
    ?>
    Bon jusque là tout est clair, mon script fonctionne, mais pas tous chez mes utilisateurs , certains voient s'afficher le message comme quoi ils ont déjà utilisé leur clic bonus alors que ce n'est pas le cas. Chose encore plus étrange, le mauvais message s'affiche pourtant les traitements liés à son clic bonus fonctionne (c-a-d que le serveur affiche le message comme quoi l'utilisateur a déjà participé pourtant il effectue les requêtes comme si ce n'était pas le cas).

    Je ne m'explique pas cette différence, le php est un langage serveur donc tout le monde devrait voir la même chose et il ne devrait pas y avoir de différence entre les utilisateurs. Auriez-vous une idée ?

    Bon j'admets aussi que je ne suis pas vraiment un expert en php...

    Merci pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    mes remarques :
    ===> PROTEGE LA BDD des INJECTIONS SQL !!!
    1/ tu récupères les infos en GET (par l'URL, donc facilement modifiable par n'importe qui !)
    2/ => PROTECTION avec mysql_real_escape_string()
    3/ LIKE n'a d'intérêt que pour les comparaisons partielles -> remplace-les partout par le signe =
    4/ remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	if($data['clic_bonus'] == 0 ) // Si le clic bonus n'a pas été utilisé
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	elseif($data['clic_bonus'] == 0 ) // Si le clic bonus n'a pas été utilisé
    5/ j'enlèverais même le while, tout en testant qu'il n'y a qu'un résultat à la requête (l'utilisateur concerné)
    6/ quel est l'utilité de cette partie du code ?? Aucune à priori.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			$sql2 = "SELECT * FROM animaux_liste WHERE id = '$id';";
    			$req2 = mysql_query($sql2) or die('Erreur dans la base de données<br>'.$sql2.'<br>'.mysql_error());
     
    			while($data = mysql_fetch_assoc($req2))
    			{
    				echo '<div class=\'text_bonus\'>Vous venez d utiliser votre clic bonus<div />';
    			}
    Dernière modification par Invité ; 25/08/2011 à 13h36.

  3. #3
    Invité
    Invité(e)
    Par défaut
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    <?php
    // recuperation dans URL
    $key 	= trim($_GET['key']);
    $id 	= trim($_GET['ani']);
    $subid 	= trim($_GET['subid']);
     
    // 1er controle : donnees ok
    if($key!='' && $id!='' && $subid!='' && is_numeric($id) && is_numeric($subid))
    {
    	// protection contre injection sql
    	$key 	= mysql_real_escape_string($key);
    	$id 	= mysql_real_escape_string($id);
    	$subid 	= mysql_real_escape_string($subid);
     
    	// connexion
    	require_once("./aideanimaux/connect.php"); // Connexion à la base de données
    	$connexion = connect_db();
     
    	// recherche si existant
    	$sql1 = "SELECT * FROM `jos_acymailing_subscriber` WHERE `key` = '$key' AND `subid` = '$subid';";
    	$req1 = mysql_query($sql1) or die('Erreur dans la base de données<br>'.$sql1.'<br>'.mysql_error());
    	$user_nombre = mysql_num_rows($req1);
     
    	// 2eme controle : 1 seul resultat trouvé = ok
    	if($req1 && $user_nombre == 1) 
    	{
    		$data = mysql_fetch_assoc($req1);
    		// clic ou pas clic ?
    		if($data['clic_bonus'] == 1 ) // Si le clic bonus a déjà été utilisé
    		{
    			echo '<div class="text_bonus">Désolé ! Vous avez déjà utilisé votre clics bonus.</div>';
    		} 
    		elseif($data['clic_bonus'] == 0 ) // Si le clic bonus n a pas été utilisé
    		{
    			// Ajout de la participation de l utilisateur
    			$sql3 = "UPDATE `jos_acymailing_subscriber` SET 
    					`clic_bonus` = '1' 
    					WHERE `key` = '$key' AND `subid` = '$subid';";
    			$req3 = mysql_query($sql3) or die('Erreur dans la base de données<br>'.$sql3.'<br>'.mysql_error()); 
     
    			// modif dans animaux_liste
    			$sql4 = "UPDATE animaux_liste SET 
    					clic_int = (clic_int + 3),
    					clic_total = (clic_int + clic_sms + clic_don + clic_vte),
    					clic_rea_prct  = ((clic_total / clic_objectif)*100) 
    					WHERE id = '$id' AND etat = 1;";
    			$req4 = mysql_query($sql4) or die('Erreur dans la base de données<br>'.$sql4.'<br>'.mysql_error());
    			if($req3 && $req4) {
    				echo '<div class="text_bonus">Vous venez d\'utiliser votre clic bonus.<div />';
    			}
    		}
    	} // fin if resultat
    	else {
    		echo '<div class="text_bonus">Oups ! aucune correspondance trouvée<div />';
    	}
    	mysql_close();
    } // fin if recu
    else {
    		echo '<div class="text_bonus">Hola ! Mais tu te crois où ? C\'est pas la foire du slip ici !!<div />';
    }
    ?>
    ps : le dernier "commentaire" peut être modifié à ta guise

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    C'est claire le code est beaucoup clean comme ça, merci beaucoup pour ton aide !

    En tout cas chez moi ça marche parfaitement, je vais voir si c'est aussi le cas chez utilisateurs, mais je pense que ça devrait être bon.

    Il me reste pas mal de choses à apprendre niveau optimisation, je vais essayer d'être plus propre à l'avenir

    Ps: Je le trouve très bien comme il est le dernier commentaire

Discussions similaires

  1. Comportement du clavier différent en fonction de l'utilisateur
    Par nixmind dans le forum Administration système
    Réponses: 4
    Dernier message: 20/05/2015, 05h19
  2. Réponses: 2
    Dernier message: 06/03/2015, 12h31
  3. Affichage de données différent en fonction de la sélection d'une ComboBox
    Par seiryujay dans le forum Windows Presentation Foundation
    Réponses: 10
    Dernier message: 06/02/2009, 12h39
  4. affichage de texte en fonction de l'utilisateur
    Par Davik dans le forum VBA Access
    Réponses: 6
    Dernier message: 23/11/2006, 14h48
  5. Réponses: 2
    Dernier message: 25/07/2006, 09h41

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