par
ynx » 18 nov. 2022, 17:10
Bonne nouvelle si les erreurs d'affichent, tu devrais pouvoir plus facilement déboguer ton code ainsi.
Les messages de type "Notice" sont des erreurs non bloquantes pour PHP. Tu pourrais désactiver l'affichage de ces messages dans la configuration de PHP (error_reporting = E_ALL & ~E_NOTICE) mais ce n'est pas recommandé de masquer les erreurs, il est mieux de les corriger.
Le message "Notice: Undefined index: titre" indique que tu essayes d'accéder l'élément d'un tableau dont la clé est "titre", mais cet élément n'existe pas.
En effet, si le formulaire n'est pas envoyé, le tableau $_POST est vide donc l'élément $_POST['titre'] n'existe pas.
Il faut toujours vérifier que la donnée POST existe avant de l'utiliser, tu peux vérifier l'existence avec les fonctions isset() ou empty().
A ta place, j'aurais inversé les conditions if (!existe(...)) et if (!empty(...)) pour commencer par vérifier que les données POST ne sont pas vides avant de les utiliser. Je n'aurais pas défini de variables intermédiaires ($titre, $volume, etc.) qui ne semble pas utile ici :
function enregistrementDB() {
$conn = connectionDB();
if (!empty($_POST['titre']) && !empty($_POST['volume']) && !empty($_POST['vehicle']) && !empty($_POST['Akey']) && !empty($_POST['tempo']) && !empty($_POST['track'] && !empty($_POST['chorus']) && !empty($_POST['disc']))) {
if (!exist($_POST['titre'], $_POST['volume'], $_POST['vehicle'], $_POST['Akey'])) {
$sth = $conn->prepare(
"INSERT INTO aebersold(titre,volume,vehicle,Akey,tempo,chorus,disc,track)
VALUES (:titre, :volume, :vehicle, :Akey, :tempo, :chorus, :disc, :track)"
);
$sth->bindParam(':titre', $_POST['titre']);
$sth->bindParam(':volume', $_POST['volume']);
$sth->bindParam(':vehicle', $_POST['vehicle']);
$sth->bindParam(':Akey', $_POST['Akey']);
$sth->bindParam(':tempo', $_POST['tempo']);
$sth->bindParam(':chorus', $_POST['chorus']);
$sth->bindParam(':disc', $_POST['disc']);
$sth->bindParam(':track', $_POST['track']);
$sth->execute();
echo ('Les données sont enregistrées, merci.') . '</br>';
}
}
}
j'ai ajouté une vérification pour les variables $_POST['track'] et $_POST['chorus'] afin de vérifier qu'elles ne sont pas vides. Il faudra adapter le code si ces données ne sont pas obligatoires (définir une valeur par défaut si vide).
Bonne nouvelle si les erreurs d'affichent, tu devrais pouvoir plus facilement déboguer ton code ainsi.
Les messages de type "Notice" sont des erreurs non bloquantes pour PHP. Tu pourrais désactiver l'affichage de ces messages dans la configuration de PHP (error_reporting = E_ALL & ~E_NOTICE) mais ce n'est pas recommandé de masquer les erreurs, il est mieux de les corriger.
Le message "Notice: Undefined index: titre" indique que tu essayes d'accéder l'élément d'un tableau dont la clé est "titre", mais cet élément n'existe pas.
En effet, si le formulaire n'est pas envoyé, le tableau $_POST est vide donc l'élément $_POST['titre'] n'existe pas.
Il faut toujours vérifier que la donnée POST existe avant de l'utiliser, tu peux vérifier l'existence avec les fonctions isset() ou empty().
A ta place, j'aurais inversé les conditions if (!existe(...)) et if (!empty(...)) pour commencer par vérifier que les données POST ne sont pas vides avant de les utiliser. Je n'aurais pas défini de variables intermédiaires ($titre, $volume, etc.) qui ne semble pas utile ici :
[PHP]
function enregistrementDB() {
$conn = connectionDB();
if (!empty($_POST['titre']) && !empty($_POST['volume']) && !empty($_POST['vehicle']) && !empty($_POST['Akey']) && !empty($_POST['tempo']) && !empty($_POST['track'] && !empty($_POST['chorus']) && !empty($_POST['disc']))) {
if (!exist($_POST['titre'], $_POST['volume'], $_POST['vehicle'], $_POST['Akey'])) {
$sth = $conn->prepare(
"INSERT INTO aebersold(titre,volume,vehicle,Akey,tempo,chorus,disc,track)
VALUES (:titre, :volume, :vehicle, :Akey, :tempo, :chorus, :disc, :track)"
);
$sth->bindParam(':titre', $_POST['titre']);
$sth->bindParam(':volume', $_POST['volume']);
$sth->bindParam(':vehicle', $_POST['vehicle']);
$sth->bindParam(':Akey', $_POST['Akey']);
$sth->bindParam(':tempo', $_POST['tempo']);
$sth->bindParam(':chorus', $_POST['chorus']);
$sth->bindParam(':disc', $_POST['disc']);
$sth->bindParam(':track', $_POST['track']);
$sth->execute();
echo ('Les données sont enregistrées, merci.') . '</br>';
}
}
}
[/PHP]
j'ai ajouté une vérification pour les variables $_POST['track'] et $_POST['chorus'] afin de vérifier qu'elles ne sont pas vides. Il faudra adapter le code si ces données ne sont pas obligatoires (définir une valeur par défaut si vide).