IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Aide pour projet de gestion de recettes de cuisine


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Points : 7
    Points
    7
    Par défaut Aide pour projet de gestion de recettes de cuisine
    Bonjour à toutes et à tous,

    Je suis débutante en BDD/PHP/MySQL (oui je sais ça fait beaucoup) et j'aimerais solliciter votre aide et vos bons conseils.

    Si jamais je poste dans le mauvais forum merci de m'en excuser par avance.

    Je pense qu'il est bon de prendre le temps de vous conter mon parcours :

    J'ai commencé ici à découvrir le monde merveilleux des BDD en m'initiant aux joies des MCD et autres MLD avant de finir en beauté avec un MPD et un script DDL

    Vous trouverez en PJ une copie de mon MLD qui vous permettra d'avoir une idée plus précise de mon projet.
    Vous trouverez ici le lien vers le fil de discussion initial.

    Le point de départ de mon projet est que je possède énormément de livres de cuisine et de recettes.
    J'aimerais créer un site internet en PHP/MySQL que je puisse alimenter via un formulaire pour ensuite faire des recherches dessus.
    Petite précision, afin de tout avoir en ligne (de façon privée) j'ajouterai un lien vers le PDF de la recette. Pas besoin donc de taper les recettes en PHP puisque la recette sera déjà dans un fichier pdf.

    Je débute donc en PHP/MySQL et à peine mes tables créées que je suis déjà bloquée.

    Voici ce que j'essaye de faire afin de m'entraîner et bien comprendre le processus de "peuplement" d'une table à partir d'un formulaire en PHP

    Ma base de données dans MySQL se nomme : "cuisine"
    La table que j'essaye de remplir via le formulaire est une table toute simple dont le nom est "auteur", elle possède deux champs, le premier est "ID_auteur" (auto incrémenté) et le second est "AUTEUR", il contiendra les noms des auteurs de livres que je possède.

    J'ai commencé à écrire une page = formulaire_bdd.php qui me demande le nom d'un auteur qui sera stockée dans la variable "$_POST[nom_auteur]" cette variable sera utilisée dans la page "alim_bdd.php" où se trouvera la commande "INSERT INTO" afin d'ajouter l'entrée dans la table, voici le code de ces deux pages

    D'abord le code du formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Base de Donnée Cuisine</title>
        </head>
     
        <style>
        form
        {
            text-align:center;
        }
        </style>
     
        <body>
     
    		<form action="alim_bdd.php" method="post">
    			<p>
    				<label for="nom_auteur">Nom de l'auteur</label> : <input type="text" name="nom_auteur" id="nom_auteur" /><br />
    				<input type="submit" value="Envoyer" />
    			</p>
    		</form>
        </body>
    </html>
    Voici maintenant le code de ma page (=alim_bdd.php) qui doit ajouter l'entrée à ma table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=cuisine;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    // On ajoute une entrée dans la table auteur
         $bdd->exec('INSERT INTO auteur VALUES ('$_POST['nom_auteur']')');
    ?>
    Je m'arrache les cheveux depuis quelques heures car j'ai invariablement cette erreur : Parse error: syntax error, unexpected '$_POST' (T_VARIABLE)

    Au début je me suis dit que la variable $_POST['nom_auteur'] ne contenait peut-être rien mais j'ai fait des tests et la variable est correctement remplis après envoi du formulaire.

    Y-aurait-il une âme charitable afin de m'aider ?

    Nom : MLD.JPG
