Bonjour,
Je me suis mis recemment dans l'univers du PHP. Bref, j'essaye de faire une page web ayant trois liste déroulante où il y a deux qui sont reliées entre eux. En effet, il s'agit de gérer des clés dans un établissement, les trois liste déroulante indique le nom et le prénom du client, le numéro de la clé et le numéro de la copie (qui dépend du numéro de la clé).
J'ai réussi à coder les trois liste déroulante en utilisant ajax dans mon code. Mais mon problème maintenant est comment capturer les données dans ces listes dans la variable POST afin de les traiter et enregistrer dans ma base données cette réservation.
Je mets à votre disposition les parties de codes concerné et je vous remercie d'avance.
la page web à afficher takekey.php :
<html>
<head>
<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>
<script>
function getKeynum(val) {
$.ajax({
type: "POST",
url: "inc/ajax.php",
data: "keynum="+val+"&action=getKeynum",
success: function(data){
//console.log(data);
$("#keycopy").html(data);
}
});
}
</script>
</head>
<body>
<?php
include 'inc/database.php';
include 'inc/methods';
include 'inc/ajax.php';
$sql ="select concat(first, ' ', last) as utilisateur from client order by utilisateur";
$option = dropdown_populate($db, $sql, 'utilisateur');
?>
<form action="bookprocess.php" method="post">
<p><label>Client</label></p>
<select name="client">
<option selected="client">Choisir un client</option>
<?php
foreach ($option as $client) { ?>
<option value="<?= $client ?>"><?= $client ?></option>
<?php
}?>
</select>
<?php
$sql = "select keynum from clef where keystatus = 'available' GROUP BY keynum";
$option = dropdown_populate($db, $sql, 'keynum');
?>
<p><label>Clé disponible</label></p>
<select name="cle" onchange="getKeynum(this.value)">
<option selected="cle">Choisir une clé</option>
<?php
foreach ($option as $key) { ?>
<option value="<?= $key ?>"><?= $key ?></option>
<?php
}
?>
</select>
<p><label>Copie de clé</label></p>
<select name="copy" id="keycopy">
<option selected="copy">Choisir une copie</option>
</select>
<?php
$_POST = array();
?>
</br><input type="button" name="submit" value="renvoyer">
</form>
</body>
</html>
le fichier database.php :
<?php
$DBHOST='localhost';
$DBUSER='root';
$DBPASS='';
$DBNAME='keys';
$db = new PDO("mysql:host=$DBHOST;dbname=$DBNAME",$DBUSER,$DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
le fichier ajax.php
<?php
include 'database.php';
//include 'resources/jquery.1.12.0.min.js';
$action = "";
if(isset($_POST['action']))
{
$action = $_POST['action'];
}
switch($action)
{
case 'getKeynum':
$keynum = $_POST["keynum"];
$option1 = array();
$stmt = $db->prepare("select keycopy from clef where keynum ='". $keynum . "' and keystatus = 'available'");
//$stmt->bindParam(':keynum', $keynum);
$stmt->execute();
$row = $stmt->fetchall(PDO::FETCH_ASSOC);
//var_dump($stmt);
for ($i = 0; $i < $stmt->rowCount(); $i++) {
$option1[$i] = $row[$i]['keycopy'];
}
$html = "<option selected='cle'>Choisir une clé</option>";
foreach ($option1 as $value)
{
$html .= "<option value='" .$value."'> " .$value. " </option>";
}
//$result = json_encode($option1);
echo $html;
break;
}
le fichier methods.php
function dropdown_populate($db, $sql, $index)
{
$stmt = $db->prepare($sql);
$stmt->execute();
$row = $stmt->fetchall(PDO::FETCH_ASSOC);
for ($i = 0; $i < $stmt->rowCount(); $i++) {
$option[$i] = $row[$i][$index];
}
return $option;
}
Si tu fais un var_dump
de ton $_POST
après la validation du formulaire tu verras ce que te retourne les select,
$_POST['client']
$_POST['cle']
$_POST['copy']
Ce qui est posté par ajax tu peux récupérer car à la variable REQUEST..
Je m'explique, si dans ta requête AJAX, tu postes par exemple val, tu peux faire $mavariable = $_REQUEST['val'];
@Keller
oui quand j'inspecte la page ça me donne bel et bien toutes les valeurs dans mes balises HTML
Bonsoir.
Si tu utilises une requête en ajax, soit via javascript, pourquoi est-ce que tu inclues la page concernée ?
Ta requête sera faite via l'url.
Par contre, pourquoi est-ce que tu vides la variable $_POST
dans ton formulaire ?