Déclaration Variable (aucun enregistrement)

Fermé
YannOuch - 6 juin 2011 à 16:45
 YannOuch - 14 juin 2011 à 15:11
Bonjour,

Je développe actuellement une petit site, avec des tickets gratter, tirage au sort etc etc ..
J'ai mis une section "Clics Bonus", les bannières (annonceurs (task)) sont donc insérer via l'admin.
Un code leurs sont donc attribués, en fonction de leurs mise en route. (soir 1, 2, 3 etc ..)

Chaque clic sur ces annonceurs rapportent des points aux (futurs) membres.
Mais, parce qu'il y a un mais, sinon c'est pas marrant, il semble que l'enregistrement du clic ne s'effectue pas sur la bdd.
Donc en gros, le membre peut cliqué 20 fois, il sera crédité des points 20fois.
Pourtant la vérification est faite ! Je ne comprend pas.

Un aperçu du code de la page ou la vérification et donc attribution du/des points:

<?php
$t=intval($_POST['t']);
$id=intval($_POST['id']);
$sqs=mysql_query("SELECT * FROM tasks WHERE fn=$t ") or die(mysql_error());
$arr=mysql_fetch_array($sqs);
@extract($arr);
$sq=mysql_query("SELECT * FROM task$fcode WHERE fid=$id AND fdate=now()");

if(@mysql_affected_rows($sq))
{
echo"<font face=verdana color=ffffff>Erreur! Vous avez déjà visité ce site aujourd'hui.</font>";
exit;
}
if($fpaytype=='points')
{
$sql=mysql_query("SELECT ftotalclicks FROM users WHERE fid=$id") or die(mysql_error());
$arr=mysql_fetch_array($sql);
@extract($arr);
$tot=$ftotalclicks + $prise;
$sq=mysql_query("UPDATE users SET ftotalclicks=$tot WHERE fid=$id") or die(mysql_error());
}
if(mysql_affected_rows())
{
echo"<font face=verdana color=413a30>Merci d'avoir visité notre sponsor! Votre compte a été crédité!</font>";
$newvisit=$fvisits+1;
mysql_query("UPDATE tasks SET fvisits=$newvisit WHERE fn=$t");
mysql_query("INSERT INTO task$fcode (fip, fdate, ftime, fid) VALUES('$REMOTE_ADDR', now(), now(), $id)") or die(mysql_error());
mysql_query("INSERT INTO activity(fid, fdate, ftask) VALUES ($id, now(), 'ptc')");
}
else echo"error";
@mysql_free_result($sql);
?>


Je pense donc que $fcode a une valeur nulle ou une valeur incorrecte, ce qui fait qu'aucune table n'est trouvée. Et que donc rien n'est enregistré .. De là tout s'en suit !
Aucun enregistrement niveau clic, le membre fait ce qu'il veut et re-clique à souhait !

Une idée pour déclarée cette table correctement, qu'il la trouve, et que cet enregistrement soit fait ?

En vous remerciant par avance !
Amicalement, Yann.

A voir également:

13 réponses

Bonjour

if(@mysql_affected_rows($sq))

Avec ça, tu ne testes pas le nombre de lignes retourné par ta requête...
C'est avec if (mysql_num_rows($sq)!=0)...
0
Merci d'avoir pris letemps de lire jusqu'au bout, et de répondre.
Je vais testé ça en rentrant du boulot.
0
Bonsoir, j'ai tester à l'instant, et deux choix s'offrent à moi. Soit une erreur Mysql, soit le site apparaît comme tout le temps visité.

<?php
include("dbconnect.php");

$t=intval($_POST['t']);
$id=intval($_POST['id']);
$sqs=mysql_query("SELECT * FROM tasks WHERE fn=$t ") or die(mysql_error());
$arr=mysql_fetch_array($sqs);
@extract($arr);
$sq=mysql_query("SELECT * FROM task$fcode WHERE fid=$id AND fdate=now()");

