Problème: une base de données et deux tables

Eléphant du PHP | 172 Messages

10 juin 2005, 17:41

Bonjour à Tous,

J'ai une base de données qui contient 2 tables:
- "dl" et
- "models"

la table "models" ne contient que 2 champs:
- 'model' et
- 'picture' [édité]

Je fais ceci:
$query   = "SELECT * FROM dl WHERE 'nom' LIKE '".$_POST['nom']."%' AND `langue` LIKE '".$_POST['langue']."' ORDER BY 'nom' ASC";
$result   =   mysql_query($query);
$nbrfich = mysql_numrows($result);

$query2	= "SELECT 'picture' FROM models WHERE `model` = '" . $_POST['nom']  . "'" ;              // [édité]
$result2  = mysql_query($query2);			 					
$val2		= mysql_fetch_array($result2);
$image	= $val2["picture"];
 
Ma requête sur "dl" fonctionne, mais celle sur "models" ne donne rien.

Que devrait contenir selon vous $image ?

J'ai besoin en fait de récupérer le champ 'picture' correspondant au 'model' dont je fournis le nom dans $_POST['nom']

Comment devrais-je m'y prendre ?
.
Modifié en dernier par PhilFree le 10 juin 2005, 19:40, modifié 3 fois.

Mammouth du PHP | 19672 Messages

10 juin 2005, 17:47

en commençant par utiliser le bon nom du champ, tu nous annonces que la table models a un champ "image" et dans ta requête tu fais SELECT picture alors il y a un os quelque part.

Ensuite, s'il y a correlation entre les deux requêtes, tu dois pouvoir les combiner en une seule requête: tu veux faire quoi au juste ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

10 juin 2005, 18:13

Bonjour Cyrano,

Merci de ta réponse.

J'ai édité mon Post, il s'agit bien du champ 'picture'

Ce que je veux faire:

Dans la table dl j'ai:
- un numéro d'article,
- une description de l'article et
- un nom de fichier qui me sert à créer un lien que l'utilisateur peut cliquer.
Comme je travaille en 3 langues, pour un même article, j'ai une, deux ou trois descriptions et noms de fichier.

- Dans la table models j'ai
- le numéro d'article et
- le nom de fichier d'une image représentant l'article.

Lorsque l'utilisateur a choisi l'article, et la ou les langues, j'affiche les résultats de dl

ça ça fonctionne très bien.

Ce que je veux ajouter, c'est la photo de l'article dont le nom du fichier image se trouve dans la table models

That is the problem...

Mammouth du PHP | 19672 Messages

10 juin 2005, 18:22

Il y a une erreur dans la seconde requête qui n'est pas terminée: au lieu de
$query2    = "SELECT 'picture' FROM models WHERE `model` = '".$_POST['nom']; 
il faudrait
$query2    = "SELECT 'picture' FROM models WHERE `model` = '".$_POST['nom']."'"; 
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 1776 Messages

10 juin 2005, 18:31

Ce que je veux faire:

Dans la table dl j'ai:
- un numéro d'article,
- une description de l'article et
- un nom de fichier qui me sert à créer un lien que l'utilisateur peut cliquer.
Comme je travaille en 3 langues, pour un même article, j'ai une, deux ou trois descriptions et noms de fichier.

- Dans la table models j'ai
- le numéro d'article et
- le nom de fichier d'une image représentant l'article.

That is the problem...
Pourquoi ne pas faire dans ce cas:
- id_gen
- id_lang_1 (nombre ou 0 si pas dans cette langue)
- id_lang_2 (nombre ou 0 si pas dans cette langue)
- id_lang_3 (nombre ou 0 si pas dans cette langue)

et une autre avec:
- id_article
- description
- article

ensuite le principe:
l'utilisateur une fois sa langue selectionnée voit si l'article souhaité existe ou non dans la langue selectionnée. Si il choisit d'aller le voir, cela ramene a un lien du style http://www.tonsite.com/tapage.php?artic ... id_article . Préalablement, le fichier image aura eu pour nom ton_id_article.jpg lors de son insertion...ce qui évite d'avoir ce champ...et de gérer cela à la facon phpbb :roll:

dis moi si je me trompe sur le concept...

- id_lang_3

Eléphant du PHP | 172 Messages

10 juin 2005, 19:36

Merci Cyrano,

Bien vu pour l'erreur de syntaxe.

