Verifier disponibilité

Technopole
Invité n'ayant pas de compte PHPfrance

29 avr. 2011, 10:01

Bonjour,
J'ai déjà mis mon problème mais j'ai pas eu de solution, Je réessaye, :

Mon programme consiste à emprunter un livre sélectionné parmi une liste venant d'une base de données,

Mon but est de tester si le livre est disponible je continue mon code si non afficher un message que ce livre est emprunter.

Voici mon code :

<?php
    echo '<select  name="select" class="Style2" >'."\n";
        
     include "connexion.php";
   
     $sql = "SELECT id,Titre, Auteur, Cote, Disponibilite  FROM livres ORDER BY Titre";
       $ReqLog = mysql_query($sql);
   
         while ($resultat = mysql_fetch_row($ReqLog))
                 {
       echo '<option value="'.$resultat[0].'" onclick="affiche(\'<br /><strong>Auteur :</strong>&nbsp;&nbsp;'.$resultat[2].'<br /><br /><strong>Cote :</strong>&nbsp;&nbsp;'.$resultat[3].'\',\'descr\')"><br />'.$resultat[1];
         echo '</option>'."\n";
         
       }
  
echo '</select>'."\n";

if (isset($_POST['Submit'])) 
{
$accept=False;
$nom=$_POST['select'];
$dateS=$_POST['textfield4'];
$dateE=$_POST['textfield5'];
 
if((empty($_POST['select']))  ||(empty($_POST['textfield4'])) || (empty($_POST['textfield5'])) )
{ 
 ?>
        <script language="javascript"> 
            alert('Vous devez remplir tous les champs');
        </script>
 <?php 

}//Champs vides  

else
{
  while( $data = mysql_fetch_assoc($resultt)) 
  { 
     
  if($data['id']==$nom)
      {
         $h=$data['Titre'];
      }
  }

$disponibilite = $_GET['Disponibilite'];
     echo '$disponibilite';
 
 if ($disponibilite != "Disponible")	
 {
 ?>
        <script language="javascript"> 
            alert('Le livre choisi est empreunté.');
        </script>
 <?php  
  }
else 
{
  $requete = "INSERT INTO pret(Titre,Datesortie,Dateentree) VALUES('$h','$dateS','$dateE')";
   
    $resultat = mysql_query($requete) or exit(mysql_error().'Echec');
    $accept =true;
    $query = "UPDATE livres SET Disponibilite = 'En prêt' WHERE Titre='$h'  ";
    $result = mysql_query($query); 
}
 }
 
} // fin Submit

?>
C'est mon Code, tout marche bien sauf le test de disponibilité que j'ai fais (la condition if) , sachant que j'ai un champ dans ma table nommé "Disponibilite" qui contient "Disponible" ou "En pret", Il m'affiche ce message :
Notice: Undefined index: Disponibilite in C:\wamp\www\biblio\Pret1.php on line 232
$disponibilite


La ligne 232 est : $disponibilite = $_GET['Disponibilite'];

J'espère que c claire ,
Que ce que je dois faire ???
Merci d'avance

Mammouth du PHP | 672 Messages

29 avr. 2011, 10:22

Bonjour,
J'ai déjà mis mon problème mais j'ai pas eu de solution, Je réessaye, :
(...)
Que ce que je dois faire ???
Merci d'avance
Apprendre à lire :evil:
disponibilite, c'est un champ de ta table si je suis bien ?
=> tu récupères sa valeur avec ta requête. Va voir le manuel de PHP pour connaître le fonctionnement de mysql_fetch_array (tu peux cliquer sur la fonction dans le code PHP en-dessous :wink: )
$requet='SELECT * FROM livres where id = '.mysql_real_escape_string($id);
$resultt = mysql_query($requet) or exit(mysql_error().'Echec');
$data = mysql_fetch_array($result);
$disponibilite = $data['Disponibilite'];
Le message de PHP est clair :
L'index 'Disponibilite' que tu essayes d'utiliser à la ligne 232 n'existe pas
=> Le tableau $_GET, qui contient les variables que tu as passées (sous la forme $_GET['mavariable'] = mavaleur), ne contient pas 'Disponibilite'.

Dans ton script, affiche le contenu de $_GET avec print_r($_GET);, ça devrait te donner un début d'indication...
A défaut, tu pourrais nous coller le formulaire utilisé ?

Technopole
Invité n'ayant pas de compte PHPfrance

29 avr. 2011, 10:36

Merci pour ton attention,
J'ai essayer de faire ca mais encore j'ai eu comme message d'erreur :

Notice: Undefined variable: id in C:\wamp\www\biblio\Pret1.php on line 231
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1Echec


Et le formulaire est le suivant :

 <p class="header_01 Style4 Style6">Informations sur l'ouvrage à empreunter : </p>

  <table width="493" border="0" align="left">
    
	<tr>
      <td>
<form  method="post" enctype="multipart/form-data" id="form1">
       
     	<table width="718" height="198" border="0" align="center">
         
       		
		 <tr>
           <td width="157" height="84"  > <p class="header_01 Style2 "><strong>Intitulé du Livre </strong></p></td>
            <td width="541">		
			    echo '<select  name="select" class="Style2" >'."\n";
     //echo '<option value="-1">Choisir un livre<option>'."\n";
   
      // Récupération des informations triées par ordre alphabétique
     
     include "connexion.php";
   
     $sql = "SELECT id,Titre, Auteur, Cote, Disponibilite  FROM livres ORDER BY Titre";
       $ReqLog = mysql_query($sql);
   
         while ($resultat = mysql_fetch_row($ReqLog))
                 {
       echo '<option value="'.$resultat[0].'" onclick="affiche(\'<br /><strong>Auteur :</strong>&nbsp;&nbsp;'.$resultat[2].'<br /><br /><strong>Cote :</strong>&nbsp;&nbsp;'.$resultat[3].'\',\'descr\')"><br />'.$resultat[1];
         echo '</option>'."\n";
         
       }
   
echo '</select>'."\n";
?>
<div id="descr"></div>   
</td>
		 </tr>

			
		  
  
         <tr>
            <td><p class="header_01 Style2 "><strong>Date de Sortie </strong></p></td>
            <td><input type="text" name="textfield4"  />   </td>
        </tr>
 
          <tr>
         <td><p class="header_01 Style2 "><strong>Date de retour </strong></p></td>
            <td><input type="text" name="textfield5" 	 />  </td>
         </tr>
 		 
         <tr>     </tr>
       </table>
		


Mammouth du PHP | 672 Messages

29 avr. 2011, 11:28

A. Sur le formulaire :

1. Le formulaire est envoyé avec la méthode POST.
=> A priori, il ne doit rien y avoir dans $_GET, ce qui est renseigné dansl e formulaire est dans la variable $_POST.
si tu as des $_GET quelque part, c'est qu'il y a un problème (toujours a priori).

2. Tu ne l'as pas copié complètement ? Parce qu'il manque l'ouverture de la balise php. Et aussi la fermeture du formulaire.

3. Pourquoi utilises-tu enctype="multipart/form-data" ?


B. Notice: Undefined variable: id in C:\wamp\www\biblio\Pret1.php on line 231
=> Tu utilises une variable ($id) qui n'a pas été définie avant.
L'erreur SQL n'est qu'une conséquence de ce problème (vu que du coup, tu te retrouves avec une requête du genre WHERE id=;)
Solution => étudier le programme, et voir quelle est la variable que tu es sensé utiliser...

Technopole
Invité n'ayant pas de compte PHPfrance

29 avr. 2011, 11:46

Bon :
1- j'ai déjà utilisé le $_Post au lieu du $_GET mais c la même chose et même message d'erreur (Notice: Undefined index: Disponibilite in C:\wamp\www\biblio\Pret1.php on line 226, $disponibilite)

2- t'as raison car la fermeture du formulaire est à la fin de mon code, et à propos de ça je n'ai aucun problème tout marche bien,

3- Je ne sais pas Pq j'ai utilisé le "enctype="multipart/form-data" et je l'ai enlevé et rien n'as changé aussi 8-|

4- et pour la variable id, j'ai changé déjà ma requette par :
$requet='SELECT * FROM livres where Titre = '.mysql_real_escape_string($h);
où la variable $h est la valeur du titre sélectionné au niveau du select donc en principe ca devrait marché mais malheureusement il m'affiche ce message :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'agronomy' at line 1Echec

qu'en pensé vous ??

Mammouth du PHP | 672 Messages

29 avr. 2011, 11:59

1- j'ai déjà utilisé le $_Post au lieu du $_GET mais c la même chose et même message d'erreur (Notice: Undefined index: Disponibilite in C:\wamp\www\biblio\Pret1.php on line 226, $disponibilite)
Dans ton formulaire, tout ce que je vois comme champs, c'est select textfield4 et textfield5 (au passage, mauvaise idée de donner select comme nom de champ. Mauvaise idée de donner des noms de champs non signifiants d'ailleurs).
Tu peux voir ce qui est envoyé en faisant un print_r($_POST) au début du script de vérification, ça devrait te donner un début d'explication...
4- et pour la variable id, j'ai changé déjà ma requette par :
$requet='SELECT * FROM livres where Titre = '.mysql_real_escape_string($h);
où la variable $h est la valeur du titre sélectionné au niveau du select donc en principe ca devrait marché mais malheureusement il m'affiche ce message :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'agronomy' at line 1Echec

qu'en pensé vous ??
- Affiche la requête (echo $requet).
- Essaye de la passer (par exemple) sous PHPMyAdmin.
- Essaye de passer la requête que tu veux "graphiquement" (sous PHPMyAdmin).
- Compare les deux requêtes SQL générées.
- Et essaye de comprendre d'où peut venir le problème...

Technopole
Invité n'ayant pas de compte PHPfrance