if(mysql_num_rows($sq)!=1)
{
echo"<font face=verdana color=ffffff>Erreur! Vous avez déjà visité ce site aujourd'hui.</font>";
exit;
}
if($fpaytype=='points')
{
$sql=mysql_query("SELECT ftotalclicks FROM users WHERE fid=$id") or die(mysql_error());
$arr=mysql_fetch_array($sql);
@extract($arr);
$tot=$ftotalclicks + $prise;
$sq=mysql_query("UPDATE users SET ftotalclicks=$tot WHERE fid=$id") or die(mysql_error());
}
if(mysql_num_rows($tot)!=0)
{
echo"<font face=verdana color=413a30>Merci d'avoir visité notre sponsor! Votre compte a été crédité!</font>";
$newvisit=$fvisits+1;
mysql_query("UPDATE tasks SET fvisits=$newvisit WHERE fn=$t");
mysql_query("INSERT INTO task$fcode (fip, fdate, ftime, fid) VALUES('$REMOTE_ADDR', now(), now(), $id)") or die(mysql_error());
mysql_query("INSERT INTO activity(fid, fdate, ftask) VALUES ($id, now(), 'ptc')");
}
else echo"error";
@mysql_free_result($sql);
?>


J'ai du me trompé quelque part mais où ? o_Ô
Merci à vous "Le père", bonne soirée,
Amicalement, Yann.
0
Bonjour

Tu n'es pas logique...
if(mysql_num_rows($sq)!=1)
{
echo"<font face=verdana color=ffffff>Erreur! Vous avez déjà visité ce site


C'est s'il le nombre d'enregistrements est différent de zéro qu'il y a déjà eu une visite, pas s'il est différent de un !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
En effet.
J'ai donc modifier, puis tant quand vérifier aussi la bonne chose ..
J'ai donc :

if(mysql_num_rows($sq)!=0)


&

if(mysql_num_rows($sq))


Mais rien à faire ! Une erreur :
mysql_num_rows(): supplied argument is not a valid MySQL result resource in

Je met tout de même le code de la page précédente pour y voir plus clair :

    <?php
if(!$start) $start=0;
$count=5;
$sql=mysql_query("SELECT * FROM tasks WHERE fpaytype='points' order by prise desc");
$rows=mysql_num_rows($sql);
if($rows<=($start+$count))
$end=$rows;
else
$end=$start+$count;
for($i=$start;$i<$end;$i++)
	{
	mysql_data_seek($sql,$i);
	$arr=mysql_fetch_array($sql);
	extract($arr);
	$sq=mysql_query("SELECT fnum FROM task$fcode WHERE fid=$id AND fdate=now()");
if(!mysql_num_rows($sq))
{
	echo"<b>$fsitename</b><br><a href=visit_task.php?t=$fn&id=$id target=blank onclick='javascript:reloadpage(30)'>$fnote</a><br><b>Cette visite vous rapporte: </b>";
	if($fpaytype=='points') echo"$prise points<br><hr>";
else if($fpaytype=='usd') echo"\$$prise<br><hr>";	}
	}
	echo"<center><br>";
	if($start != 0)
	{
	$start=$start-$count;
echo"<a href=index.php?tp=$tp&st=$st&s=$s&start=$start>Précédent</a> | ";
$fl=1;
}
if($end<$rows)
{
if($fl)
$start=$start+$count+$count;
else $start=$start+$count;
echo"| <a href=index.php?tp=$tp&st=$st&s=$s&start=$start>Suivant</a>";
}
?>


En vous remerciant encore une fois,
Amicalement, Yann.
0
Si tu as ce message, c'est que la requête précédente a échoué

Je ne sais pas lequel de tes mysql_num_rows pose un problème. Alors ajoute un or die (mysql_error()) à chaque requête pour savoir laquelle a un problème :

$sql=mysql_query("SELECT * FROM tasks WHERE fpaytype='points' order by prise desc") or die (mysql_error());
$sq=mysql_query("SELECT fnum FROM task$fcode WHERE fid=$id AND fdate=now()") or die (mysql_error());
0
Re,
J'ai fait les vérifications pour les erreurs. Et la requête qui bloque :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /web/codesgratuits/www/taskfinish.php on line 41

Est donc celle-ci:
if(mysql_num_rows($sq))

if($fpaytype=='points')
{
$sql=mysql_query("SELECT ftotalclicks FROM users WHERE fid=$id") or die(mysql_error());
$arr=mysql_fetch_array($sql);
@extract($arr);
$tot=$ftotalclicks + $prise;
$sq=mysql_query("UPDATE users SET ftotalclicks=$tot WHERE fid=$id") or die(mysql_error());
}
if(mysql_num_rows($sq))
{
echo"";
}
else echo"error";
@mysql_free_result($sql);
?>


Celle qui attribue le point si aucun clic n'a été effectué auparavant.
0
Je viens de remarquer une grosse erreur...
Quand je t'ai dit au début qu'il fallait utiliser mysql_num_rows à la place de mysql_affected_rows, c'était après un SELECT ! Il fallait laisser le mysql_affected_rows après le UPDATE !!!
0
ARf ..
J'ai remplacer. Mais seul ce qui suit marche :
if(mysql_affected_rows())

En revanche avec ceci et le num_rows($sq)!=0
le clic peut se faire 15 fois d'affilé sans que la première vérif (ci-dessus) ne fonctionne.

Si j'ajoute à affected_rows une variable, alors j'ai une erreur mysql similaire à la précédente, toujours à la même ligne.
0
C'est normal qu'il ne faille pas mettre de variable en paramètre à mysql_affected_rows (du moins pas un résultat de requête)

Jusque là je ne m'étais intéressé qu'aux problèmes de mysql, pas à ceux de logique. J'ai l'impression que en fait tu n'avais besoin de mysql_affected_rows à aucun moment, mais j'aimerais voir l'état actuel de ton script avant de confirmer.
0
Bonjour,
Ah, je pensais qu'il fallait justement mettre un parametre à mysql_affected_rows.

J'ai mis les 4 fichiers .php dans un .zip à cette adresse :
http://www.codes-gratuits.org/script-Lepere.zip

Pour que vous puissiez voir le script en entier donc, et l'état actuel.
La première page renvoyant vers la seconde, la seconde étant incluse dans la 3ème le tout renvoyant vers la 4ème.

Merci beaucoup de votre aide.
Amicalement, Yann.
0
Vu. Je ne te promets pas une réponse rapide, je suis très occupé en ce moment. Peut-être quelques jours
0
Merci d'avoir pris le temps de répondre et de regardé par la suite. Je suis et serait patient.
Merci beaucoup de votre aide ainsi que de votre gentillesse !
Amicalement, Yann.
0
Coucou, me revoilà après un week-end bien occupé.

Maintenant je m'intéresse à la logique du programme et je ne comprends pas vraiment tout, parce que des instructions comme le extract que tu utilises font surgir des variables dont j'ignore tout.
Peux-tu répondre à ces questions :

1- Si l'utilisateur clique 15 fois d'affilée comme tu dis, a-t-il 15 fois le message "Merci d'avoir visité notre sponsor"

2- Est-ce que tu vois, dans la table task$fcode, l'enregistrement correspondant à l'utilisateur qui clique?

3- le champ fdate est-il de type DATE ou DATETIME ?
0
Bonjour, Bonjour,
Oui, un week-end de 3 jours vous avez raison d'en profiter ! =)

De mon côté j'en ai profité pour cherché et encore cherché !
L'erreur étais toute simple, et encore une fois une question de logique !

J'ai oublié de connecté ma bdd dès le début de mon script, soit au clic de l'utilisateur.

C'était comme si il cliqué sur un simple bouton : Rajouter un point à mon compte.

D'autre part j'en ai profiter pour modifier ces task$fcode par task'.$fcode.' raison ou tord j'ai des doutes.

En tout cas, vos messages m'ont bien fait comprendre que je manque de logique et surtout d'attention !

Merci beaucoup, Amicalement, Yann.
0