Mais une fois corrigé (j'ai rajouté le ."'" manquant), $image ne contient RIEN et non pas un truc du style:

th_1107.gif

J'ai fait:
echo "<br>image: " . $image . " " . mysql_numrows($result2);
J'obtiens:

image: 1

Donc mysql_numrows($result) est correct, ce qui indique que la requête a bien abouti.
Par contre IMPOSSIBLE de récupérer le contenu du champ picture

C'est démentiel ce truc.
Modifié en dernier par PhilFree le 10 juin 2005, 19:54, modifié 1 fois.

Mammouth du PHP | 19672 Messages

10 juin 2005, 19:53

Là, il faudrait vérifier tes requêtes d'insertions de données, le problème est sûrement là
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

10 juin 2005, 19:58

Mais , comme indiqué dans mon dernier message, je sais que la requête a bien abouti, ce que je n'arrive pas à obtenir c'est le contenu du champ picture

Mammouth du PHP | 19672 Messages

10 juin 2005, 20:02

Je viens de réaliser un truc: tu essayes de faire afficher quoi avec ça ?
echo "<br>image: " . $image . " " . mysql_numrows($result2);
Mets mois le code à partir de la requête jusqu'à l'affichage, je sens le gag à 100km
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
pjl
ViPHP | 2119 Messages

10 juin 2005, 20:39

Pourquoi ne pas faire dans ce cas:
- id_gen
- id_lang_1 (nombre ou 0 si pas dans cette langue)
- id_lang_2 (nombre ou 0 si pas dans cette langue)
- id_lang_3 (nombre ou 0 si pas dans cette langue)

et une autre avec:
- id_article
- description
- article
Et si demain, il bosse avec 4 langues ?
Il est obligé de revoir tout son code ?

Perso, je ne ferais pas celà mais :
- une table langue avec un id_langue
- une table article avec les éléments communs indépendant de la langue (image, etc) avec un id_article
- une table description avec comme clef la combinaison id_langue-id_article et les élèment spécifique à la langue(description, etc).

Eléphant du PHP | 172 Messages

10 juin 2005, 20:54

J'aimerais que ça affiche:

image: th_1107.gif 1

Voici le code:
$query   = "SELECT * FROM dl WHERE `nom` LIKE '".$_POST['nom']."%' AND `langue` LIKE '".$_POST['langue']."' ORDER BY 'nom' ASC";
$result  = mysql_query($query);
$nbrfich = mysql_numrows($result);

$query2	= "SELECT 'picture' FROM models WHERE `model` = '" . $_POST['nom'] .  "'";
$result2= mysql_query($query2);			 						
$val2	= mysql_fetch_array($result2);
$image	= $val2["picture"];
echo "<br>image: " . $image . " " . mysql_numrows($result2);

Mammouth du PHP | 19672 Messages

10 juin 2005, 21:00

Remplace donc ceci:
$val2	= mysql_fetch_array($result2);
$image	= $val2["picture"];
echo "<br>image: " . $image . " " . mysql_numrows($result2);
Par celà:
$i = 1;
while($val2    = mysql_fetch_array($result2))
{
    echo "<br>image: " . $val2['picture'] . " " . $i;
    $i++;
}
En plus, si tu as plusieurs images correspondant à la requête, elles seront toutes affichées.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

10 juin 2005, 21:07

Je vais essayer, mais il y a unicité de l'image pour un produit donné.

Donc je dois toujours avoir

mysql_numrows($result2) qui vaut 1 ou zéro si l'image n'existe pas.
Modifié en dernier par PhilFree le 10 juin 2005, 21:46, modifié 1 fois.

Mammouth du PHP | 19672 Messages

10 juin 2005, 21:15

Alors fais comme ça
if(mysql_num_rows($result2) > 0)
{
    $i = 1;
    while($val2    = mysql_fetch_array($result2))
    {
        echo "<br>image: " . $val2['picture'] . " " . $i;
        $i++;
    }
}
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 172 Messages

10 juin 2005, 21:45

if(mysql_num_rows($result2) > 0)
{
    $i = 1;
    while($val2    = mysql_fetch_array($result2))
    {
        echo "<br>image: " . $val2['picture'] . " " . $i;
        $i++;
    }
}
Affiche:

image: picture 1

alors que ça devrait afficher:

image: th_1107.gif 1

Est-ce que ça te serait utile de voir la page en fonction ?