29 avr. 2011, 12:07

OK et merci encore,
Mais comment je peux faire ca ??
- Essaye de la passer (par exemple) sous PHPMyAdmin. ????
- Essaye de passer la requête que tu veux "graphiquement" (sous PHPMyAdmin).???
- Compare les deux requêtes SQL générées.???

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

29 avr. 2011, 12:28

Bonjour,

T'as une erreur de logique dans l'algorithme du programme, voici quelques corrections :

1. la liste déroulante ne doit contenir que les livres disponibles.
2. quand il y a un "Submit", il faut interroger la base en exécutant une requête SQL pour savoir si le livre sélectionné est disponible
3. si ce n'est pas disponible tu affiche le message d'erreur et sinon tu lance l'enregistrement du prêt.

Voici la correction de ton programme PHP en conséquence:
<?php
    echo '<select  name="select" class="Style2" >'."\n";
       
     include "connexion.php";
   
     $sql = "SELECT id,Titre, Auteur, Cote, Disponibilite  FROM livres WHERE Disponibilite='Disponible' ORDER BY Titre";
       $ReqLog = mysql_query($sql);
   
         while ($resultat = mysql_fetch_array($ReqLog))
                 {
       echo '<option value="'.$resultat['id'].'" onclick="affiche(\'<br /><strong>Auteur :</strong>&nbsp;&nbsp;'.$resultat['Titre'].'<br /><br /><strong>Cote :</strong>&nbsp;&nbsp;'.$resultat['Cote'].'\',\'descr\')"><br />'. $resultat['Titre'] . '</option>'."\n";
         
       }
 
echo '</select>'."\n";

if (isset($_POST['Submit']))
{
$accept=False;
$idLivre=$_POST['select'];
$dateS=$_POST['textfield4'];
$dateE=$_POST['textfield5'];
 
if((empty($_POST['select']))  ||(empty($_POST['textfield4'])) || (empty($_POST['textfield5'])) )
{
 ?>
        <script language="javascript">
            alert('Vous devez remplir tous les champs');
        </script>
 <?php

}//Champs vides  

else
{
  // recherche de disponibilité pour le livre $idLivre
  $sql = "SELECT *  FROM livres WHERE Disponibilite='Disponible' AND id='" . $idLivre."' ";
  $result2 = mysql_query($sql);
 if ( mysql_num_rows($result2) <=0) // livre non disponible car la requête ne retourne pas d'infos
  {
  ?>
        <script language="javascript">
            alert('Le livre choisi est empreunté.');
        </script>
 <?php  
  }
 else
 { 
    // enregistrement du prêt
    $row = mysql_fetch_array($result2);
    $titreLivre = $row['Titre'];
    $requete = "INSERT INTO pret(Titre,Datesortie,Dateentree) VALUES('$titreLivre','$dateS','$dateE')";
    $resultat = mysql_query($requete) or exit(mysql_error().'Echec');
    $accept =true;
    // mise à jour de non disponibilité dans la table livres
    $query = "UPDATE livres SET Disponibilite = 'En prêt' WHERE id='$idLivre'  ";
    $result = mysql_query($query);
  }
 }
} // fin Submit

?>
 
Remarque: il vaudrait mieux utiliser l'id du livre dans les transactions entre PHP et SQL comme index de travail. Toi tu utilise une fois l'ID du livre pour accéder dans la table "livres" et une autre fois le Titre du livre dans la table "pret" ce qui t'oblige d'avoir les 2 champs à chaque transaction.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 672 Messages

29 avr. 2011, 12:30

OK et merci encore,
Mais comment je peux faire ca ??
Ton site est installé en local (avec WAMP pare exemple), ou sur un serveur distant ?
Si c'est sur un serveur distant (free, OVH, ...), il faut voir chez eux comment accéder à PHPMyAdin.

Si c'est en local (adresse http://localhost ou http://127.0.0.1 par exemple), tu dois pouvoir y accéder via l'interface.
Par exemple, sous WAMP : tu cliques sur l'icone dans ta barre de tâches (à côté de l'horloge en bas à droite), et tu as accès à PHPMyAdmin...
L'adresse est certainement du genre http://localhost/phpmyadmin/
C'est difficile d'être plus précis sans autre information, mais une recherche sur phpmyadmin+<nom de l'hébergeur ou nom du "prgoramme" local> devrait t'aider...

Technopole
Invité n'ayant pas de compte PHPfrance

29 avr. 2011, 12:49

Merci ca marche
enfin :^o

Et maintenant veullez me dire comment mettre que c problem est résolu ici sur ce forum ???? #-o

Mammouth du PHP | 672 Messages

29 avr. 2011, 13:43

Je crois que tu ne peux pas, il faut être enregistré (et avoir posé la question en étant connecté)...

Normalement, tu aurais une case "résolu" en haut à droite de ton premier message, mais là tu dois demander à un modérateur (bouton "rapporter le message" dans un triangle, sur ton premier post).