Aide pour structure table mysql

Résolu/Fermé
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 19 nov. 2010 à 19:50
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 28 nov. 2010 à 00:36
Bonjour,
Je souhaite réaliser, depuis longtemps, une BDD de recettes plutôt que créer une multitude de pages html qui me prend un temps fou. Voir mon site: http://www.abarka.eu à recettes. J'ai fait des tests sur mon compte de tests http:txiki.free.fr (tapas test).
1- quelque soit le lien cliqué, c'est toujours la même recette qui s'affiche
2- la photo ne s'affiche pas

J'ai utilisé le principe des prénoms, qui fonctionne à merveille.

Pour la photo, j'avais utilisé un champ BLOB mais ça m'affichait des hiéroglyphes. En plus ce n'est pas très indiqué de mettre des photos sur une table.
J'ai donc utilisé un champ TEXTE en y mettant l'url complète mais cela ne fonctionne pas non plus.

J'ai vu sur le forums, ici et ailleurs qu'il fallait simplement mettre le nom du fichier (albondigas.jpg) mais je ne comprends pas comment on va chercher ce fichier sur mon site.

Je ne sais pas comment joindre le fichier sql généré alors je le mets ci-dessous:
-- phpMyAdmin SQL Dump
-- version 3.3.2
-- https://www.phpmyadmin.net/
--
-- Serveur: 127.0.0.1
-- Généré le : Ven 19 Novembre 2010 à 19:31
-- Version du serveur: 5.1.45
-- Version de PHP: 5.3.2

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de données: 'txiki'
--

-- --------------------------------------------------------

--
-- Structure de la table 'tapas'
--

CREATE TABLE IF NOT EXISTS 'tapas' (
  'ID' int(4) NOT NULL,
  'Nom_Tapa' varchar(255) COLLATE latin1_general_ci NOT NULL,
  'Info_Tapa' text COLLATE latin1_general_ci NOT NULL,
  'Ingredients_Tapa' text COLLATE latin1_general_ci NOT NULL,
  'Photo_Tapa' text COLLATE latin1_general_ci NOT NULL,
  'Prep_Tapa' text COLLATE latin1_general_ci NOT NULL,
  'Auteur' text COLLATE latin1_general_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

--
-- Contenu de la table 'tapas'
--

INSERT INTO 'tapas' ('ID', 'Nom_Tapa', 'Info_Tapa', 'Ingredients_Tapa', 'Photo_Tapa', 'Prep_Tapa', 'Auteur') VALUES
(0, 'Albondigas', 'Les albondigas sont des boulettes de viande passées à la farine et cuites en ajoutant la sauce tomate à la fin de la cuisson. Elles peuvent être servies en portion ou équipées d''une pique chacune pour l''apéritif.<br />\r\nLe mot albondigas est dérivé de l''arabe <i>''al-bunduq''</i> signifiant "noisette". ', '- 200 gr de steak haché <br />\r\n- 200 gr chair à saucisse <br />\r\n- 1 oignon <br />\r\n- huile d''olive <br />\r\n- sauce tomate <br />\r\n- farine <br />\r\n- 1 oeuf <br />\r\n- persil <br />\r\n- sel, poivre', '\\Txiki\\recettes\\tapas\\illus_tapas\\albondigas.jpg', 'Mixer éventuellement la chair à saucisse si elle est hachée trop gros. Dans une grande <i>cazuela</i>, malaxer à la main la viande de b?uf et la chair à saucisse pour bien les mélanger. Faire chauffer l''huile d''olive dans une poêle et pocher l''oignon haché très fin. Ajouter le persil, l''oignon, l''?uf entier, saler et poivrer puis malaxer de nouveau l''ensemble.\r\nLaisser reposer 1 heure au réfrigérateur. <br />\r\nVerser la farine dans une assiette. Avec une cuillère à café, prendre une dose de viande et former une boulette dans le creux des mains puis fariner et les poser dans un plat pour les frire. Faire chauffer assez d''huile et quand elle chante y plonger les boulettes. Les retourner en secouant la poêle énergiquement.<br />\r\nRéserver. <br />\r\nMettre les boulettes au fur et à mesure de leur cuisson dans une cazuela. A la fin, ajouter la sauce tomate puis la mélanger à la viande avec une cuillère en bois.<br />\r\nDresser dans des cassolettes en terre (cazuelitas) avec une pique pour chacune et saupoudrer de persil haché.', 'recette de <i>Txiki</i>.');


Autre chose: je ne sais pas comment faire pour revenir à la ligne pour les ingrédients par exemple alors j'ai mis des balises <br /> dans la table. Je sais c'est pas très catholique....

Quelqu'un pourrait-il m'expliquer et/ou m'aider à créer la structure de la table "Tapas".
Merci infiniment d'avance car je ne maitrise pas les bases de données. Je suis autodidacte en ce qui concerne les BDD.





Le bonheur est la seule chose que l'on peut donner sans l'avoir.
A voir également:

28 réponses

salut txiki ya une erreure au nivo de ta requete sql

$select = ("select Type, Nom, Info, Ingredients, Photo, Preparation, Auteur, FROM recettes, WHERE ID='$ID'");


les parenthèses sont inutiles mais ca c'est pas un problème
mais surtout ya une virgule après recettes et auteur , ca doit venir de la le pb.

$select = "select Type, Nom, Info, Ingredients, Photo, Preparation, Auteur FROM recettes WHERE ID='$ID'"; 
1
Utilisateur anonyme
19 nov. 2010 à 19:58
As-tu déjà visiter le site du zéro ?
Il y a un tutoriel complet sur les BDD MySQL.
0
Bon j'ai pas tout compris
pour ce qui est des photos tu n'es pas obligé de mettre uniquement le nom de l'image tu peux mettre toute l'url , il faut faire ca si tes images sont dans des dossiers différent
dans ce cas tu affiche l'image :
<img src="<?php echo $urlimage; ?>">



dans le cas ou tu n'enregistre que le nom et donc que toute les images sont dans le meme dossier ( ici le dossier images) tu affiche comme ca :
<img src="/images/<?php echo $nomimage; ?>">


attention dans les 2 cas il ne faut pas oublier l'extension de l'image


pour le code html dans la base de donné ce n'est absolument pas un problème

par contre j'ai l'impression que tu ty prend mal pour ta bdd
tu ne va pas créer une table tapas une table poisson une table legume il faut que tu créer une table globale "recette" composée de id , nom, ingrédient marche a suivre , nom/url photo



pour les 2 erreurs c'est normal :
le champ id n'est pas rempli regarde tes url
&id=
http://txiki.free.fr/index.php?page=Fiche_Recette&lang=Fr&id=

pour les images :
regarde ce que ca produit dans le code source
<img src=".%20$url_photo."> c'est un problème d'écriture php

je peux pas t'aider plus sans le code de ta page
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
19 nov. 2010 à 20:40
Bonsoir et merci par votre rapidité d'intervention,

J'avais fait ceci à savoir une table tapas + une table ingrédients + une table liaison mais je ne comprends pas alors je reviens au système de base à savoir une seule et unique table tapas. Pareil pour les autres.


<?php
// ==============================================================
// On recupere la variable "id" correspondant à la recette choisie
// ==============================================================
$ID=$_GET['ID']; // La manipulation de $id est plus simple que celle de $_POST["id"]

// On récupère les informations de connexion à la base 
require 'Fonctions_Recettes.php'; 

//================
// connection à la DB
//================
$link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table


//========================================================
// requête SQL qui affiche les infos de la fiche correspondante au lien cliqué 
//========================================================
$link = '$link';
$url_photo ='$url_photo';
// On selectionne seulement la ligne qui correspond à la recette choisie sur trois tables (tapas, ingredients et photos_taps)
$select = ("select t.Nom_Recette, t.Info, t.Preparation, t.Auteur, i.Ingredients, pt.Photo
FROM tapas as t, ingredients as i, photos_tapas as pt
WHERE t.ID=i.ID AND i.ID=pt.ID");
//$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");

 $result = mysql_query($select)  or die ('Erreur : '.mysql_error() );

// mysql_fetch_row genere un tableau correspondant a la ligne selectionnée de la BDD
// Les informations sont accessibles par $row["id"], $row["Nom_Recette"], $row["Info"]...
$row= mysql_fetch_array($result); 


Je vous tiens au courant.

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
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
19 nov. 2010 à 22:56
Salut olimix,

par contre j'ai l'impression que tu ty prend mal pour ta bdd
tu ne va pas créer une table tapas une table poisson une table legume il faut que tu créer une table globale "recette" composée de id , nom, ingrédient marche a suivre , nom/url photo

- Je veux bien mais ce sera énorme ! j'ai beaucoup de recettes et cela va poser des Pbs de rapidité d'affichage non ?

De plus tu me dis que dans tous les cas il me faut mettre le suffixe des images mais où exactement ? Dans l'exemple ci-dessous
<img src="/images/<?php $nomimage; ?>">


Je reconstruis la table en ajoutant le Type (Tapa, Entree etc...) on verra bien ! Je dois t'avouer que je reprends simplement ça aujourd'hui car j'y ai passé beaucoup de temps sans trouver de solutions. Je voulais garder le principe des prénoms, avec la recherche par prénom, ou en cliquant sur une lettre etc... voir sur http://www.abarka.eu

Merci encore pour ton aimable participation.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
Non ca va pas poser probleme pour la rapidité , c'est fait pour

j'ai oublié l'echo ici :

<img src="/images/<?php echo $nomimage; ?>">

le suffice doit etre enregistré dans la variable $nomimage

exemble :

$nomimage = "Mon-image.jpg";
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
21 nov. 2010 à 20:34
Bonsoir olimix,

Merci encore,
Je rentre tout juste du Pays basque espagnol. Comme je ne travaille que les lundis, mardis et mercredis, je reprendrais tout ça à partir de mercredi.

Par contre j'ai un souci avec le serveur de free (sur mon compte de tests). Je ne peux pas uploader le fichier Fiche_Recettes Fr.php. Ce même fichier je peux par contre l'uploader sur mon autre compte sans problème.

La hot line ne peux rien faire faire, faut appeler un autre service.... Bref le gars n'y connaissais pas grand chose en tous cas.

@ +

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
essaye de le renommer avant de luploader ou alors supprime le dossier dans lequel tu veux uploader et reupload le tout .
Ca marrive aussi sur mes serveurs ovh , je sais pas trop dou ca viens
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
22 nov. 2010 à 09:38
Bonjour olimix,

ca y est ! hier j'ai pu uploader normalement.

exemble :
$nomimage = "Mon-image.jpg";


Dans l'exemple que tu cite, Mon-image ne peut aller, ce nom change tout le temps sauf bien sur l'extension. Alors je ne comprends plus. L'image est appelée grace à l'ID de l'enregistrement de l'entrée de la table recettes.

Bon, de toutes façons, étant au bureau je n'ai pas le code sous les yeux.

Merci pour tout.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
biensur qu'il change , le nom de la photos de la recette doit etre enregistré dans la base de donnée
exemple:"recette-tapas-photos.jpg"


ensuite tu affiche la photos en lisant le nom de limage provenant de la bdd
$nomimage = $retour-de-bdd;

<img src="/images/<?php echo $nomimage; ?>">
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
26 nov. 2010 à 09:11
Bonjour olimix,

Bon, après moultes galères (erreur sur la requete, je me suis trompé sur le nom d'un champ, j'ai mis Tapa au lieu de Type) j'ai réussi à afficher la liste des recettes triées sur la colonne Type=Tapa.

Mais j'ai une erreur, et cela depuis le début,
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 'FROM recettes, WHERE ID=''' at line 1
lorsqu'on clique sur un nom de recette (voir ci-dessous):
http://txiki.free.fr/index.php?page=Liste_Tapas&lang=Fr&lettre=A

Voici le code de la fiche sensée afficher le détail de la recette:
$ID = $_GET['ID']; // La manipulation de $id par la méthode $_GET est plus simple que celle de $_POST["id"]


et plus loin:
//========================================================
// requête SQL qui affiche les infos de la fiche correspondante au lien cliqué 
//========================================================
$link = '$link';
$url_photo ='$url_photo';
// On selectionne seulement la ligne qui correspond à la recette choisie sur la table Recettes ttriée sur la colonne Tapa
$select = ("select Type, Nom, Info, Ingredients, Photo, Preparation, Auteur, FROM recettes, WHERE ID='$ID'");


Je touche au but, enfin presque s'il n'y avait cette erreur. Je me sens soulagé mais je ne vois pas où se trouve l'erreur.

Une correction me serait très utile (soit en mettant en gras le morceau de code qui pose PB, soit, mieux encore, en commentant la correction.

Merci infiniment d'avance.
PS: j'ai toujours pas compris l'affichage de la photo de recette mais ça reste un détail pour le moment du moins.


Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
Kemich Messages postés 207 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 11 mars 2011 22
26 nov. 2010 à 09:43
Salut,

Tout d'abord 2-3 remarque au niveau de ton site

Niveau rapidité d'execution c'est parfait, pas besoin d'attendre 3 heures que la page s'affiche.

Niveau ergonomie c'est pas mal, mais tu peut mieu faire je pense.
Renseigne toi sur google (comment faire un site ergonomique).
La police par exemple est trop petite, c'est fatigant a lire.

Niveau graphisme, c'est pas top (un peu tristounet a mon gout).
Tu peut t'inspirer de template tout fait sur le web.


Au niveau de ton erreur, ce que je te conseillerais, c'est d'executer cette requete dans l'interface d'administration de ta BDD, en remplacant $ID par 1 par exemple.
Tu devrait avoir une idée plus précise de ce qui cloche.

Sinon essaye aussi de mettre WHERE ID=$ID au lieu de WHERE ID='$ID' a la fin de ta requete.

J'ai un peu rouillé un niveau de mes connaissances SQL, dsl.

Bon courage.
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
26 nov. 2010 à 10:00
Salut Kemich et merci beaucoup pour tes commentaires,

La police par exemple est trop petite, c'est fatigant a lire. Ceci est du fait que le texte se trouve dans un tableau; dans la CSS je l'ai défini ainsi:
font-size: 0.8em;

alors que les td {
font-size: 10px;
. Je tiendrai compte de ta remarque.

Niveau graphisme, c'est pas top: Qu'entends-tu par graphisme ? Les bandeaux ?

executer cette requete dans l'interface d'administration de ta BDD Tu veux dire en local ? Je n'ai jamais été foutu de faire fonctionner ce site en local. Je travaille avec Dreamweaver et il est plus rapide d'uploader les fichiers puis regarder sur le web ce que cela donne.

J'essaie de suite pour l'id.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
Kemich Messages postés 207 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 11 mars 2011 22
26 nov. 2010 à 10:56
Ah oui, j'avais pas vu la virgule :-)

Sinon c'est plus pratique de travailler en local.
Tu installe easy php, et c'est parti.
Ca te simplifiera grandement la vie.

Au niveau graphisme, j'aime pas trop le bandeau en haut, la photo est "fade", et de mauvaise qualité. Sinon c'est chouette.

Bon courage.
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
26 nov. 2010 à 11:13
Bonjour olimix et merci encore,

Hélàs le pb persiste. Pourtant c'est exactement la même chose avec les prénoms qui eux fonctionnent à merveille, même la recherche.
Je vais péter un cable......

Si encore j'étais sur de comprendre l'erreur qui est retournée.... en cliquant sur une des 5 recettes existant actuellement dans la table recettes.

Le bonheur est la seule chose que l'on peut donner sans l'avoir.
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
26 nov. 2010 à 11:16
Salut Kemich,
Mais j'ai easyphp. C'est avec ça que je renseigne mes tables puis exporte en csv. Ce csv est ensuite importé dans l'interface d'admin chez free.
0
donne nous lensemble de ton code stp
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
26 nov. 2010 à 13:44
Voici le code complet de Fiche_Recette Fr.php (l'espace avant Fr est normal):
<?php
// On recupere la variable "id" correspondant à la recette choisie
// La manipulation de $id par la méthode $_GET est plus simple que celle de $_POST["id"]
$ID = $_GET['ID']; 

// On récupère les informations de connexion à la base 
require 'fonctions.php';

// connection à la DB
$link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base
mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table

// requête SQL qui affiche les infos de la fiche correspondante au lien cliqué 
$link = '$link';
$url_photo ='$url_photo';
// On selectionne seulement la ligne qui correspond à la recette choisie sur la table Recettes ttriée sur la colonne Tapa
$select = "select Type, Nom, Info, Ingredients, Photo, Preparation, Auteur, FROM recettes WHERE ID='$ID'";

$result = mysql_query($select) or die ('Erreur : '.mysql_error() );

// mysql_fetch_row genere un tableau correspondant a la ligne selectionnée de la BDD
// Les informations sont accessibles par $row["id"], $row["Nom"], $row["Info"] etc...
$row= mysql_fetch_array($result);  

// Affichage de la fiche dans un tablea&u dynamique (largeur du tableau fixée à 96 % sur la CSS)
	echo "<div id='fiche'><table margin='0' align='center' font size='100%'>\n";  
	echo "<tr><td align='center' colspan='3'><font-size='2'><font color='#931224'><strong>".$row["Nom"]."</strong></font></font></td>"; // 3 colonnes fusionnées pour le titre de la recette
	echo "<tr><td class='info_recette_T'><i><font color='#FF0000'>Info pratique / Astuce :</font></i><br /></td><td class='fiche_recette_T'>Ingrédients:<br /></td><td class='fiche_recette_T' width='35%'></td></tr>\n"; // affiche les intitulés des colonnes
	echo "<tr><td class='info_recette'>".$row["Info"]."</td><td class='fiche_ingredient'>".$row["Ingredients"]."</td><td class='fiche_photo'><img src='.$url_photo.' /></td></tr>\n"; // affiche une éventuelle Info + les ingrédients + la photo
	echo "<tr><td colspan='3' align='center'><a href='index.php?page=Glossaire_AC&lang=Fr'>&nbsp;Glossaire&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Ustensiles&lang=Fr'>&nbsp;Ustensiles&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Trucs_A&lang=Fr'>&nbsp;Trucs & Astuces&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Crustaces1&lang=Fr'>&nbsp;Info crustacés&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Intro_produits&lang=Fr'>&nbsp;Info produits&nbsp;</a>&nbsp;&nbsp;<a href='index.php?page=Intro_labels&lang=Fr'>&nbsp;Info Produits AOC&nbsp;</a></td></tr>\n";
    echo "<tr><td class='fiche_recette' colspan='3'>".$row["Preparation"]."</td></tr>\n"; // affiche la préparation.
	echo "<tr><td class='fiche_auteur' colspan='3' align='right'>".$row["Auteur"]."</td></tr>\n";  // affiche l'auteur de la recette
	echo "</table>\n</div>";
mysql_close();
?>
<br />
<table width="70%" align="center" border="0" cellspacing="0" cellpadding="0">
	<tr>
		<td>&nbsp;</td>
		<td width="20%" align="center">&nbsp;</td>
		<td width="20%" align="center"><a href="Javascript:history.go(-1)">&nbsp;Précédente&nbsp;</a></td>
	</tr>
</table>

0
ok et quelle est l'erreur qui s'affiche ?

je vois deja une erreur que ta pas corrigé :
dans ta requete il ya encore une virgule en trop après auteur
$select = "select Type, Nom, Info, Ingredients, Photo, Preparation, Auteur, FROM recettes WHERE ID='$ID'";
0
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 520
26 nov. 2010 à 14:15
Ouaouhhhhh ! décidément....
J'ai corrigé (et l'erreur était:
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 'FROM recettes WHERE ID=''' at line 1

Maintenant ça ne m'affiche pas le contenu de la table. Je fais une pause, chti café, et je regarde. Tu peux le constater sur http://txiki.free.fr

Break... mais je reprends après un peu de réflexion.

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