Ou est l'erreur [PHP]

Fermé
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 14 oct. 2009 à 21:48
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 - 15 oct. 2009 à 17:01
Bonjour,

Bonsoir à tous ! J'ai un big souci et je ne vois plus. Je fais une jointure sur 3 tables (tapas, ingredients et photos_tapas) comme ci-dessous:
// On selectionne seulement la ligne qui correspond à la recette choisie sur trois tables (tapas, ingredients et photos_tapas)
$select = ("select tapas.Nom_Recette, tapas.Info, tapas.Preparation, tapas.Auteur, ingredients.Ingredients, photos_tapas.id, photos_tapas.Photo FROM tapas LEFT JOIN 'ingredients' ON tapas.ID=ingredients.ID LEFT JOIN 'photos_tapas' ON ingredients.ID=photos_tapas.ID");


url du site: http://txiki.free.fr/index.php?page=Recettes_Intro&lang=Fr

Et voici l'erreur qui s'affiche:
Erreur : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''ingredients' ON tapas.ID=ingredients.ID LEFT JOIN 'photos_tapas' ON ingredients' at line 1

J'ai tout essayé mais l'erreur change et c'est tout !
Quelqu'un pourrait-il me regarder ce bout de code, je m'arrache les cheveux depuis plusieurs jours.

Un grand merci d'avance.

PS: je peux vous communiquer le reste du code si besoin.
Le bonheur est la seule chose que l'on peut donner sans l'avoir.

5 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
14 oct. 2009 à 22:44
Bonjour,

Il me semble que tu n'utilises pas les bon caractères autour de tes noms de table.
Enlève les ' et mets des ` plutôt. Ou rien du tout.

Xavier
0
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 449
15 oct. 2009 à 00:12
+1 avec Reivax...

Et puis aussi tes ID, un coup tu les tapes en majuscule, un coup en minuscule... Forcément, ça ne va pas aller.

cf :
photos_tapas.id l4 et "photos_tapas.ID" l6 et ceci n'est pas un mot comme where que tu peux mettre en majuscule ou en minuscule, c'est l'identifiant de la colonne de ta table!
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
15 oct. 2009 à 07:43
Bonjour à tous les deux et merci,

Reivax962: justement je les ai remplacé par des ' (au lieu des `) car c'était pareil. Au fait c'est quoi ce caractère ` ? Je n'ai jamais utilisé ça moi, toujours des ' ou ".

Archeus01: Exact, z'avais pas vu ça. Mais les identifiants (le champ ID dans les tables est bien écrit en majuscule). En fait je croyais sincèrement que c'était pareil, insensible à la casse pour ce qui concerne les id.

En tous cas merci. Je testerai ce soir, à la maison !

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 449
15 oct. 2009 à 10:44
Les accents grave (alt gr 7 sur mon clavier) sont utilisés autour des noms des tables pour ne pas utiliser de quote en php. En effet, ceux-ci sont utilisés pour encadrer des chaines qui ne doivent pas être analysés en PHP.
Ca évite les choses du genre $sql = 'select * from \'table\'';
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 517
15 oct. 2009 à 12:56
Aaaaah ! merci. Habituellement je ne mettais rien pour les noms des tables mais comme c'est la première fois que j'utilise les jointure... (c'est juste pour apprendre a en réaliser en fait car ces pages existent mais en html et je voulais faire quelque chose de plus évolué !

Au moins j'aurais appris quelque chose de nouveau (pour moi en tous cas !).
Merci encore mille fois.

Par contre, le champ photo est de type blob. Résultat (avant de faire ces jointures, une table complète quoi !) ça m'affichait des caractères bizarres. J'ai donc opté pour les url d'images (c'est préférable et surtout moins lourd) mais là, ça m'affiche l'url. ? ? ?
J'en déduis qu'il ne sait pas qu'il s'agit d'une url. Et easyphp (phpMyAdmin) ne me propose pas de type url pour le format du champ, à part blob et binary.

Mais je verrais ça ce soir après avoir réglé ce Pb d'affichage des recettes.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 449
15 oct. 2009 à 17:01
Pour les jointures en général on utilise where et puis on abrège le nom des tables.

Ainsi, je pense que ton select de 3km de long peut se résumer à

$select = ("select t.Nom_Recette, t.Info, t.Preparation, t.Auteur, i.Ingredients, pt.id, pt.Photo
FROM tapas as t, ingredients as i, photos_tapas as pt
WHERE t.ID=i.ID AND i.ID=pt.ID");

Pour les images ... Oui, blob est le champ pour les photos. Oui, il est préférable de mettre des URL dans la base de donnée en tant que chaine de caractère et c'est au PHP de traiter ces données ensuite pour afficher des photos et non des liens.
Dans ton traitement php, tu vas bien réussir à mettre un truc du genre tes url dans une variable
$url_photo. Après tu vas l'utiliser avec un
echo '<img src="'. $url_photo.'" />
0