Je veux insérer dans une table les deux valeurs liées qui s'affichent suite à la sélection de l'une.
A l'aide du code ci-dessous, lorsque je soumets mon formulaire, seule l'id s'insère dans la colonne id, les colonnes region et department affichent NULL , alors que je veux qu'il soit insérer la région et le département correspondant. Après plusieurs tentatives vaines, je vous remercie d'avance pour votre précieuse expertise!
Code : Tout sélectionner
<?php
include(connex.php);
if(isset($_POST['ok'])&&($_POST["region"])&&($_POST["department"])&&!empty($_POST["region"])&&!empty($_POST["department"])){
try{
// Connexion au serveur
$dbco = new PDO("mysql:host=$serveur;dbname=$base",$user,$mdp);
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Ajout de la valeur dans la table
$sth = $dbco->prepare("INSERT INTO resume_region(region,department)
VALUES(:region,:department)");
$sth->bindParam(':region',$region);
$sth->bindParam(':department',$department);
$sth->execute();
}
catch(PDOException $e){
echo 'Impossible de traiter les données. Erreur : '.$e->getMessage();
}
}
?>
<?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)
include(connex.php);
$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
?>
</header>
<h3>Choix de la region</h3>
<?php
if (isset($_POST['ok']) && isset($_POST['department'])&& $_POST['department'] != "") {
echo <<<html
<p>Vous avez sélectionné le departement {$_POST['department']} dans la region {$_POST['region']}
</p>
html;
}
?>
<h3>Trouver un departement</h3>
<form method="post" name="chgdepart">
<fieldset>
<legend>Sélectionnez une region</legend>
<select type="varchar" name="region" id="region" onchange="document.forms['chgdepart'].submit();" required>
<option value="">- - - Choisissez une catégorie - - -</option>
<?php
$rech_region = $connexion->query('SELECT id_region, region FROM t_region ORDER BY id_region');
if ($rech_region !== false) {
while ($data = $rech_region->fetch(PDO::FETCH_ASSOC)) {
echo '<option value="',$data['id_region'],'"';
if(!empty($_POST['region']) && $_POST['region'] == $data['id_region']){
echo ' selected="selected"';
}
echo '>',$data['region'],'</option>';
}
$rech_region->closeCursor();
}
echo '</select><br />';
if (!empty($_POST['region'])){
/* Cération de la requête pour avoir les départements de cette région */
$stmt = $connexion->prepare('SELECT id_departement,department FROM departement WHERE id_region = :id ORDER BY id_departement');
$stmt->bindParam(':id',$_POST['region']);
$stmt->execute();
echo '<select type="varchar" name="department" id="department">';
while($data = $stmt->fetch(PDO::FETCH_ASSOC)){
echo '<option value="',$data['id_departement'],'"';
if(!empty($_POST['department']) && $_POST['department'] == $data['id_departement']){
echo ' selected="selected"';
}
echo '>',$data['department'],'</option>';
}
$stmt->closeCursor();
echo '</select>';
}
?>
<br />
<input type="submit" name="ok" id="ok" value="Envoyer" />
</fieldset>
</form>
</body>
</html>