Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/08/2011, 11h47   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
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 :
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
topoto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 13h17   #2
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
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 :
	if($data['clic_bonus'] == 0 ) // Si le clic bonus n'a pas été utilisé
par :
Code :
	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 :
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 />';
			}
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 13h43   #3
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Code :
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
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/08/2011, 22h32   #4
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
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
topoto est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h39.


 
 
 
 
Partenaires

Hébergement Web