Php mysql
Résolu/Fermé
A voir également:
- Php mysql
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Expert php pinterest - Télécharger - Langages
- Alert php ✓ - Forum PHP
- Php alert - Forum PHP
3 réponses
yg_be
Messages postés
23535
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
27 avril 2025
Ambassadeur
1 579
14 nov. 2020 à 15:50
14 nov. 2020 à 15:50
bonjour, si je vois bien, tu ne fais rien pour détecter les erreurs: https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
jordane45
Messages postés
38470
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 avril 2025
4 742
14 nov. 2020 à 16:37
14 nov. 2020 à 16:37
Bonjour,
Si je peux me permettre .... ta structure de bdd n'est pas terrible....
Tu as utilisé deux tables ( Tu as donc augmenté le risque d'erreur ...) ... alors qu'une seule table suffisait.
Dans ta table "livre" il te suffit d'avoir une colonne 'statut' pour savoir si il est là ou non....
Et si tu veux conserver l'historique des prêts, tu peux ajouter une seconde table pour lister les dates de prêts et de retours d'un livre
histo_pret(#id, id_livre, date_pret, date_retour, id_emprunteur)
De cette façon, tu pourras retrouver tous les livres qui n'ont pas été rendus simplement en regardant ceux pour lesquels la date de retour est vide...
Et en complément du lien que t'a donné Yg_be, j'ajouterai celui la :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Si je peux me permettre .... ta structure de bdd n'est pas terrible....
Tu as utilisé deux tables ( Tu as donc augmenté le risque d'erreur ...) ... alors qu'une seule table suffisait.
Dans ta table "livre" il te suffit d'avoir une colonne 'statut' pour savoir si il est là ou non....
Et si tu veux conserver l'historique des prêts, tu peux ajouter une seconde table pour lister les dates de prêts et de retours d'un livre
histo_pret(#id, id_livre, date_pret, date_retour, id_emprunteur)
De cette façon, tu pourras retrouver tous les livres qui n'ont pas été rendus simplement en regardant ceux pour lesquels la date de retour est vide...
Et en complément du lien que t'a donné Yg_be, j'ajouterai celui la :
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
Merci bcp pour ton aide Jordan45. Je veux aller suivre ton conseil et aller dans ton sens, mais maintenant ma question etant: comment je vais faire pour enregistrer un pret? Et comment je faire pour retourner un livre en utilisant ta table histo_pret? Est-ce qu'a chaque insertion de pret je vais laisser le champs date de retour vide et/ou à chaque retour je vais laisser le champs pret vide. Explique moi stp
Jordane45, tu m'as ete d'une tres grande aide. merci beaucoup, quant à mon premier commentaire je l'ai posté sans vraiment l'analyser. Je vais suprimer ma table pret et retour pour creer une table histopret avec tes champs indiqués c vraiment plus simple. Mais je me demande maintenant si je le fais comme tu m'as dit pour histopret est-ce que c vraiment necessaire d'ajouter le champs statut a la table livres?
jordane45
Messages postés
38470
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 avril 2025
4 742
>
Dix
Modifié le 15 nov. 2020 à 08:32
Modifié le 15 nov. 2020 à 08:32
Non le champ statut n'est pas nécessaire. ( cela ne servait que si tu ne faisais pas la table histo )
Il suffit de vérifier si tu as une ligne sans date de retour dans la table histo pour savoir si le livre est là ou non.
Il suffit de vérifier si tu as une ligne sans date de retour dans la table histo pour savoir si le livre est là ou non.
Bonjour Jordane45, j'ai suivi ton conseil, j'ai enlevé les tables pret et retour et les remplacer par une table emprunt ou il y a (id, num_livre, num_emprunteur, date_retour et date_pret). Pour faire un pret j'ai fait une insertion en laissant la date_retour vide(NULL) et ça marche tres bien. Now mon probleme se trouve quand je dois faire un retour: j'ai fait un UPDATE sur la meme ligne pour pouvoir remplir le champs date_retour mais ca ne marche pas et pourtant ca ne m'envoie aucun message d'erreur. A noté que j'ai ajouté le script de gestion d'erreur dans ma page php.
je te montre mon code
A noté que dans mon formulaire de retour; j'ai donné la possibilité a l'utilisateur de rentrer son id, le titre du livre que j'ai géré avec une liste deroulante drop down ou se trouve seulement les livres n'ayant pas de date de retour, et ensuite date_retour.
Aide-moi stp
je te montre mon code
<?php /* gestion des erreurs*/ require_once("erreurdebug.php"); /* connexion a la base de donnees*/ include("connect.php"); if(isset($_POST['retourner'])){ $id = $_POST['id']; $num_livre = $_POST['num_livre']; $num_emprunteur = $_POST['num_emprunteur']; $date_pret = $_POST['date_pret']; $date_retour = $_POST['date_retour']; /* inserer donnees dans la base pret */ $retourner = $connexion-> prepare("UPDATE emprunter SET date_retour = $date_retour WHERE num_livre = $num_livre and num_emprunteur=$num_emprunteur"); echo "Livre retourné"; } header("location: retourner-livre.php"); ?>
A noté que dans mon formulaire de retour; j'ai donné la possibilité a l'utilisateur de rentrer son id, le titre du livre que j'ai géré avec une liste deroulante drop down ou se trouve seulement les livres n'ayant pas de date de retour, et ensuite date_retour.
Aide-moi stp
jordane45
Messages postés
38470
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 avril 2025
4 742
Modifié le 15 nov. 2020 à 15:36
Modifié le 15 nov. 2020 à 15:36
As tu activé l'affichage des erreurs PDO dans ta connexion à la bdd ?
car visiblement tu n'as pas placé ta requête dans un bloc try/catch tel qu'indiqué dans le lien qu' Yg_be t'avait donné...
Je te conseille également d'utiliser les requêtes préparées et de désactiver la redirection le temps des tests... sinon tu ne verras pas les messages d'erreur.
Ton code un peu améliorer donnerait :
car visiblement tu n'as pas placé ta requête dans un bloc try/catch tel qu'indiqué dans le lien qu' Yg_be t'avait donné...
Je te conseille également d'utiliser les requêtes préparées et de désactiver la redirection le temps des tests... sinon tu ne verras pas les messages d'erreur.
Ton code un peu améliorer donnerait :
<?php /* gestion des erreurs*/ require_once("erreurdebug.php"); /* connexion a la base de donnees*/ include("connect.php"); if(isset($_POST['retourner'])){ //récupération PROPRE des variables AVANT de les utiliser $id = !empty($_POST['id']) ? $_POST['id'] : NULL; $num_livre = !empty($_POST['num_livre']) ? $_POST['num_livre'] : NULL; $num_emprunteur = !empty($_POST['num_emprunteur'] )? $_POST['num_emprunteur'] : NULL; $date_pret = !empty($_POST['date_pret']) ? $_POST['date_pret'] : NULL; $date_retour = !empty($_POST['date_retour']) ? $_POST['date_retour'] : date('Y-m-d H:i:s'); /* inserer donnees dans la base pret */ $sql = "UPDATE emprunter SET date_retour = :date_retour WHERE num_livre = :num_livre AND num_emprunteur=:num_emprunteur AND date_retour IS NULL"; $datas = array(':date_retour'=>$date_retour, ':num_livre'=>$num_livre, ':num_emprunteur'=>$num_emprunteur ); try{ $prep = $connexion-> prepare($sql); $prep->execute($datas); echo "Livre retourné"; header("location: retourner-livre.php"); exit; }catch(Exception $e){ echo "Erreur " . $e->getMessage(); exit; } }
Dix
>
jordane45
Messages postés
38470
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 avril 2025
15 nov. 2020 à 15:02
15 nov. 2020 à 15:02
avant le retour j'avais deja effectué une insertion de pret avec la date du pret. l'Updatde c pour le retour du livre; on modifie la ligne qu'on avait iserer lors du pret, c pourquoi je pense que la date_pret ne peut pas etre null dans l'update. on doit le laisser avec la meme la date, ici la seule valeur a ajouter c la date_retour
jordane45
Messages postés
38470
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 avril 2025
4 742
>
Dix
15 nov. 2020 à 15:09
15 nov. 2020 à 15:09
Pardon oui
C'est date retour qu'il faut vérifier si null.
C'est date retour qu'il faut vérifier si null.
Dix
>
jordane45
Messages postés
38470
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 avril 2025
15 nov. 2020 à 15:20
15 nov. 2020 à 15:20
j'ai copié - collé ton code après avoir fermé les parenthèses des lignes 12, 13 et 14 ça ne marche toujours pas. le champs date_retour est toujours NULL.
jordane45
Messages postés
38470
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 avril 2025
4 742
>
Dix
15 nov. 2020 à 15:38
15 nov. 2020 à 15:38
As tu, comme je te l'ai demandé, mis en commentaire la redirection ?
As tu testé, directement dans ta bdd, via phpmyadmin, si la requête fonctionnait ( en remplaçant les variables nommées :truc ) par de "vraies" valeurs ?
As tu bien le champ date_retour à null dans ta bdd ou au format 0000-00-00 00:00:00 ?
As tu testé, directement dans ta bdd, via phpmyadmin, si la requête fonctionnait ( en remplaçant les variables nommées :truc ) par de "vraies" valeurs ?
As tu bien le champ date_retour à null dans ta bdd ou au format 0000-00-00 00:00:00 ?