Génération d'image et update bdd - Pb incrément

Génération d'image et update bdd - Pb incrément - PHP - Programmation

Marsh Posté le 24-05-2006 à 00:59:41    

Bonsoir à tous,
 
J'ai un petit problème avec un script PHP et je dois avouer être complètement largué quant à l'origine du problème :)
 
Pour expliquer rapidement, j'ai une URL http://www.xxx.com/?userid=test qui retourne une image PNG, le problème c'est que la majorité des forums phpBB n'acceptent que des images au format JPG, PNG, GIF, etc. J'ai donc décidé de créer un script qui à partir de l'URL http://www.xxx.com/test.png va aller récupérer l'image générée par http://www.xxx.com/?userid=test.
 
La solution envisagée est la suivante : j'ai un .htaccess qui redirige http://www.xxx.com/test.png (qui n'existe pas) vers mon script PHP de façon transparente pour le client. Lorsque siggen.php est appellée j'update d'abord ma bdd afin d'avoir des statistiques sur les signatures appellées, puis je genère l'image.
 
Mon problème est le suivant, l'incrémentation se fait de +2 en +2 sauf quand je met la génération de l'image en commentaire. On dirait qu'il exécute deux fois l'update de la bdd quand je modifie le header pour afficher le PNG  :??: . J'ai essayé diverse solution comme rajouter un compteur mais rien n'y fait.
 
Si quelqu'un à une piste je l'en remercie d'avance :)
 
.htaccess

Code :
  1. Options  -Indexes
  2. ErrorDocument 401 /siggen.php
  3. ErrorDocument 403 /siggen.php
  4. ErrorDocument 404 /siggen.php


 
siggen.php

Code :
  1. $userid = strtolower(basename($_SERVER['REQUEST_URI'],'.png'));
  2. if ($userid)
  3. {
  4.   require_once('./inc/functions.inc.php');
  5.  
  6.   fupdatedb($userid);
  7.   fimgcreate($userid);
  8. }


 
functions.inc.php

Code :
  1. function fupdatedb($userid)
  2. {
  3.   $db = mysql_connect('******', '******', '******');
  4.   mysql_select_db('******');
  5.  
  6.   $sql = 'SELECT id, nbhit FROM stat_sig WHERE userid = \''.$userid.'\'';
  7.   $res = mysql_query($sql) or die('Erreur SQL !<br><br>'.$sql.'<br><br>'.mysql_error());
  8.  
  9.   if (mysql_num_rows($res))
  10.   {
  11.     $row = mysql_fetch_object($res);
  12.     $sql = 'UPDATE stat_sig SET nbhit = '.++$row->nbhit.' WHERE id = '.$row->id;
  13.     mysql_query($sql) or die('Erreur SQL !<br><br>'.$sql.'<br><br>'.mysql_error());
  14.   }
  15.   else
  16.   {
  17.     $sql = 'INSERT INTO stat_sig (userid,nbhit) VALUES (\''.$userid.'\',1)';
  18.     mysql_query($sql) or die('Erreur SQL !<br><br>'.$sql.'<br><br>'.mysql_error());
  19.   }
  20.  
  21.   if ($res) mysql_free_result($res);
  22.   mysql_close($db);
  23. }
  24. function fimgcreate($userid)
  25. {
  26.   header("Content-type: image/png" );
  27.   $img = @imagecreatefrompng('http://www.xxx.com/?userid='.$userid);
  28.   imagepng($img);
  29.   imagedestroy($img);
  30. }


Message édité par HellR le 24-05-2006 à 01:01:24
Reply

Marsh Posté le 24-05-2006 à 00:59:41   

Reply

Marsh Posté le 24-05-2006 à 01:06:04    

Je me suis perdue dans mon explication ^^ J'ai oublié de préciser que l'incrémentation qui pose problème c'est celle du champ "nbhit" de ma table :) Le champ "id" est en auto incrément dans la bdd et ne pose aucun problème.
 
J'en profite pour poser une autre question :
 
Si le userid "test" n'existe pas dans la bdd je vais insérer une nouvelle ligne mais j'aimerai d'abord vérifier que l'URL http://www.xxx.com/?userid=test renvoie bien une image PNG. Je n'ai aps encore vraiment cherché pour être tout à fait sincère mais si quelqu'un à une piste ou une solution ça ne serait pas de refu :)
 
Merci beaucoup.

Reply

Marsh Posté le 24-05-2006 à 10:39:20    

Pour l'existence de l'image je pense avoir trouvé la solution sous ma douche, je vais utiliser getimagesize() qui retourne false si l'image n'est pas valide. C'est tout con mais je n'y ai pas pensé hier ^^
 
Par contre pour l'incrémentation de +2 je sèche et visiblement personne n'est inspiré ;)

Reply

Marsh Posté le 24-05-2006 à 11:58:37    

C'est assez "bourrin" comme htaccess si je puis me permettre. Un coup d'url rewriting me paraîtrait beaucoup plus propre, et tu n'aurais pas besoin de t'embêter à parser REQUEST_URI. Là, dès qu'il ne va pas trouver une url sur ton site, il va aller sur siggen.php... [:figti]
 
Pour le +2, je dirais que ça peut être un problème de récursion, genre il trouve pas l'image dans "$img = @imagecreatefrompng('http://www.xxx.com/?userid='.$userid);", donc il repasse dans ton ErrorDocument 404, et refait un coup de updatedb.
 
Bref, commence par affiner ton htaccess je pense.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 24-05-2006 à 13:54:12    

Le .htaccess est dans un repertoire isolé et l'URL http://www.xxx.com/?userid=test corredpond à un autre site qui ne m'appartient pas ça ne devrait donc pas poser de problème.
 
En fait je pense avoir trouvé l'origine du problème. Entestant avec IE ça marche alors qu'avec Firefox ça incrémente de +2... Sur Firefox il reload l'image pour créer la miniature qui se trouve à droitegauche de l'onglet, enfin je pense même si ça me parait bizare comme fonctionnement je ne vois que ça.
 
EDIT: j'ai un peu de mal entre ma droite et ma gauche ^^


Message édité par HellR le 24-05-2006 à 14:13:38
Reply

Marsh Posté le 24-05-2006 à 14:02:50    

sielfried a écrit :

Un coup d'url rewriting me paraîtrait beaucoup plus propre, et tu n'aurais pas besoin de t'embêter à parser REQUEST_URI.


 
Je ne suis pas sur que ça soit activer sur Free (mon script se trouves là bas ^^). Mais sinon en effet c'est plus propre, je garde dans un coin ça peut toujours servir. Merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed