par
moogli » 11 janv. 2017, 16:32
salut,
on a un beau tuto sur le sujet

=>
faq-tutoriels/listes-liees-avec-html-ja ... 55580.html
si le fond de ton code
- Sépare la connexion sql dans un autre fichier que tu pourras inclure au besoin (parce que la sinon tu déclares la chose sur tout les fichiers, bonjour le merdier pour changer d'environnement, genre passage en prod).
- Si tu refait utilise PDO plutôt que mysql c'est plus sympa à l'utilisation (par exemple pour les requête préparée avec marqueurs nommés)
- utilise plutôt un foreach qu'une boucle for pour parcourir un tableau
- évite d'utiliser des accents, et plus généralement des caractères spécifique : categorie plutôt que catégorie (même si c'est pas français, utilise l'anglais si tu préfère => category).
- les `ne sont utiles que si tu utilise des mots clefs réserver SQL (ou mysql).
- tu n'as pas besoin de () avec echo
- tu n'as pas besoin de tableau intermédiaire pour stocker les données et les afficher ensuite, c'est une source d'erreur, c'est plus long, moins compréhensible etc.
- essai d'éviter le mélange php / html (avec fermeture / ouverture de tag) c'est âs simple à suivre et tu gagnes pas grand chose (voir rien) à le faire.
ton code éclairci et syntaxiquement correcte
<?php
// connexion à externalisé, utilisation de PDO pour l'exemple et la belle requête préparée plus bas (qui t'évite une injection SQL au passage)
$serveur = "localhost";
$user = "root";
$mdp = "vmec";
$base = "Liens_utiles";
$options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_ERRMODE=> PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false];
$connexion = new PDO('mysql:host='.$serveur.';dbname='.$base,$user,$mdp,$options);
if ($connexion === false) {
$msgCnxSQL = 'Un incident s\'est produit lors de la connexion à la base de données, veuillez essayer à nouveau ultérieurement';
}
?>
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Liens_utiles</title>
</head>
<body>
<?php
// si le message existe c'est qu'il y a un gros soucis. on l'affiche et on arrete le script (mais un doc html correct et propre).
if(!empty($msgCnxSQL)){
echo <<<html
<div class="erreur">{$msgCnxSQL}</div>
</body>
</html>
html;
die(666);
}
?>
<header>
<?php
include("../Header.php");
?>
</header>
<h3>Choix de la catégorie</h3>
<?php
if (isset($_POST['ok']) && isset($_POST['contenu'])&& $_POST['contenu'] != "") {
echo <<<html
<p>Vous avez sélectionné le contenu {$_POST['categorie']} dans la catégorie {$_POST['contenu']}
</p>
html;
}
?>
<h3>Trouver un contenu</h3>
<form method="post" name="chgcontenu">
<fieldset>
<legend>Sélectionnez une catégorie</legend>
<select name="categorie" id="catégorie" onchange="document.forms['chgcontenu'].submit();">
<option value="">- - - Choisissez une catégorie - - -</option>
<?php
$rech_categorie = $connexion->query('SELECT id_categorie, categorie FROM Categorie_site ORDER BY id_categorie');
if ($rech_categorie !== false) {
while ($data = $rech_categorie->fetch(PDO::FETCH_ASSOC)) {
echo '<option value="',$data['id_categorie'],'"';
if(!empty($_POST['categorie']) && $_POST['categorie'] == $data['id_categorie']){
echo ' selected="selected"';
}
echo '>',$data['categorie'],'</option>';
}
$rech_categorie->closeCursor();
}
echo '</select><br />';
if (!empty($_POST['categorie'])){
/* Cération de la requête pour avoir les départements de cette région */
$stmt = $connexion->prepare('SELECT id_contenu, contenu FROM Contenu_site WHERE id_categorie = :id ORDER BY id_contenu');
$stmt->bindParam(':id',$_POST['categorie']);
$stmt->execute();
echo '<select name="contenu" id="contenu">';
while($data = $stmt->fetch(PDO::FETCH_ASSOC)){
echo '<option value="',$data['id_contenu'],'"';
if(!empty($_POST['contenu']) && $_POST['contenu'] == $data['id_contenu']){
echo ' selected="selected"';
}
echo '>',$data['contenu'],'(',$data['id_contenu'],')</option>';
}
$stmt->closeCursor();
echo '</select>';
}
?>
<br />
<input type="submit" name="ok" id="ok" value="Envoyer" />
</fieldset>
</form>
</body>
</html>
@+
salut,
on a un beau tuto sur le sujet :mrgreen: => http://forum.phpfrance.com/faq-tutoriels/listes-liees-avec-html-javascript-t255580.html
si le fond de ton code
- Sépare la connexion sql dans un autre fichier que tu pourras inclure au besoin (parce que la sinon tu déclares la chose sur tout les fichiers, bonjour le merdier pour changer d'environnement, genre passage en prod).
- Si tu refait utilise PDO plutôt que mysql c'est plus sympa à l'utilisation (par exemple pour les requête préparée avec marqueurs nommés)
- utilise plutôt un foreach qu'une boucle for pour parcourir un tableau
- évite d'utiliser des accents, et plus généralement des caractères spécifique : categorie plutôt que catégorie (même si c'est pas français, utilise l'anglais si tu préfère => category).
- les `ne sont utiles que si tu utilise des mots clefs réserver SQL (ou mysql).
- tu n'as pas besoin de () avec echo
- tu n'as pas besoin de tableau intermédiaire pour stocker les données et les afficher ensuite, c'est une source d'erreur, c'est plus long, moins compréhensible etc.
- essai d'éviter le mélange php / html (avec fermeture / ouverture de tag) c'est âs simple à suivre et tu gagnes pas grand chose (voir rien) à le faire.
ton code éclairci et syntaxiquement correcte
[php]<?php
// connexion à externalisé, utilisation de PDO pour l'exemple et la belle requête préparée plus bas (qui t'évite une injection SQL au passage)
$serveur = "localhost";
$user = "root";
$mdp = "vmec";
$base = "Liens_utiles";
$options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_ERRMODE=> PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false];
$connexion = new PDO('mysql:host='.$serveur.';dbname='.$base,$user,$mdp,$options);
if ($connexion === false) {
$msgCnxSQL = 'Un incident s\'est produit lors de la connexion à la base de données, veuillez essayer à nouveau ultérieurement';
}
?>
<!Doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Liens_utiles</title>
</head>
<body>
<?php
// si le message existe c'est qu'il y a un gros soucis. on l'affiche et on arrete le script (mais un doc html correct et propre).
if(!empty($msgCnxSQL)){
echo <<<html
<div class="erreur">{$msgCnxSQL}</div>
</body>
</html>
html;
die(666);
}
?>
<header>
<?php
include("../Header.php");
?>
</header>
<h3>Choix de la catégorie</h3>
<?php
if (isset($_POST['ok']) && isset($_POST['contenu'])&& $_POST['contenu'] != "") {
echo <<<html
<p>Vous avez sélectionné le contenu {$_POST['categorie']} dans la catégorie {$_POST['contenu']}
</p>
html;
}
?>
<h3>Trouver un contenu</h3>
<form method="post" name="chgcontenu">
<fieldset>
<legend>Sélectionnez une catégorie</legend>
<select name="categorie" id="catégorie" onchange="document.forms['chgcontenu'].submit();">
<option value="">- - - Choisissez une catégorie - - -</option>
<?php
$rech_categorie = $connexion->query('SELECT id_categorie, categorie FROM Categorie_site ORDER BY id_categorie');
if ($rech_categorie !== false) {
while ($data = $rech_categorie->fetch(PDO::FETCH_ASSOC)) {
echo '<option value="',$data['id_categorie'],'"';
if(!empty($_POST['categorie']) && $_POST['categorie'] == $data['id_categorie']){
echo ' selected="selected"';
}
echo '>',$data['categorie'],'</option>';
}
$rech_categorie->closeCursor();
}
echo '</select><br />';
if (!empty($_POST['categorie'])){
/* Cération de la requête pour avoir les départements de cette région */
$stmt = $connexion->prepare('SELECT id_contenu, contenu FROM Contenu_site WHERE id_categorie = :id ORDER BY id_contenu');
$stmt->bindParam(':id',$_POST['categorie']);
$stmt->execute();
echo '<select name="contenu" id="contenu">';
while($data = $stmt->fetch(PDO::FETCH_ASSOC)){
echo '<option value="',$data['id_contenu'],'"';
if(!empty($_POST['contenu']) && $_POST['contenu'] == $data['id_contenu']){
echo ' selected="selected"';
}
echo '>',$data['contenu'],'(',$data['id_contenu'],')</option>';
}
$stmt->closeCursor();
echo '</select>';
}
?>
<br />
<input type="submit" name="ok" id="ok" value="Envoyer" />
</fieldset>
</form>
</body>
</html>[/php]
@+