Affichages : 2128
Taille : 46,4 Ko

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu t'es simplement emmêlé entre les "et les ' dans ta chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $bdd->exec('INSERT INTO auteur VALUES ("' . $_POST['nom_auteur'] . '")');
    mais ce n'est pas comme ça qu'il faut traiter la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sth = $bdd->prepare('INSERT INTO auteur VALUES (:nom_auteur)');
    $sth->execute(array(':nom_auteur'=>$_POST['nom_auteur']));
    Pour notamment des raisons de sécurité, on ne met pas directement dans la requête une valeur qui n'est pas sûre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Merci sabotage pour ta réponse, je me doutais bien que c'était un souci de ' ou de ", pas facile quand on n'a pas l'habitude.
    Merci aussi de m'avoir fait remarqué que la "préparation" d'une requête était plus sûre niveau sécurité ! Je ne voulais pas me compliquer le code alors que je galère déjà avec de simples commandes

    J'ai maintenant pu ajouter 3 entrées à ma table auteur, et j'essaye d'écrire un script qui puisse simplement me lister et m'afficher le contenu de cette table... visiblement je ne dois pas être douée parce que cela fait 1 heure que je cherche et que je ne trouve pas...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    <?php
    // Connexion à la base de données
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=cuisine;charset=utf8', 'root', '');
    	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    // Récupération du contenu de la table auteur
    $reponse_auteur = $bdd->query("SELECT * FROM auteur");
     
    // Affichage du contenu de la table 
    while ($donnees_auteur = $reponse_auteur->fetch())
    {
    ?>
    ID auteur : <?php echo $donnees_auteur['ID_auteur']; ?>
    Nom auteur : <?php echo $donnees_auteur['auteur']; ?>
    <?php
    }
    $reponse->closeCursor();
    ?>
    Voici l'erreur qui m'est retournée : Notice: Undefined index: ID_auteur (...) ligne 22 et Notice: Undefined index: auteur (...) ligne 23

    En annexe ma table "auteur"

    Merci par avance de votre aide et bien désolée de vous poser des questions aussi simples...

    Nom : table_auteur.JPG
