Aller au contenu

petit problème de requète... plutôt enervant!


Sujets conseillés

Posté (modifié)

bonjour à tous,

Voilà, je suis en train de créer un site de partitions où je désire que chaque page d'artiste affiche une liste d'albums + les noms des chansons + la pochette.

Tout fonctionne niquel, sauf pour la pochette qui ne s'affiche pas :(

Basiquement j'ai 2 tables : l'une qui stocke toutes les infos chansons, et l'autre les pochettes. La jointure entre les deux se fait sur le "nom d'album".

La requete (simplifiée) sous la forme

SELECT id FROM pochettes WHERE titre_album = "test"

fonctionne bien sous php myadmin donc il doit sans doute y avoir un soucis dans la jointure..

voici mon code :

function showartist(&$a, &$user, &$type) {
$qry_result = $user->query("SELECT lid,song, album, track FROM ".$user->datatable()." WHERE artist=\"$a\" ORDER BY album,track");
writesubtitle("Guitar Tab Results for $type \"". htmlentities(stripslashes($a)) ."\"");
$prevalbum = "";
$cover = "";
$donesingle = 0;
$i = 1;
writepage("</p><table id=\"albumlist\">");

while ($result = mysql_fetch_array($qry_result, MYSQL_BOTH)) {

if (strtoupper($prevalbum) != strtoupper($result['album']) && $result['album'] != NULL) {
$prevalbum = $result['album'];

// requete sur les pochettes
$sqlalb = 'SELECT id FROM pochettes as coverid WHERE titre_album = ".$prevalbum."';
$reqalb = mysql_query($sqlalb) or die('Erreur SQL !<br>'.$sqlalb.'<br>'.mysql_error());

while($datacover = mysql_fetch_assoc($reqalb)) {
$cover = $datacover["coverid"];
}

// affichage liste d'albums
if ($i != 1) writepage("</table><br><table id=\"albumlist\">");
writepage("<tr class=\"albumheader\"><td colspan=2 class=\"albumheader\">".htmlentities(stripslashes($a))." | ". htmlentities(stripslashes($result['album'])) ." | ".$datacover["coverid"]."</td></tr>");
}

normalement l'id appelera une photo mais pour tester je veux juste afficher l'id ^^;)

Merci d'avance à ceux qui pourront m'aider!

Modifié par frakosun
Posté

C'est une image que tu as dans le champs ?

Si oui tu ne peux faire un affichage de l'image comme cela, il te faut faire un php dédié à cela que tu appelerais aux sein d'une balise image ç donnerai

cela à l'endroit ou tu dois afficher:

<img src="aff_img.php?id=<?php echo $id; ?> />

Dans aff_img.php

// Ta partie ouverture vers mysql
// La requette pour peupler la variable $cover

header("Content-type: image/jpg");
header("Expires: Wed, 01 Jan 1990 00:00:00 GMT");
header("Cache-Control: no-cache");
header("Cache-Control: must-revalidate");
print $cover;

Posté

Bonjour,

Petit conseil : Stock le chemin vers la pochette et non la pochette en elle même.

Tu y gagneras en temps et ressources à terme :)

Bye

Portekoi

Posté (modifié)

d'abord merci pour vos réponses à tous les deux.

Ensuite, pour vous répondre:

C'est une image que tu as dans le champs ?

Oui, en fait je stocke les images dans la bdd via la fonction BLOB et j'ai déjà une page de type img.php?id=x dédiée à d'affichage. Donc je pensais simplement récupérer l'id de l'image correspondant à la requete de l'album pour l'insérer directement dans l'url.

En simplifiant, faire exactement un truc comme tu as dit, voici mon fichier img.php:

<?php
// connexion mysql

$query = "SELECT data,filetype FROM pochettes where id=$id";
$result = MYSQL_QUERY($query);
$data = MYSQL_RESULT($result,0,"data");
$type = MYSQL_RESULT($result,0,"filetype");
Header( "Content-type: $type");
print $data;
?>

et donc là où ça coince depuis le début c'est au niveau de la requette pour peupler la variable $cover , elle ne se remplit pas.

A mon avis le soucis vient de cette partie du code :

$sqlalb = 'SELECT id FROM pochettes as coverid WHERE titre_album = ".$prevalbum."';
$reqalb = mysql_query($sqlalb) or die('Erreur SQL !<br>'.$sqlalb.'<br>'.mysql_error());

while($datacover = mysql_fetch_assoc($reqalb)) {
$cover = $datacover["coverid"];
}

=> $prevalbum étant le résultat de la requête effectuée sur une autre table et affichant le nom de l'album sur le site. (en gros ma jointure se fait sur le nom de l'album)

Petit conseil : Stock le chemin vers la pochette et non la pochette en elle même.

oui je sais tu as entièrement raison mais j'ai voulu faire au plus simple car les images seront très petites (40*40 px) et il y aura rarement plus de 5 images sur la même page.

Modifié par frakosun
  • 3 semaines plus tard...
Posté

Bonjour,

ton problème semble provenir de l'écriture PHP de ta requête :

$sqlalb = 'SELECT id FROM pochettes as coverid WHERE titre_album = ".$prevalbum."';

Essaye :

$sqlalb = "SELECT id FROM pochettes as coverid WHERE titre_album = '$prevalbum'";

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...