Besoin d'aide pour terminer un module Joomla

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Besoin d'aide pour terminer un module Joomla

Desole

par sebix » 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:

par Ryle » 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. :)

Voila !

par sebix » 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

?> 

par Aureusms » 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:

par Aureusms » 09 janv. 2008, 17:26

montres nous ta ligne 29.

par Berzemus » 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..

Merci mec!

par sebix » 09 janv. 2008, 17:04

Bon, je n ai toujopurs pas dormi et j ai encore remue tout ca dans tous les sens.... hihihi

Ca ne fonctionne toujours pas.... J obtiens le message suivant

Parse error: syntax error, unexpected T_VARIABLE in W:\var\www\joomla1-0-13fr\modules\mod_credit50bis.php on line 29

Je suis alle voir sur le net avant de passer pour un gros naze et voici ce que j ai trouvé:
variable non declarée qui n existe pas.

cela m ettonne car elle fait reference a la colonne credit qui fonctionne...

SUIS JE EN TRAIN DE DEVENIR FOU ??? 24 HEURES DEVANT UN PC ET - oui ca y est- 2 LITRES DE CAFE auraient ils raison d une ame saine de jeune webmaster Joomlaîen ??

Ma que passa ?? Que passa??

Je nettoie le code et je renvoie ca pour que vous voyez tous mon joli bouzin

:D

merci a vous de votre aide!

Re: Je comprends

par Aureusms » 09 janv. 2008, 15:43

Je reprends ce que dit Ryle :
Change cette condition
$enregistrement_timestamp <= $maintenant_moins_trois_minutes
. en
$enregistrement_timestamp > $maintenant_moins_trois_minutes
De ce fait, si ta base te retourne pas bien $enregistrement_timestamp tu n'auras pas l'augmentation des credits.

juste après les lignes ci-dessous rajoute la dernière ligne :
$requete = "SELECT `TIMESTAMP` FROM `jos_users` WHERE `id`= $my->id";
$resultat_sql = mysql_query ($requete);
$resultat = mysql_fecth_row ($resultat_sql);
$enregistrement_timestamp = $resultat[0]; //donnée en provenance de ta base 
echo 'Timestamp enregistré = '.$enregistrement_timestamp ;
Ainsi tu pourras vérifié si ta base retourne une vrai et bonne valeur.
Sinon le problème peux venir de la syntaxe de la requête ou de la configuration de la table (que je rappelle m'est inconnu)

PS. Dors un peu et moi aussi je suis autodidacte!

Je comprends

par sebix » 09 janv. 2008, 12:43

Je comprends ce que tu veux dire mais tu sais apres une nuit blanche a tripoter le code et a boire 1 kilo de cawa, ja i un peu de problemes... :shock:

les valeurs enregistres dans le Timestamp sont coherentes. mais je devrait parler au singulier car seule la derniere valeur reste.

C est a n y rien comprendre. Ca me faisait deja ca toute la nuit et je n ai pas reussi a les stocker.

Mystere et boules de gomme !

En meme temps je suis un peu trop autodidace je pense :lol:


EDIT : Je vais devenir fou!!! Depuis hier apres midi que j y suis!!!

Bref, ca ne marche toujours pas... :cry:

RE EDIT: Apres ma nuit blanche la je pioche et repioche et .... rien....

Personne ne peux me mettre sur la piste? :arrow: :arrow: :roll:

par Ryle » 09 janv. 2008, 12:36

Procède logiquement... qu'est ce qui devrait empêcher ton code de s'exécuter ?
- C'est le fait d'entrer ou pas dans le if()
Si le code est exécuté, c'est donc qu'il rentre dans le if(). Pourquoi rentre-t-il dans le if() ?
- Parce que le test est vrai

C'est donc que $enregistrement_timestamp <= $maintenant_moins_trois_minutes.
Comme on est un peu comme saint thomas, affiche les valeurs pour voir si c'est vraiment le cas. Assure-toi qu'elles sont cohérente.

A priori ton $maintenant_moins_trois_minutes est correct, le soucis vient donc de $enregistrement_timestamp. Quelle est sa valeur ? d'où vient-elle comment est-elle arrivée là ? pourquoi a-t-elle cette valeur ? etc.

En te posant ce genre de question tu devrais venir à bout de n'importe quel debuggage :)

héhé

par sebix » 09 janv. 2008, 12:28

ah oui, vu comme ca ca fonctionne mieux ! je n obtiens plus d erreurs: :P

Par contre... ca ne fonctionne toujours pas |*() |*()

les credits continuent a tre mis a jours si l on recharge la page... arghhhh.

Mais qu ai je fait pour me mettre si tard au php ?? Pourquoi on l apprend pas a la maternelle ???

Je me dis que cela peut peut etre venir de ma table :-*

Elle ressemble a cela pour TIMESTAMP:

TIMESTAMP timestamp ON UPDATE CURRENT_TIMESTAMP Oui CURRENT_TIMESTAMP

Re: Je te remercie

par Nagol » 09 janv. 2008, 12:16

Je te remercie de ta reponse. Toujours pas dormi. Je vais mooooorrriiirr :wink:

J ai teste a l instant et .....



...... |*() ca ne fonctionne pas. Il semble y avoir un probleme avec mysql_fecth_row

Voila le message d erreur:

Fatal error: Call to undefined function mysql_fecth_row() in W:\var\www\joomla1-0-13fr\modules\mod_credit50bis.php on line 18

C est ennervant, n est ce pas? :shock: :D
ca va la dernière erreur est pas trop difficile à gérer:

Fatal error: Call to undefined function mysql_fecth_row() in W:\var\www\joomla1-0-13fr\modules\mod_credit50bis.php on line 18 essayes fetch au lieu de fecth :)

Je te remercie

par sebix » 09 janv. 2008, 12:12

Je te remercie de ta reponse. Toujours pas dormi. Je vais mooooorrriiirr :wink:

J ai teste a l instant et .....



...... |*() ca ne fonctionne pas. Il semble y avoir un probleme avec mysql_fecth_row

Voila le message d erreur:

Fatal error: Call to undefined function mysql_fecth_row() in W:\var\www\joomla1-0-13fr\modules\mod_credit50bis.php on line 18

C est ennervant, n est ce pas? :shock: :D

par Aureusms » 09 janv. 2008, 11:15

Il y a plusieurs choses qui ne vont pas...

Tu as recopié mes bouts de codes sans forcément vérifier qu'ils correspondaient à ta base de donnée
$enregistrement_timestamp = $resultat_base_mysql["temps"]; //donnée en provenance de ta base
Si tu fais comme cela je pense que $enregistrement_timestamp sera toujours = à zéro... Donc toujours bon !
Le fait est que normalement tu dois mémoriser le passage avant de lancer ta commande de mise à jour des crédits. Je ne connais pas ta table mais si tu a créé ta colonne TIMESTAMP dans "jos_users" je dirais que tu dois d'abord stocker ta variable après l'avoir vérifié...
Comme je ne suis pas habitué à ton écriture syntaxique, je vais faire ma sauce...
// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );

$maintenant = time(); 

//requete à vérifier
$requete = "SELECT `TIMESTAMP` FROM `jos_users` WHERE `id`= $my->id";
$resultat_sql = mysql_query ($requete);
$resultat = mysql_fecth_row ($resultat_sql);
$enregistrement_timestamp = $resultat[0]; //donnée en provenance de ta base

$maintenant_moins_trois_minutes = $maintenant - (3*60); // 3 fois 60 secondes

if ($enregistrement_timestamp <= $maintenant_moins_trois_minutes)
{
//si OK
    $database->setQuery( "SELECT credit"
        . "
 FROM #__users"
        . "
 WHERE id = $my->id"
  );
    $credit = $database->loadResult() + 50;

    $database->setQuery( "UPDATE #__users"
        . "
 SET credit = $credit"
        . "
 WHERE id = $my->id"
  );

$database->query();


 if (!$my->id) {
 echo 'INVITE : CONNECTEZ VOUS POUR EN PROFITER';
} 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";
} 


}
else
{
//bah l'autre 

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

} 



?> 
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

merci de la reponse mais ca ne marche toujours pas...

par sebix » 09 janv. 2008, 05:33

Bon, j ai fait pas mal de modifs...

Le module n est pas buggé ca fonctionne mais par contre, ca ne marche pas.... :cry:

ca continue d ajouter des credits indefiniments...

Voici ma requete sql (au passage ce n etait pas la bonne celle que j ai donne avant il fallait l integrer dans la table jos_user (table de joomla qui contient les données relatives au membre)

Code : Tout sélectionner

ALTER TABLE jos_users ADD temps TIMESTAMP NOT NULL

et voici mon code php
<?php
// no direct access
defined( '_VALID_MOS' ) or die( 'Restricted access' );

$maintenant = time(); 

$enregistrement_timestamp = $resultat_base_mysql["temps"]; //donnée en provenance de ta base
$maintenant = time();
$maintenant_moins_trois_minutes = $maintenant - (3*60); // 3 fois 60 secondes

if ($enregistrement_timestamp <= $maintenant_moins_trois_minutes)
{
//si OK
    $database->setQuery( "SELECT credit"
        . "
 FROM #__users"
        . "
 WHERE id = $my->id"
  );
    $credit = $database->loadResult() + 50;

    $database->setQuery( "UPDATE #__users"
        . "
 SET credit = $credit"
        . "
 WHERE id = $my->id"
  );

$database->query();


 if (!$my->id) {
 echo 'INVITE : CONNECTEZ VOUS POUR EN PROFITER';
} 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";
} 


}
else
{
//bah l'autre 

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

} 



?> 



qu est ce qui cloche ? j ai les yeux qui font :shock: ....