Affichages : 1653
Taille : 41,7 Ko

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    bonjour,
    le nom du champ 'ID_auteur' n'existe pas, il existe plutôt 'ID_AUTEUR'.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $donnees_auteur['ID_auteur']
    doit être remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $donnees_auteur['ID_AUTEUR']
    la même chose pour 'auteur'.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Bonjour Toufik83 et merci pour ta réponse !

    Je suis au bout de ma vie... la casse... je n'avais pas pensé à la casse.... quand je pense au temps que j'ai perdu.
    Mais bon, c'est en faisant des erreurs qu'on progresse je suppose

    Merci en tout car cela fonctionne.

    Je laisse le sujet "ouvert" car je prends les problèmes les uns après les autres et ne souhaite pas créer de nouveaux post à chaque fois.

    A très vite pour d'autres interrogations

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    je te conseille d'écrire les noms des tables et des champs SQL entièrement en minuscules.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Rebonjour à toutes et à tous,

    Bon, petite victoire pour moi, ne vous moquez pas mais j'ai réussi à faire un formulaire qui demande le nom du livre et le nom de son auteur.
    Après validation j'arrive à faire en sorte que mes deux tables "auteur" et "livre" se remplissent correctement.

    Dans ma base de données "cuisine" j'ai une table "de jonction" (est-ce le bon terme?) = "AVOIR" qui est composée de deux clés étrangères, à savoir la clé primaire de la table "auteur" (=ID_auteur) et la clé primaire de la table "livre" (=ID_livre) (cf MLD de mon premier post)

    Questions : Comment faire pour que lors de l'ajout d'un livre et de son auteur cette table se remplisse correctement avec les bons ID ?

    Pourriez-vous SVP me mettre sur la voie ? J'avance petit à petit en essayant de bien comprendre chaque étape

    Merci d'avance !

  8. #8
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 396
    Points : 4 825
    Points
    4 825
    Par défaut
    il y a deux méthodes que tu peux suivre, la première c'est d'utiliser les trigger mysql : Exemple du forum.

    la deuxième méthode est de le faire manuellement avec PDO::lastInsertId(). (le 3éme exemple est le PDO)

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Merci Toufik83 pour les pistes, que je m'en vais explorer dès que possible.

    Je reviens ici vous faire part de mes avancées et certainement aussi de mes déboires.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Petit aparté pour l'erreur précédente.

    Quand tu recois une erreur
    Notice: Undefined index: ID_auteur (...)
    Il faut contrôler ce que contient le tableau en question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($donnees_auteur);
    Comme ça tu vois les index qui existent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Invité
    Invité(e)
    Par défaut
    Avant de continuer, il faut faire une pause et analyser la situation.

    As-tu vraiment besoin de cette table de JOINTURE ?

    1- En effet, si UN livre NE peut avoir QU'UN SEUL auteur, on peut mettre directement l'id_auteur DANS la table livre (c'est le plus simple)

    2- Par contre, si un livre peut avoir PLUSIEURS auteurs, alors OUI, il faut une table de JOINTURE.

  12. #12
    Futur Membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Merci sabotage pour l'astuce que je note bien précieusement !

    @jreaux :

    En effet je me suis aussi posée la question et je me suis dis que quitte à faire une BDD autant la faire en prévoyant le maximum de souplesse.

    De plus certains livres ont en effet plusieurs auteurs d'où cette table de jonction.

    Et puis de toute façon dans mon MLD j'ai encore deux autres tables de jonctions à réaliser donc... si je comprends le principe pour une j'espère pouvoir l'appliquer pour les deux autres.

    J'ai regardé ton lien sur les triggers mais je ne vois (pour le moment) pas la façon de procéder.
    J'ai passé pas mal de temps à regarder le cours mais il va falloir que je le digère un peu.

    Si j'ai le temps aujourd'hui je me pencherai sur les PDO.

    Merci en tout cas de vos remarques pertinentes.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Je me suis fait la même réflexion... et la même conclusion.
    L'important est d'y avoir réfléchi. Et d'agir en connaissance de cause.

    Quant à TRIGGER, je n'ai jamais utilisé...

    Par contre, on récupère facilement l'id créé en PHP via lastInsertId() :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sth = $bdd->prepare('INSERT INTO auteur VALUES (:nom_auteur)');
    $sth->execute(array(':nom_auteur'=>$_POST['nom_auteur']));
    $id_auteur = $sth->lastInsertId();
    Idem pour id_livre.
    On peut alors les insérer dans la table de jointure.

    Attention cependant à ne pas insérer x fois le même couple id_auteur / id_livre.

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    @jreaux62 : Mais c'est parfait cette commande !
    Merci pour le bout de code qui me permet de comprendre et d'appliquer assez facilement ce concept !

    Je reviens vers vous pourla suite

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    En attendant de pouvoir tester la nouvelle commande que jreaux62 m'a faite découvrir je me suis penchée sur un autre cas, j'essaye de peupler ma base de nom d'auteur mais j'aimerais faire en sorte qu'à l'ajout d'un nouvel auteur il y ait un test afin de savoir si cet auteur n'existe pas déjà dans la table afin de ne pas avoir de doublons.

    Rigolez pas mais voici le petit script que j'ai essayé de faire et qui, bien sûr, ne fonctionne pas...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?php
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=cuisine;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    // On teste si le nom renvoyé par le formulaire existe déjà dans le champs NOM_AUTEUR de la table auteur
     
             // J'essaye de mettre dans la variable $liste_auteur le contenu du champs NOM_AUTEUR de ma table auteur
    	 $liste_auteur = $bdd->query("SELECT NOM_AUTEUR FROM auteur")
     
             // Je compare le contenu des deux deux variables
    	 if ($_POST['nom_auteur'] = $liste_auteur)
             // Si le contenu est le même alors j'indique que ce nom existe déjà
    	 {
    		 echo "Ce nom existe déjà dans la BDD"
    	 }
             // Sinon j'autorise l'ajout de l'auteur dans la table auteur
    	 else
    	 {
    		$bdd->exec('INSERT INTO auteur VALUES (NULL, "' . $_POST['nom_auteur'] . '")');
    	  }
    ?>
     
    <p>Si tu veux ajouter un nouvel auteur de livre, <a href="formulaire_auteur_bdd.php">clique ici</a>.</p>
    Visiblement il y a des choses incorrectes dans mon code

  16. #16
    Invité
    Invité(e)
    Par défaut
    Visiblement, il faut apprendre à utiliser PDO...


  17. #17
    Invité
    Invité(e)
    Par défaut
    Encore un sujet de REFLEXION, AVANT de coder :

    Le principe :
    • tu proposes d'ajouter un LIVRE.
    • pour CE livre, tu proposes d'ajouter l'AUTEUR

    ALORS, au lieu d'avoir simplement un input "auteur", tu peux afficher :
    • une liste déroulante* de TOUS les auteurs DEJA enregistrés (dans laquelle on peut choisir le bon !)
    • un input "auteur", au cas où il n'est pas dans la liste


    * liste déroulante : suite à une requête SELECT dans la table des auteurs.

  18. #18
    Futur Membre du Club
    Femme Profil pro
    Technicien réseau
    Inscrit en
    Février 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2018
    Messages : 19
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    J'ai laissé tomber (pour l'instant) quelques fonctionnalités pour en essayer d'autres.

    Petit résumé d'où j'en suis, j'ai réalisé quelques pages en php afin d'alimenter ma base de donnée plus simplement. Bien sûr il manque pas mal de choses comme la vérification des doublons lors de l'ajout d'un auteur par exemple. Mais j'y reviendrai plus tard.

    La fonctionnalité qui m'intéressait le plus était que en tapant un mot-clé, celui-ci m'affiche le (ou les) recette(s) correspondante(s) et les liens permettant d'y accéder.

    Le plus gros challenge pour moi, a priori, était de faire les requêtes SQL... et bien devinez quoi ?
    Contre toute attente j'ai réussi, assez facilement, à construire les requêtes correctes, grosse danse de la joie à la maison
    Bon... bien sûr c'est très très loin d'être parfait, il faudrait rajouter le fait que ce ne soit pas sensitif à la casse, que l'on puisse mettre plusieurs mots-clés au lieu d'un seul etc...
    Mais chaque chose en son temps

    Par contre là où je galère le plus, et où je sollicite votre aide, c'est dans la mise en forme de la réponse à la requête.

    Idéalement j'aimerai avoir un petit tableau construit comme ça :

    • Nom Recette / Lien


    Voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?php
    // A partir d'un mot clé, affiche le nom des recettes ET leur lien
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=cuisine;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    // A partir du mot-clé on cherche le nom de la recette dans la bdd !!!
     
    		$reponse_nom_recette = $bdd->query('
    			SELECT recette.NOM_RECETTE AS nom
    			FROM recette
    			INNER JOIN posseder
    				ON recette.ID_RECETTE = posseder.ID_RECETTE
    			INNER JOIN mots_cles
    				ON posseder.ID_CLES = mots_cles.ID_CLES
    			WHERE MOT_CLE = "' . $_POST['rech_mot_cle'] . '"
    			');
     
    		while ($affich_nom_recette = $reponse_nom_recette->fetch())	{
     
    			// Affichage des noms de recette
    			echo "NOM Recette : ".$affich_nom_recette['nom']."<br>";
    		}
     
    // On cherche le lien de la recette à partir du mot-clé
     
    		$reponse_lien_recette = $bdd->query('
    			SELECT lien.LIEN_FICHIER AS lien
    			FROM lien
    			INNER JOIN recette
    				ON lien.ID_RECETTE = recette.ID_RECETTE
    			INNER JOIN posseder
    				ON recette.ID_RECETTE = posseder.ID_RECETTE
    			INNER JOIN mots_cles
    				ON posseder.ID_CLES = mots_cles.ID_CLES
    			WHERE MOT_CLE = "' . $_POST['rech_mot_cle'] . '"
    			');
     
     
    		while ($affich_lien_recette = $reponse_lien_recette->fetch())	{
     
    			// Affichage des liens
    			echo "<a href=$affich_lien_recette[lien]>Lien</a><br>";
     
    		}
    		$reponse_nom_recette->closeCursor();
    		$reponse_lien_recette->closeCursor();
    ?>
    Comme vous vous en doutez cela m'affiche les lignes les unes au dessous des autres.
    Par exemple pour le mot-clé "poulet" j'ai ça :

    • NOM Recette : Poulet ail basilic et sauce Tomate au beurre
    • NOM Recette : Poulet sauce Satay
    • NOM Recette : Gratin de coquillettes au Reblochon
    • Lien (de la 1ère recette)
    • Lien (de la 2ème recette)
    • Lien (de la 3ème recette)

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    c'est pourtant simple : il suffit d'une seule requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    // A partir du mot-clé on cherche le nom de la recette dans la bdd !!!
    		$reponse_nom_recette = $bdd->query('
    			SELECT 
    			  recette.NOM_RECETTE AS nom,
    			  lien.LIEN_FICHIER AS lien
    			FROM recette
    			INNER JOIN lien
    				ON lien.ID_RECETTE = recette.ID_RECETTE
    			INNER JOIN posseder
    				ON recette.ID_RECETTE = posseder.ID_RECETTE
    			INNER JOIN mots_cles
    				ON posseder.ID_CLES = mots_cles.ID_CLES
    			WHERE MOT_CLE LIKE "%' . $_POST['rech_mot_cle'] . '%"
    			');
    ?>
    	<table>
    	<thead>
    	<tr>
    		<th>Recette</th>
    		<th>Lien</th>
    	</tr>
    	</thead>
    	<tbody>
    <?php
    		while ($affich_nom_recette = $reponse_nom_recette->fetch()) {
    ?>
    	<tr>
    		<td><?php echo $affich_nom_recette['nom']; ?></td>
    		<td><a href=<?php echo $affich_lien_recette[lien]; ?>>Voir</a></td>
    	</tr>
    <?php
    		}
    ?>
    	</table>
    A noter : LIKE '%...%'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			WHERE MOT_CLE LIKE "%' . $_POST['rech_mot_cle'] . '%"

  20. #20
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par jreaux62
    Attention cependant à ne pas insérer x fois le même couple id_auteur / id_livre.
    Conscience, je reviens sur cette remarque de jreaux.
    Il faut agir sur 2 plans complémentaires pour empêcher la saisie de doublons :
    - poser une clé d'unicité sur ta table directement dans ta base.
    - coder une fonction PHP de vérification de non doublon dans ton script.

    Ca peut paraître redondant, et ça l'est, mais la sécurité (ici la cohérence et l'intégrité des données) implique ce double checking.

    Pour le 1, il faut passer par phpMyAdmin, et poser un index sur plusieurs clés, en répondant à cette problématique : "Je ne veux pas voir 2 fois le même titre associé au même auteur". Donc c'est une clé posée sur 2 champs, livre_id et auteur_id, et ensuite tu choisis "unique". Ensuite, si tu fais un test dans phpmyadmin, il va te jeter quand tu saisis un doublon selon les critères que tu as définis. Contrairement à ce qu'un débutant peut penser, rien n'est géré par défaut en matière de doublon.

    Et tu nous plais bien, ici, car tu es une bosseuse, qui a goût à ce que tu fais, débutante mais bosseuse !
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. besoin d'aide pour projet
    Par donromanino dans le forum C++
    Réponses: 5
    Dernier message: 02/04/2006, 19h35
  2. Aide pour projet avec carte asi candibus
    Par sinicha dans le forum C
    Réponses: 13
    Dernier message: 16/01/2006, 16h32
  3. Réponses: 3
    Dernier message: 27/12/2005, 11h30
  4. [LG] Aide pour logiciel de gestion de bibliothèque
    Par ajkidbsb dans le forum Langage
    Réponses: 1
    Dernier message: 08/09/2005, 22h04
  5. Aide pour projet : schéma & SGBD
    Par Grubshka dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 11/04/2005, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo