Aller au contenu

[php/mysql] ou peut il y avoir une erreur ?


njoyard

Messages recommandés

Salut !

Navré je vais être un peu long mais il faut bien expliquer mon pb...

J'ai un site sur lequel j'ai mis des MP3 faits avec mon groupe. J'ai voulu faire un système pour en compter les downloads, j'ai donc une table MYSQL mp3_files contenant tous les mp3 et une table mp3_downloads dans laquelle je rajoute une entrée pour chaque téléchargement.

Je procède de cette manière car j'enregistre dans la table mp3_downloads l'hostname de l'utilisateur (ou son adresse ip si l'hostname n'est pas résolu), de manière a pouvoir ignorer les tests que moi et les autres gens de mon groupe faisons sur le site...

Enfin j'ai une table mp3_hosts dans laquelle je stocke la fin de l'hostname (tiscali.fr par exemple) pour mieux savoir qui télécharge les fichiers

Donc j'ai un script PHP qui prend en paramètre GET un identificateur de mp3, cherche le mp3 correspondant dans mp3_files, ajoute les entrées dans mp3_downloads et mp3_hosts et renvoie une page avec un HTTP refresh dans le <head> pointant vers le fichier en question, avec l'habituel message 'cliquez ici si le téléchargement ne commence pas'.

Jusque la tout va bien. Cela dit j'ai rencontré hier un gars qui m'a dit avoir une erreur sur cette page, et j'ai pas réussi a savoir de quelle erreur il s'agit. Ca doit etre une erreur PHP ou mysql a mon avis, mais je sais pas laquelle. Et je ne sais pas non plus d'ou vient l'erreur dans le script, je l'utilise depuis 2mois sans problème :reflechis: ...

Voilà le code PHP (j'ai vire le html pour plus de clarté)

<?php include "db.inc" ?>
<?php
$ident = $_GET["id"];
if ($ident) {
mysql_connect($server, $user, $pw) or die("Erreur de connexion");
mysql_select_db($db) or die("Mauvaise base de donnees");
// on cherche l'id donné dans $id
$sql = "SELECT url,titre FROM mp3_files WHERE id=" . $ident . ";";
$query = mysql_query($sql) or die(mysql_error());
$n = mysql_num_rows($query);
if ($n >0 ) {
 $fichier = mysql_fetch_assoc($query);
 // on ajoute a la base de données statistiques
 $host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
 preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
 $sql = "INSERT INTO mp3_downloads(date, fileid, hostname) VALUES (NOW(), '" . $ident . "'";
 $sql = $sql . ", '" . $host . "');";
 $query = mysql_query($sql) or die(mysql_error());
 // on cherche l'host dans la base des hosts
 $host = $matches[0];
 if(is_numeric($host)) {
 	// on n'a pu traduire l'ip...
 	$host="(unknown)";
 }
 $sql = "SELECT hits FROM mp3_hosts WHERE name='" . $host . "';";
 $query = mysql_query($sql) or die(mysql_error());
 $n = mysql_num_rows($query);
 if ($n > 0) {
 	// l'host y est deja, on incremente son compteur de hits
 	$item = mysql_fetch_assoc($query);
 	$k = $item["hits"] + 1;
 	$sql = "UPDATE mp3_hosts SET hits=" . $k . " WHERE name='" . $host . "';";
 	$query = mysql_query($sql) or die(mysql_error());
 } else {
 	// nouveau host, on ajoute un element...
 	$sql = "INSERT INTO mp3_hosts(name, hits) VALUES ('" . $host ."', 1);";
 	$query = mysql_query($sql) or die(mysql_error());
 }
?>

sachant que $ident est un nombre entier, passé par GET par la page listant les mp3...

Je pense que ca peut venir de la résolution du host qui dans certains cas peut pourir les requetes mysql, mais je sais pas quels sont ces 'certains cas'....

Merci de m'avoir lu jusque la, et si vous avez une idée...

Lien vers le commentaire
Partager sur d’autres sites

Hello!

Perso, a froid je vois pas d'ou ca vient... tu dois avoir raison, ca doit venir de la resolution host (vu qu'il n'y a que ca qui change entre tes essais et ceux des internautes, et puis leur navigateur...).

Je suis pas super constructif, mais sinon j'aime bien votre zik...

@+

Lien vers le commentaire
Partager sur d’autres sites

merci c'est sympa, bien que l'enregistrement date (mais on va enregistrer une démo bientot :transpi:)

enfin pour revenir au pb, vous savez si la syntaxe

f = mafonction() or die(bidule);"

marche aussi en remplaçant le die(bidule) par autre chose ? comme ça si une erreur survient 'importe ou je ferais en sorte de ne rien ajouter dans la DB et de renvoyer direct le fichier mp3 :ouioui:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...