Besoin d'aide pour terminer un module Joomla

Eléphanteau du PHP | 10 Messages

08 janv. 2008, 21:13

Bonjour a tous!

J ai deja demande sur Joomla mais personne ne me repond et c est tres urgent...

Bref, voici mon probleme:

Je developpe actuellement un module (mon tout premier ) qui permet de donner automatiquement des points a un utilisateur. Ce module lance une requete php des l ouverture de la page.

pour l instant ca fonctionne parfaitement .

Cependant mon probleme est le suivant: je voudrais que ce module ne lance uniquement QUE SI le membre revient sur le site par son navigateur en cliquant sur revenir en arriere AU BOUT D'AU MOINS 3 MINUTES .

Je sais je suis chiant...

Pourriez vous m aider car je debute en php

Merci d avance !

voici le code:
<?php

// No direct access
//defined( '_VALID_MOS' ) or die( 'Restricted access' );
global $my, $database;

    $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";
}
?>  

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

08 janv. 2008, 21:25

Modération:
Je suis désolé, mais pour ton 1er message, tu mérites une modération car tu cumules les erreurs :
1/ N'utilise pas de majuscules à outrance dans les titres, ça n'apporte rien et ça réduit la lisibilité.
2/ Préfère utiliser les balises
 au lieu de [code] pour le code PHP
3/ Nous sommes une communauté de développeur bénévole et nous n'assurons pas de support "urgent". Tu as posé ta question, quelqu'un répondra en temps voulu et voilà.[/color]
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 10 Messages

08 janv. 2008, 21:27

desole pour les majuscules....

Remarques bien prises en compte :wink:

Je disais juste urgent parceque c'est vrai mais seulement si quelqun a pite de moi :lol:

ViPHP
ViPHP | 1996 Messages

09 janv. 2008, 00:12

Il faut donc que tu mémorises le temps de la dernière visite via un timestamp.
$maintenant = time();
Que tu pourras stoker dans une base de donnée. Ensuite tu vérifie la dernière fois que l'enregistrement a été effectué :
$enregistrement_timestamp = $resultat_base_mysql["temps"]; //donnée en provenance de ta base
$maintenant = time();
$maintenant_moins_trois_minutes = $maintenant - (3 x 60); // 3 fois 60 secondes

if ($enregistrement_timestamp <= $maintenant_moins_trois_minutes)
{
//si OK
}
else
{
//bah l'autre 
}
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, 02:16

Tout d abord je te remercie de ta reponse si rapide. :D

Grace a ton aide et apres avoir bosse comme un taré ( c est la ou on se rend compte qu en vieillisssant on n apprend plus tres bien :cry: ) ,j ai "pondu" ce truc qui, evidemment -il fallait s y attendre- ne fonctionne pas : :roll: (oui je sais je suis mauvais!). J obtiens un message d erreur a la ligne 25 soit au niveau du
//verification de l enregistrement. si inferieur a 3 minutes Rien, sinon + 50
global $enregistrement_timestamp, $maintenant, $maintenant_moins_trois_minutes


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

if ($enregistrement_timestamp <= $maintenant_moins_trois_minutes)
{
//si OK


Voici le code:

<?php

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

//ENOYER LES INFOS A LA BD SUR L HEURE et le membre
global $my, $database,  $maintenant;


    $database->setQuery( "SELECT temps"
        . "
 FROM #__users"
        . "
 WHERE id = $my->id");

$maintenant = time(); 

//fin de l envoie ded INFOS A LA BD SUR L HEURE et le membre


//verification de l enregistrement. si inferieur a 3 minutes Rien, sinon + 50
global $enregistrement_timestamp, $maintenant, $maintenant_moins_trois_minutes


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

if ($enregistrement_timestamp <= $maintenant_moins_trois_minutes)
{
//si OK
//crediter le compte
global $my, $database;

    $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 blablabla";
}
//fin du credit 
//fin de la verification de l enregistrement. si inferieur a 3 minutes Rien, sinon + 50


}
else
{
//bah l'autre 
<SCRIPT LANGUAGE="JavaScript">
alert('blablabla');
</SCRIPT>
//bah l'autre 


} 



?> 

Pour creer sur la base le temps j ai envoyer cette requete:

Code : Tout sélectionner

CREATE TABLE temps_tbl ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,data VARCHAR(100),cur_timestamp TIMESTAMP(8))

Quelqun pourrait m aider? Qu est ce qui cloche? :D

Mammouth du PHP | 1885 Messages

09 janv. 2008, 04:20

L'opérateur de multiplication est * et non x

http://www.generationphp.net/cours/operateurs/#calcul
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Eléphanteau du PHP | 10 Messages

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: ....

ViPHP
ViPHP | 1996 Messages

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]

Eléphanteau du PHP | 10 Messages

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

ViPHP
ViPHP | 3300 Messages

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 :)
Fait du php depuis que ca existe ou presque :)

Eléphanteau du PHP | 10 Messages

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

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

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 :)
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, 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:

ViPHP
ViPHP | 1996 Messages

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!
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: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!