Php mysql

Signaler
-
 Dix -
Bonjour,
guys j'ai besoin de votre aide. j'implemente une application web pour un petit bibliotheque. j'aimerais pouvoir supprimer un livre dans la table pret en meme temps que je retourne le livre qui avait ete emprunté dans la bibliotheque. je vous montre mon code afin que vous m'aidiez a voir ou je n'ai pas assuré.

  	
	     if(isset($_POST['retourner'])){
	$identifiant = $_POST['identifiant'];
	$title = $_POST['title'];

	 /* inserer donnees dans la base pret */
	  $retourner = $connexion-> prepare("INSERT INTO retour(id_elevepret, id_livremprunter)
                              	  VALUES ( :id_elevepret, :id_livremprunter)");
	   
 /* liaison des marqueurs a des valeurs*/
	  $retourner-> bindValue(':id_elevepret', $_POST['identifiant'], PDO::PARAM_STR);
	  $retourner-> bindValue(':id_livremprunter', $_POST['title'], PDO::PARAM_STR);
	 
	  
       $insertIsOk = $retourner-> execute();
	   
	     if($insertIsOk){
			 /* effacer le livre retourner dans la table pret*/
			 $num_livre = $_POST['retourner'];
			$effacer = $connexion -> prepare("DELETE FROM pret WHERE num_livre = :num_livre");
			
			 $effacer -> bindParam(':num_livre', $num_livre, PDO::PARAM_INT);
	
			 $connexion -> exec($effacer);
			 
			 echo "Livre retourné";
		 }
     else{
		$message = 'Livre non retourné'; 
	 }
		 }
  }
  catch(PDOException $e){
	  echo 'Echec : ' .$e->getMessage();
	  
  }
  header("location: retourner-livre.php");




j'ai un table pret et une table retour pour enregistrer les livres retournés qu'on avait emprunté. l'insertion marche tres bien, mais la deuxieme requete qui etait censé suprimer le livre dans la table pret ne marche pas pourtant ça ne genere aucun message d'erreur.

3 réponses

Messages postés
13108
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 novembre 2020
729
bonjour, si je vois bien, tu ne fais rien pour détecter les erreurs: https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
Messages postés
30152
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2020
2 975
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://www.commentcamarche.net/faq/48399-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?
Messages postés
30152
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2020
2 975 > Dix
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.
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

<?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
>
Messages postés
30152
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2020

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.
Messages postés
30152
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2020
2 975 > Dix
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 ?
>
Messages postés
30152
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2020

Quand j'ai enlevé la dernière ligne de ta requete "date_retour is null" et j'ai de vrais valeurs ça marche très bien sur phpmyadmin. Mais dans le formulaire ça ne marche pas
Messages postés
30152
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2020
2 975 > Dix
Tu n'as pas répondu à toutes mes questions...

Mais, le plus simple serait que tu nous fournisses un DUMP de tes tables..
>
Messages postés
30152
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 novembre 2020

Oui date_retour est à NULL. Mais apparemment le probleme vient de mon formulaire. Comme je t'ai dit précédemment, dans mon formulaire l'utilisateur a droit d'entrer l'id_emprunteur, le num_livre(là malheureusement c'est une liste drop down qui sort le titre du livre et l'id_livre) or dans la table emprunt l'id_livre a ete remplacé par num_livre. Et c là mon probleme. Il faut que je trouve un moyen de remplacer id_livre par num_livre.