Dans la refonte de mon site, j'aurais besoin de conseils sur une manière de faire.
J'explique :
D'un côté on a une partie backoffice qui me permet d'ajouter/supprimer/éditer des news/portées/chiens/articles etc...
Pas mal de choses sont déjà fonctionnelles, ce qui me permet d'automatiser la refonte de mon site beaucoup plus vite.
Cependant, je bloque sur une chose que j'aimerais faire. Je ne sais pas trop comment m'y prendre.
J'ai une bdd avec plusieurs tables (chiens/portées/news....), chaque table contient une colonne id_chiens/id_portee etc...
Je saisis une portée via le formulaire, ensuite la portée s'affiche sur le site via la page liste_portee_canecorso.php. Cette page m'affiche donc toutes les portées saisies via une boucle. Donc là, aucun soucis pour afficher les parents, il suffit de récupérer le nom des chiens dans la table "portée" colonne "mère", "père".
La page portee_canecorso.php m'affiche les détails d'une portée sur laquelle j'aurais cliqué ( ex : portee-canecorso.php?id=1). Cette page m'affiche les colonnes de la table "portée", mais aussi la possibilité de revenir sur la page des parents comme le montre la capture.
Le souci, c'est que je ne sais pas comment m'y prendre pour qu'on arrive sur les parents correspondants à la portée, d'autant que les détails des parents sont contenus dans la table "chiens". Pourtant je suis certain que la solution est simple.
Pour le href, j'imagine qu'on pourrait faire comme ca.
<a href="chiens-canecorso.php?id=<?= $c['id_chiens'] ?>" title="En savoir plus sur ce chien"></a>
Mais encore une fois comment faire pour que "id_chiens" corresponde bien aux chiens de la portée?
Voila j'espere avoir été assez explicite.
Pour la petite histoire, je n'ai pas vraiment de cursus dans le web dev, mais j'apprends via tuto/video/copier-coller. J'attaque sous peu la formation Web dev junior de Openclassroom, mais j'ai pas envie d'attendre la fin de cette formation pour reprendre mon site en main quitte à revenir sur certaines choses par la suite.
ta conception est "à peu près" bonne, la logique y est mais l'application non.
Si je prends deux tables:
chien(id,nom,pere,mere,...)
elle peut être créée avec cette requête:
create table chien (
id bigint(20) not null auto_increment,
nom varchar(100) not null default "nom chien",
date_naissance DATETIME
pere bigint(20) not null,
mere bigint(20) not null
-- etc...
primary key (id)
)
Pour avoir le père d'un chiot il suffit de faire:
SELECT nom, date_naissance
FROM chien
WHERE id = (SELECT pere FROM chien WHERE id=<id_chiot>)
Pour la table portée ne devrait pas exister car une portée est "l'ensemble des chiot nés le même jour d'une même mère":
SELECT *
FROM chien
WHERE mere = <id_mere>
AND date_naissance = <la_date>
OU sur un chien en particulier
SELECT *
FROM chien
WHERE mere = <id_mere_chiot>
AND date_naissance = <la_date_naissance_chiot>
Page ajout_portee.php en backoffice. Cette page me permet d'ajouter une portée à la BDD, mais je ne rentre pas de chiot (ou simplement le nombre de chiot dans la portée).
<?php require_once ('includes/meta.inc.php') ?>
<body>
<header>
<!--MENU-->
<section>
<?php require_once ('includes/menu.inc.php') ?>
</section>
<!-- END MENU-->
</header>
<div class="clear"></div>
<section class="ss-bandeau">
<h2>Ajouter une portée</h2>
</section>
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<form method="POST" enctype="multipart/form-data">
<!-- Connexion à la base de données -->
<?php require_once('includes/condb.inc.php'); ?>
<?php
$message_class = 'alert-danger';
$message = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if (!empty($_POST['mere']) AND !empty($_POST['pere']) AND !empty($_POST['date_saillie']) AND !empty($_POST['gestation']) AND !empty($_POST['date_naissance']) AND !empty($_POST['dispo']) AND !empty($_POST['adn']) AND !empty($_POST['dysplasie_mere']) AND !empty($_POST['dysplasie_pere']) AND !empty($_POST['robe']) AND !empty($_POST['methode']) AND !empty($_POST['ts_mere']) AND !empty($_POST['ts_pere']) AND !empty($_POST['chiot_f']) AND !empty($_POST['chiot_m']) AND !empty($_POST['reservation']) AND !empty($_POST['lettre'])) {
// Insertion du message à l'aide d'une requête préparée
$req = $bdd->prepare('INSERT INTO portee (mere, pere, date_saillie, gestation, date_naissance, dispo, adn, dysplasie_mere, dysplasie_pere, robe, methode, ts_mere, ts_pere, chiot_f, chiot_m, reservation, lettre) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
$req->execute(array($_POST['mere'], $_POST['pere'], $_POST['date_saillie'], $_POST['gestation'], $_POST['date_naissance'], $_POST['dispo'], $_POST['adn'], $_POST['dysplasie_mere'], $_POST['dysplasie_pere'], $_POST['robe'], $_POST['methode'], $_POST['ts_mere'], $_POST['ts_pere'], $_POST['chiot_f'], $_POST['chiot_m'], $_POST['reservation'], $_POST['lettre']));
$message_class = 'alert-success';
$message = 'Votre portée a bien été ajoutée.';
} else {
$message = 'Veuillez remplir tous les champs';
}
}
?>
<!--MESSAGE ALERT -->
<?php if ($message): ?>
<div class="container-fluid">
<div class="row">
<section class="bloc-content">
<p class="alert <?= $message_class ?> t-center"><?= htmlspecialchars($message) ?></p>
</section>
</div>
</div>
<?php endif ?>
<!--STOP MESSAGE ALERT -->
<!--CHAMP MERE-->
<div class="form-group">
<label for="mere">Mère :</label>
<select name="mere" id="mere" class="form-control">
<?php $chiens = $bdd->query('SELECT * FROM chiens WHERE sexe = "Femelle"');
while($c = $chiens -> fetch()) { ?>
<option class="form-control" id="mere" type="text" name="mere" placeholder="Nom de la mère" /><?= $c['nom']." ".$c['affixe']?></option>
<?php } ?>
</select>
</div>
<?php $chiens->closeCursor(); ?>
<!--STOP CHAMP MERE-->
<!--CHAMP PERE-->
<div class="form-group">
<label for="pere">Père :</label>
<select name="pere" id="pere" class="form-control">
<?php $chiens = $bdd->query('SELECT * FROM chiens WHERE sexe = "Mâle"');
while($c = $chiens -> fetch()) { ?>
<option class="form-control" id="pere" type="text" name="pere" placeholder="Nom du père" /><?= $c['nom']." ".$c['affixe'] ?></option>
<?php } ?>
</select>
</div>
<?php $chiens->closeCursor(); ?>
<!--STOP CHAMP PERE-->
<div class="form-group">
<label for="date_saillie">Date de la saillie :</label>
<input class="form-control" id="date_saillie" type="date" name="date_saillie" placeholder="date_saillie" />
</div>
<div class="form-group">
<label for="gestation">Gestation confirmé :</label>
<select name="gestation" id="gestation" class="form-control">
<option class="form-control" id="gestation" type="text" name="gestation" placeholder="Oui" />Oui</option>
<option class="form-control" id="gestation" type="text" name="gestation" placeholder="Non" />Non</option>
</select>
</div>
<div class="form-group">
<label for="date_naissance">Naissance prévu le :</label>
<input class="form-control" id="date_naissance" type="date" name="date_naissance" placeholder="date_naissance" />
</div>
<div class="form-group">
<label for="dispo">Disponible vers le :</label>
<input class="form-control" id="dispo" type="date" name="dispo" placeholder="dispo" />
</div>
<div class="form-group">
<label for="adn">Identification ADN des parents :</label>
<select name="adn" id="adn" class="form-control">
<option class="form-control" id="adn" type="text" name="adn" placeholder="Seulement la mère" />Seulement la mère</option>
<option class="form-control" id="adn" type="text" name="adn" placeholder="Seulement le père" />Seulement le père</option>
<option class="form-control" id="adn" type="text" name="adn" placeholder="Oui" />Oui</option>
<option class="form-control" id="adn" type="text" name="adn" placeholder="Non" />Non</option>
</select>
</div>
<div class="form-group">
<label for="dysplasie_mere">Dysplasie de la mère:</label>
<select name="dysplasie_mere" id="dysplasie_mere" class="form-control">
<option class="form-control" id="dysplasie_mere" type="text" name="dysplasie_mere" placeholder="Non dépisté" />Non dépisté</option>
<option class="form-control" id="dysplasie_mere" type="text" name="dysplasie_mere" placeholder="Dépistage en cours" />Dépistage en cours</option>
<option class="form-control" id="dysplasie_mere" type="text" name="dysplasie_mere" placeholder="HDA - Indemne de dysplasie" />HDA - Indemne de dysplasie</option>
<option class="form-control" id="dysplasie_mere" type="text" name="dysplasie_mere" placeholder="HDB - Etat sensiblement normal" />HDB - État sensiblement normal</option>
<option class="form-control" id="dysplasie_mere" type="text" name="dysplasie_mere" placeholder="HDC - Dysplasie légère " />HDC - Dysplasie légère</option>
<option class="form-control" id="dysplasie_mere" type="text" name="dysplasie_mere" placeholder="HDD - Dysplasie moyenne " />HDD - Dysplasie moyenne</option>
<option class="form-control" id="dysplasie_mere" type="text" name="dysplasie_mere" placeholder="HDE - Dysplasie grave " />HDE - Dysplasie grave</option>
</select>
</div>
<div class="form-group">
<label for="dysplasie_pere">Dysplasie du père:</label>
<select name="dysplasie_pere" id="dysplasie_pere" class="form-control">
<option class="form-control" id="dysplasie_pere" type="text" name="dysplasie_pere" placeholder="Non dépisté" />Non dépisté</option>
<option class="form-control" id="dysplasie_pere" type="text" name="dysplasie_pere" placeholder="Dépistage en cours" />Dépistage en cours</option>
<option class="form-control" id="dysplasie_pere" type="text" name="dysplasie_pere" placeholder="HDA - Indemne de dysplasie" />HDA - Indemne de dysplasie</option>
<option class="form-control" id="dysplasie_pere" type="text" name="dysplasie_pere" placeholder="HDB - Etat sensiblement normal" />HDB - État sensiblement normal</option>
<option class="form-control" id="dysplasie_pere" type="text" name="dysplasie_pere" placeholder="HDC - Dysplasie légère " />HDC - Dysplasie légère</option>
<option class="form-control" id="dysplasie_pere" type="text" name="dysplasie_pere" placeholder="HDD - Dysplasie moyenne " />HDD - Dysplasie moyenne</option>
<option class="form-control" id="dysplasie_mere" type="text" name="dysplasie_mere" placeholder="HDE - Dysplasie grave " />HDE - Dysplasie grave</option>
</select>
</div>
<div class="form-group">
<label for="robe">Robe attendue :</label>
<input class="form-control" id="robe" type="text" name="robe" placeholder="Robe attendue" />
</div>
<div class="form-group">
<label for="methode">Méthode d'élevage:</label>
<select name="methode" id="methode" class="form-control">
<option class="form-control" id="methode" type="text" name="methode" placeholder="Inbreeding" />Inbreeding</option>
<option class="form-control" id="methode" type="text" name="methode" placeholder="Outcrossing" />Outcroissing</option>
<option class="form-control" id="methode" type="text" name="methode" placeholder="Linebreeding" />Linebreeding</option>
</select>
</div>
<div class="form-group">
<label for="ts_mere">Test de sociabilité de la mère:</label>
<select name="ts_mere" id="ts_mere" class="form-control">
<option class="form-control" id="ts_mere" type="text" name="ts_mere" placeholder="Aucun" />Ancun</option>
<option class="form-control" id="ts_mere" type="text" name="ts_mere" placeholder="Test de caractère" />Test de caractère</option>
<option class="form-control" id="ts_mere" type="text" name="ts_mere" placeholder="CSAU" />CSAU</option>
</select>
</div>
<div class="form-group">
<label for="ts_pere">Test de sociabilité du père:</label>
<select name="ts_pere" id="ts_pere" class="form-control">
<option class="form-control" id="ts_pere" type="text" name="ts_pere" placeholder="Aucun" />Ancun</option>
<option class="form-control" id="ts_pere" type="text" name="ts_pere" placeholder="Test de caractère" />Test de caractère</option>
<option class="form-control" id="ts_pere" type="text" name="ts_pere" placeholder="CSAU" />CSAU</option>
</select>
</div>
<div class="form-group">
<label for="chiot_f">Nombre de femelles dans la portée :</label>
<input class="form-control" id="chiot_f" type="number" name="chiot_f" placeholder="Nombre de femelles dans la portée" />
</select>
</div>
<div class="form-group">
<label for="chiot_m">Nombre de mâles dans la portée :</label>
<input class="form-control" id="chiot_m" type="number" name="chiot_m" placeholder="Nombre de mâles dans la portée" />
</select>
</div>
<div class="form-group">
<label for="reservation">Nombre de réservation :</label>
<input class="form-control" id="reservation" type="number" name="reservation" placeholder="Nombre de réservation" />
</div>
<div class="form-group">
<label for="lettre">Lettre de l'année :</label>
<input class="form-control" id="lettre" type="text" name="lettre" placeholder="Lettre de l'année" />
</div>
<button type="submit" value="Ajouter le chien" class="form-control" />Ajouter la portée</button> <br />
<button type="reset" value="Recommencer" class="form-control" />Recommencer </button>
</form>
</section>
</div>
</div>
<?php var_dump($_POST); ?>
<?php require_once ('includes/footer.inc.php') ?>
Ici la page portee_canecorso.php et c'est sur cette page que je cherche à mettre en place le code. On a le détails de la portée mais aussi les 2 parents et j'aimerai qu'on puisse accéder aux infos des parents via un href par exemple. Les détails des parents sont contenu dans la table chiens( id_chiens,nom,affixe,sexe etc...). J'ai tenter de recup l'id du chien via un "input hidden" sans succées surtout que je suis forcer a priorir de le mettre dans le select du formulaire.
Une page en frontoffice qui permet de visualisé cette portée avec les infos qu'on récupère dans la table "portee". Cette page affiche aussi les parents ( les infos sont stocker dans la table "chiens" https://i.imgur.com/sDCwcdq.png ), et j'aimerai qu'on puisse accéder au détails d'un parent si on souhaite avoir plus de détails.
Le soucis, comment faire pour que les parents qu'on souhaite plus de détails correspondent à ce de la portée.
Par exemple nous avons une portée avec id_portee=1(de la table "portee"). Cette portée à la mere "Jade" qui à un "id_chiens=3" et le père Urko qui à un "id_chiens=2". Les 2 id sont stocker dans la table "chiens".
Nous avons la possibilité d'avoir plus d'infos sur un parent au choix en cliquant dessus. Mais comment rediriger vers les parents correspondant à la portée? via une conditions?
Moi je ferai une page template de données d'un chien, quel qu'il soit chiot ou adulte, avec ses informations, cette page serait appelée depuis la portée père/mère avec l'ID qui va bien.
Mais ce qui est bizarre c'est ta table portée... elle comporte quoi, car je te l'ai déjà dit, pour moi ce n'est pas une table
Moi je ferai une page template de données d'un chien, quel qu'il soit chiot ou adulte, avec ses informations, cette page serait appelée depuis la portée père/mère avec l'ID qui va bien.
Mais ce qui est bizarre c'est ta table portée... elle comporte quoi, car je te l'ai déjà dit, pour moi ce n'est pas une table
sinon, pas de table chien_femelle / chien_male, ce sont tous des chiens => dans une table chien(id,nom,id_pere(=>chien.id),id_mere(=>chien.id),id_portee(=>portee.id),etc...)
Effectivement, tu n'as aucun lien entre le chiot de la portée, la portée et le père et la mère.
Donc :
tu mets id_portee dans chien => lien vers la portée et donc les parent
De là, tu pourras via une jointure trouver les parents d'un chiot/chien.
++
Merci encore pour le temps que tu investie pour trouver la méthode.
Tu parle de chiot depuis le début, mais je ne communique pas sur les chiots, mais seulement sur une portée global. il n'y a pas de page chiot individuelle.
Donc si j'ai bien compris ce que tu dit, j'ajoute une colonne id_portee dans la table chiens?
quand tu parle d'une jointure, tu parle d'une table commune? entre portée et chien?
Il s'agit d'une relation 1 - 1 <=> 1 chien - 1 portée, donc mettre l'identifiant de la portée sur le chien est suffisant, pas besoin de tables en plus, qui te compliquera la vie plus tard.
id_portee est renseigné après que tu aies créé la portée (portee.id est en AI), tu créée un chien (chien.id en AI) avec son nom, blablabla, id_portee que tu aura mémorisé plus tôt.
Ou le plus simple est de rajouter la liste des portées disponible (j'imagine que tu créées des portées à l'avance) et tu sélectionneras la portée du chien:
Non justement, j'ajoute déjà les chiens dans la table chiens ( j'ajoute tout mon cheptel en faite), et apres j'ajoute les portées, car je sais pas vraiment à l'avance les mariages que je fait. des fois oui des fois non dépend de la chienne etc mais la c'est un autre domaine
Donc j'ai bien compris pour mémorisé l'id_portée mais si j'ajoute pas de portées pendant quelque mois ( en général tout les 6 mois ) cela m'obligera a retourner voir ma table manuellement etc.
dans la fiche chien tu ajoutes la liste des portées si et seulement si id_portee du chien n'est paas rempli (== 0) , dans ce cas tu peux lui affecter une portée plus tard, après avoir créé ta fichie chien et sans te préoccuper de la mémorisation de la portée.
Une fois la portée affectée (form + select + OK) tu affiche la portée et plus la liste.
Voila donc, j'ai ajouter manuellement une portée avec pour id=1 et id_portee sur tout les chiens
sur la page qui affiche la portée j'ai le code suivant.
<?php $chiens = $bdd->query('SELECT * FROM chiens WHERE id_portee = 8');
while($c = $chiens->fetch()) { ?>
<div class="container-fluid grid mt0">
<div class="row">
<figure class="effect-goliath col-xs-12 col-sm-12 col-lg-12">
<img class="img-responsive" src="http://lorempixel.com/1920/1080/animals/4" alt=""/>
<figcaption>
<h2>"(autre requête plus haut dans le code)<?= (htmlspecialchars($mere));?>"</h2>
<p><em><?= $c['affixe'] ?></em></p>
<a href="chiens-canecorso.php?id=<?= $c['id'] ?>" title="En savoir plus sur ce chien"></a>
</figcaption>
</figure>
</div>
</div>
<?php } ?>
dans la requête j'ai saisie manuellement pour le moment id_portée="8" et cela fonctionne. Mais pour récupère via l'id transmit dans url j'imagine que je doit passer par une condition? if isset get_id? ou !empty si isset pas nécessaire il me semble.
Mais la j'avoue je suis un peu perdu, on cherche a récupèré l'id de la portée dans l'url on est bien d'accord?
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales
Keep It Simple Stupid - SF4 conf Swift - Cours 1/4 SF4 - Exceptions PDO - Formes Normales