Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3009 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1373698
HellR
Posté le 24-05-2006 à 00:59:41  profilanswer
 

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
mood
Publicité
Posté le 24-05-2006 à 00:59:41  profilanswer
 

n°1373699
HellR
Posté le 24-05-2006 à 01:06:04  profilanswer
 

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.

n°1373854
HellR
Posté le 24-05-2006 à 10:39:20  profilanswer
 

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é ;)

n°1373967
sielfried
Posté le 24-05-2006 à 11:58:37  profilanswer
 

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
n°1374098
HellR
Posté le 24-05-2006 à 13:54:12  profilanswer
 

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
n°1374109
HellR
Posté le 24-05-2006 à 14:02:50  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
image en phpcharger une image dans un tableau vide
[.NET] System.Drawing > Comment remplir une zone avec une image ?Vérification d'image ...
Comment mettre une image en arrière plan avec une anim flash ?Generation d'un fichier cab sous Visual Studio 2005
en cliquant sur une image mise à jour de la BDDRenommer une image sur le net.
UPDATE réagit bizarrementsi je suis dans cette image?
Plus de sujets relatifs à : Génération d'image et update bdd - Pb incrément


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR