Besoin d'aide pour terminer un module Joomla

ViPHP
ViPHP | 4039 Messages

09 janv. 2008, 17:14

Ah ,la fatigue..
donne nous juste la ligne 29, pour voir. Et avant toute chôse, regarde si tu n'as pas oublié de point-virgule à la fin de la ligne 28.

Mais le mieux est d'aller dormir. Pourquoi est-ce urgent, de toute façon ? Si c'est pour débuter, ça peut durer longtemps..
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 1996 Messages

09 janv. 2008, 17:26

montres nous ta ligne 29.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 1996 Messages

09 janv. 2008, 17:27

Ah ,la fatigue..
donne nous juste la ligne 29, pour voir. Et avant toute chôse, regarde si tu n'as pas oublié de point-virgule à la fin de la ligne 28.

Mais le mieux est d'aller dormir. Pourquoi est-ce urgent, de toute façon ? Si c'est pour débuter, ça peut durer longtemps..
C'est vrai qu'en PHP ca fais 2 ans que je débute :lol:
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 10 Messages

09 janv. 2008, 17:39

Bon, j ai tout nettoyé, le code est clean, du moins il n entraine plus de messages d erreurs.

Par contre, toujours le meme probleme...

Dans ce cas il detecte systematiquement une Tricherie ( Timestamp inferieur au neceesaire)

Pour les besoin du test je l ai mis a 3 secondes.

Voila le code ( desole j ai mis peut etre pas mal de notation mais c est ainsi que j apprend)
<?php

//no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );

$maintenant = time(); 
$credit = credit;


//requete à vérifier

$requete = "SELECT `TIMESTAMP` FROM `jos_users` WHERE `id`= $my->id";
$resultat_sql = mysql_query ($requete);
$resultat = mysql_fetch_row ($resultat_sql);
$enregistrement_timestamp = $resultat[0]; //donnée en provenance de ta base
echo 'Timestamp enregistré = '.$enregistrement_timestamp ; 


$maintenant_moins_trois_minutes = $maintenant - (3*1); // 3 fois 1 secondes pour le test



//si LE DERNIER TIMESTAMP DATE DE PLUS DE TROIS MINUTES
if ($enregistrement_timestamp > $maintenant_moins_trois_minutes)
//FIN DE si LE DERNIER TIMESTAMP DATE DE PLUS DE TROIS MINUTES


{


//si + DE 3 MINUTES ALORS RAJOuT DE CREDITS

         //APPEL DE LA BASE POUR CHARGER LE MONTANT DU CREDIT SUR LE COMPTE DU MEMBRE
$database ->setQuery ( "SELECT `credit` FROM `jos_users` WHERE credit = $my->id");
         //FIN D APPEL DE LA BASE POUR CHARGER LE MONTANT DU CREDIT 
         
                //AJOUT DES 50 CREDITS
$credit = $database->loadResult() + 50;
                //FIN D AJOUT DES 50 CREDITS
               
                      //UPDATE DES CREDITS           
$database->setQuery ( "UPDATE `jos_users` SET `credit` = $credit  WHERE id = $my->id");
$database->query();
                      //FIN D UPDATE DES CREDITS  
 

                           //SI NON MEMBRE: CONECTION NECESSAIRE

if (!$my->id) 
{
 echo 'INVITE : CONNECTEZ VOUS POUR EN PROFITER';
} 
                           //FIN DE SI NON MEMBRE

                                //SI  MEMBRE ECRIRE PHRASE
else 

{
echo "<span style=\"color:red; font-size:150%; \"> <b> $my->username </b> </span>, ATTENTION A BIEN RESPECTER LA PROCEDURE POUR BENEFICIER DE L OFFRE";
} 
                                //FIN DE SI  MEMBRE ECRIRE PHRASE
                                

//FIN DE si LE DERNIER TIMESTAMP DATE DE PLUS DE TROIS MINUTES

//si LE DERNIER TIMESTAMP DATE DE PLUS DE MOINS DE TROIS MINUTES: TRICHERIE
}
else
{


echo "<span style=\"color:red; font-size:150%; \"> <b> $my->username </b> </span>, TRICHERIE DETECTEE !!!";

} 
//FIN DE si LE DERNIER TIMESTAMP DATE DE PLUS DE MOINS DE TROIS MINUTES ; TRICHERIE

?> 

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

09 janv. 2008, 18:00

Il n'y a jamais trop de commentaires dans un code :)

Bon.. on va reprocéder par étape. Tu ne rentres pas dans ton if(), c'est que ton test est faux, donc que la valeur de $enregistrement_timestamp est inférieure ou égale à celle de $maintenant_moins_trois_minutes.

En partant du principe que le problème ne peut pas provenir de l'instruction "time() - 3*60" qui est assez basique, il faut regarder du côté de $enregistrement_timestamp.

$enregistrement_timestamp contient la valeur de $resultat[0], qui contient le résultat de la requête, c'est à dire la valeur du champ 'TIMESTAMP' de la table "jos_users" pour l'id spécifié.

Déjà, c'est franchement pas judicieux d'avoir nommé ton champ "timestamp", il me semblait avoir lu plus haut que tu l'avais nommé "temps" dans un alter table, ce qui était bien mieux que d'utiliser un mot clé SQL. Ceci étant, le problème viendrait donc de la valeur de ce champ.
Il te faut donc regarder quand est-ce qu'il est mis à jour, et avec quelle valeur.

A priori, dans l'update qui met à jour le crédit, tu devrais également mettre à jour le timestamp pour que le crédit a été enregistré... Il me semble que tu passes par un trigger (j'arrive pas à retrouver le message ou tu l'as mentionné), c'est donc de ce coté qu'il te faut regardé. Est-il bien déclenché, quelle valeur utilise-t-il, etc. :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 10 Messages

09 janv. 2008, 18:20

Desole je me suis planté j ai fait un post a cote de la cuvette ( je peux pas l effacer :( )

Merci de ta reponse.... Mais moi y en a pas tout comprendre. Php encore petit negre pour missa Wink

Je pense pour etre serieux, que le probleme vient de ma creation de colonne. Je l ai donc suppriée et remplacer en envoyant cette requete:

ALTER TABLE jos_users ADD minutes TIMESTAMP NOT NULL

Ais je oublie un truc dedans?

Sur php myadmin, ca donne ca:

temps timestamp ON UPDATE CURRENT_TIMESTAMP Oui CURRENT_TIMESTAMP

En fait ca ne met pas a jour le nouveau timestamp (quand je regarde sur le frontend via echo )...





EDIT : Personne ne peux m aider ? Je tourne en rond

Edit Bis

Bah, vous m avez laisse tomber les mecs? N y a t il pas de solutions a mon probleme? S il vous plaiiiiiiitttt :lol: