<div id="contenu_auteur">
<?php
// Enregistrement de la requête SQl puis exécution de la requête SQL.
$query_auteur = "SELECT * FROM auteur";
$result_auteur = mysqli_query ($base, $query_auteur);
$query_bd = "SELECT CodeBd, titreBd FROM bd";
$result_bd = mysqli_query ($base, $query_bd);
?>
<!-- Liste déroulante des auteurs de la base de données -->
Auteur :
<form method="post" action ="Fonction.php">
<select name="auteur">
<?php
while ($donnees_auteur = mysqli_fetch_array($result_auteur) )
{
echo '<option value="'.$donnees_auteur["Nom"].'">'.$donnees_auteur["Nom"]." ".$donnees_auteur["Prenom"].'</option>';
}
echo '</select>'
?>
<!-- Liste déroulante des bds de la base de données -->
Bd :
<select name="bede">
<?php
$result_bd = mysqli_query ($base, $query_bd);
while ($donnees_bd = mysqli_fetch_array($result_bd) )
{
echo '<option value="'.$donnees_bd["titreBd"].'">'.$donnees_bd["titreBd"].'</option>';
}
echo '</select>'
?>
<input type="submit" value="Lier" />
</form>
</div>
function lier()
{
// Connexion à la base de données
$base = mysqli_connect('localhost', 'root','','funenbulles');
// Vérification et éxécution de la requête en cas de non problème
if (isset($_POST['bede']) & (isset($_POST['auteur'])))
{
//Requête permettant la vérification de l'existence ou non de la liaison
$query_test = "SELECT * FROM `ecrire` WHERE `CodeBd` like '".$_POST['bede']."' AND WHERE `CodeAuteur` like '".$_POST['auteur']."'";
$result_test = mysqli_query($base ,$query_test);
// Test de l'existence de l'auteur
if ($result_test = false)
{
try
{ //Exécution de la liaison
$query_lier = "INSERT INTO `ecrire`(`CodeBd`, `CodeAuteur`) VALUES ('".$_POST['bede']."','".$_POST['auteur']."')";
$result_lier = mysqli_query($base ,$query_lier);
header ('location://auteur.php');
}
catch (Exception $SQL)
{
throw new Exception('Problème SQL');
}
}
else
{
header ('location://lier_exist.php');
}
}
else
{
echo ($_POST['bede']."vide");
}
}
<?php
function lier()
{
// Connexion à la base de données
$base = mysqli_connect('localhost', 'root','','funenbulles');
// Vérification et éxécution de la requête en cas de non problème
if (isset($_POST['bede']) & (isset($_POST['auteur'])))
{
//Requête permettant la vérification de l'existence ou non de la liaison
$query_test = "SELECT * FROM `ecrire` WHERE `CodeBd` like '".$_POST['bede']."' AND WHERE `CodeAuteur` like '".$_POST['auteur']."'";
$result_test = mysqli_query($base ,$query_test);
// Test de l'existence de l'auteur
if ($result_test = false) // cette condition sera TOUJOURS VRAIE simplement parce que tu réalise une affectation et non une comparaison (utilise donc le ===)
{
try
{ //Exécution de la liaison
$query_lier = "INSERT INTO `ecrire`(`CodeBd`, `CodeAuteur`) VALUES ('".$_POST['bede']."','".$_POST['auteur']."')";
$result_lier = mysqli_query($base ,$query_lier);
header ('location://auteur.php'); // A mettre encommentaire lorsque l'on veux tester, de plus // en début de lien, si cela fonctionne c'est que les navigateur sont bien sympa. soit tu utilise un simple / et dans ce cas direction la racine du "root" (=> http://localhost en local). : a revoir.
}
catch (Exception $SQL)
{
throw new Exception('Problème SQL');
}
}
else
{
header ('location://lier_exist.php'); // a commenter quand on test !
}
}
else
{
echo ($_POST['bede']."vide"); // message d'erreur correct à utiliser plutôt ;)
}
}
?>
Fonctionnellement tu n'utilise pas les infos de ta requête il est préférable de faire un select count(*). <?php
function lier(){
// Connexion à la base de données
$base = mysqli_connect('localhost', 'root','','funenbulles');
// Vérification et éxécution de la requête en cas de non problème
if (isset($_POST['bede']) & (isset($_POST['auteur']))){
try{
//Requête permettant la vérification de l'existence ou non de la liaison
$query_test = "SELECT count(*) as nb FROM ecrire WHERE CodeBd like '".mysqli_real_escape_string($_POST['bede'])."' AND WHERE CodeAuteur like '".mysqli_real_escape_string($_POST['auteur'])."'";
$result_test = mysqli_query($base ,$query_test);
// Test de l'existence de l'auteur
if ($result_test !== false){ // cette condition sera TOUJOURS VRAIE simplement parce que tu réalise une affectation et non une comparaison (utilise donc le ===)
//Exécution de la liaison
$data = mysqli_fetch_assoc(result_test
if($data['nb'] === 0) {
$query_lier = "INSERT INTO `ecrire`(`CodeBd`, `CodeAuteur`) VALUES ('".$_POST['bede']."','".$_POST['auteur']."')";
$result_lier = mysqli_query($base ,$query_lier);
header ('location://auteur.php'); // A mettre encommentaire lorsque l'on veux tester, de plus // en début de lien, si cela fonctionne c'est que les navigateur sont bien sympa. soit tu utilise un simple / et dans ce cas direction la racine du "root" (=> http://localhost en local). : a revoir.
}
else {
header ('location://lier_exist.php'); // a commenter quand on test !
}
}
else{
throw new Exception('Erreur SQL : ' . mysqli_error ($base)));
}
}
catch (Exception $SQL){
throw new Exception('Erreur SQL : ' $SQL->getMessage()));
}
}
else{
echo ($_POST['bede']."vide"); // message d'erreur correct à utiliser plutôt ;)
}
}
?>
<?php
## DEBUG ################################################
echo '<pre><p>GET<ul>'; print_r($_GET); echo '</ul></p></pre>';
echo '<pre><p>POST<ul>'; print_r($_POST); echo '</ul></p></pre>';
#########################################################
// Connexion à la base de données
$base = mysqli_connect('localhost', 'root','','funenbulles');
// Vérification et éxécution de la requête en cas de non problème
if ( isset($_POST['bede']) && isset($_POST['auteur']) )
{
//Requête permettant la vérification de l'existence ou non de la liaison
$query_existe = "SELECT * FROM `ecrire` WHERE `CodeBd` = '".$_POST['bede']."' AND `CodeAuteur` = '".$_POST['auteur']."'";
$result_existe = mysqli_query($base ,$query_existe);
// Test de l'existence de l'auteur
if (!$result_existe || mysqli_num_rows($result_existe)<=0)
{
try
{ //Exécution de la liaison
$query_lier = "INSERT INTO `ecrire`(`CodeBd`, `CodeAuteur`) VALUES ('".$_POST['bede']."','".$_POST['auteur']."')";
$result_lier = mysqli_query($base ,$query_lier);
header ('location://auteur.php');
}
catch (Exception $SQL)
{
throw new Exception('Problème SQL');
}
}
else
{
header ('location://lier_exist.php');
}
}
else
{
echo ("POST vide");
}
?>
Un conseil:J'ai fait un test similaire avec var_dump($_POST['auteur']); et de même pour "bede";Et Pour être sûr que les listes envoient un submit, écrire print_r du tableau $_POST.
<!-- Liste déroulante des auteurs de la base de données -->
Auteur :
<form method="post" action ="Fonction.php">
<select name="auteur">
<?php
while ($donnees_auteur = mysqli_fetch_array($result_auteur) )
{
echo '<option value="'.$donnees_auteur["CodeAuteur"].'">'.$donnees_auteur["Nom"]." ".$donnees_auteur["Prenom"].'</option>';
}
echo '</select>'
?>
<!-- Liste déroulante des bds de la base de données -->
Bd :
<select name="bede">
<?php
$result_bd = mysqli_query ($base, $query_bd);
while ($donnees_bd = mysqli_fetch_array($result_bd) )
{
echo '<option value="'.$donnees_bd["CodeBd"].'">'.$donnees_bd["titreBd"].'</option>';
}
echo '</select>'
?>Qu'est ce que tu entends par l’exécuter ? Ou sinon j'utilise Wamp (v 2.2)Bon, ton programme fonctionne bien et surtout tes 2 listes. Je ne sais pas comment tu t'y prends pour l'exécuter? tu utilise le serveur Wamp ou easyphp?
C'est exacte, j'avais pas fais attention j'ai envoyé le code sur lequel j'ai effectué des tests pour essayer de trouver mon problème de liste. Mais sur le code original je récupère bien mon "CodeAuteur" et "CodeBd" encore désolé de cette erreur d'inattention de ma part.En effet, la liste des bd envoi le titre de la bd sélectionné et la liste des auteurs envoi le nom de l'auteur sélectionné alors que les requêtes de la table "ecrire" exige l'usage des champs clés "CodeBd" et "CodeAuteur". Je ne sait pas pourquoi tu n'as pas programmé tes listes pour renvoyer alors ces deux champs clés.
Moi aussi j'utilise Wamp. Je veux dire : est-ce que tu teste juste le code que nous a posté ou bien tu teste toute une page où ce code existe. Dans ce cas l'erreur peut être à l’extérieur de cette partie du code.Qu'est ce que tu entends par l’exécuter ? Ou sinon j'utilise Wamp (v 2.2)Bon, ton programme fonctionne bien et surtout tes 2 listes. Je ne sais pas comment tu t'y prends pour l'exécuter? tu utilise le serveur Wamp ou easyphp?