SQL erreur lors de la fermeture de la base de donnée

Résolu/Fermé
vleeks Messages postés 29 Date d'inscription jeudi 20 décembre 2012 Statut Membre Dernière intervention 7 octobre 2014 - 20 déc. 2012 à 12:42
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 21 déc. 2012 à 15:05
Bonjour,

J'ai un problème avec la fermeture de ma base de donnée.
J'ai une page, sur laquelle j'affiche une liste de mes patients. Pour cela, j'ouvre une première fois ma base de donnée, plus précisément la table patient.

Chaque ligne de la liste affiche un patient et ses informations. Tout à droite, j'ai placé un bouton modifier qui fait apparaître une div ainsi qu'un formulaire. Le but est que ce formulaire récupère dans les "value" les informations de la base afin de pouvoir les modifier. Il y a donc un bouton modifier par ligne. Le problème, c'est qu'un patient est lié à deux médecins différents. Pour obtenir les médecins, je dois ouvrir une deuxième table, medecin, présente dans la même base de donnée que patient.

Or, une erreur PHP m'indique que je ferme mal ma base de donnée :

mysql_close(): no MySQL-Link resource supplied

Voici mon code :

<body>

<?php include("layout/header_fancybox.php"); ?>
<section>

<article>

<h4>Liste des patients</h4>

<p>
<table>
<tr>
<td><strong>Civilité</strong></td>
<td><strong>Nom</strong></td>
<td><strong>Prénom</strong></td>
<td><strong>Adresse</strong></td>
<td><strong>NPA</strong></td>
<td><strong>Ville</strong></td>
<td><strong>Téléphone</strong></td>
<td><strong>Assurance 1</strong></td>
<td><strong>N° d'assuré 1</strong></td>
<td><strong>Assurance 2</strong></td>
<td><strong>N° d'assuré 2</strong></td>
<td><strong>N° AVS</strong></td>
<td><strong>Médecin traitant 1</strong></td>
<td><strong>Médecin traitant 2</strong></td>
<td><strong>Modifications</strong></td>
</tr>

<?php

mysql_connect("localhost", "root", "") or die (mysql_error ());

mysql_select_db("facturation") or die(mysql_error());

$strSQL = "SELECT * FROM patient ORDER BY nomPatient";

$rs = mysql_query($strSQL);

while($row = mysql_fetch_array($rs)) {


?>


<tr>
<td class="smalltd"><?php echo $row['civilitePatient'];?></td>
<td class="smalltd"><?php echo $row['nomPatient'];?></td>
<td class="smalltd"><?php echo $row['prenomPatient'];?></td>
<td class="smalltd"><?php echo $row['adressePatient'];?></td>
<td class="smalltd"><?php echo $row['npaPatient'];?></td>
<td class="smalltd"><?php echo $row['villePatient'];?></td>
<td class="smalltd"><?php echo $row['telephonePatient'];?></td>
<td class="smalltd"><?php echo $row['assurance1Patient'];?></td>
<td class="smalltd"><?php echo $row['numero1Patient'];?></td>
<td class="smalltd"><?php echo $row['assurance2Patient'];?></td>
<td class="smalltd"><?php echo $row['numero2Patient'];?></td>
<td class="smalltd"><?php echo $row['avsPatient'];?></td>
<td class="smalltd"><?php echo $row['medecin1Patient'];?></td>
<td class="smalltd"><?php echo $row['medecin2Patient'];?></td>
<td class="smalltd"><a href="#fancymodify" class="boutonliste">Modifier</td>
</tr>

<?php

$nomPatient = $row['nomPatient'];
$prenomPatient = $row['prenomPatient'];
$adressePatient = $row['adressePatient'];
$npaPatient = $row['npaPatient'];
$villePatient = $row['villePatient'];
$telephonePatient = $row['telephonePatient'];
$assurance1Patient = $row['assurance1Patient'];
$numero1Patient = $row['numero1Patient'];
$assurance2Patient = $row['assurance2Patient'];
$numero2Patient = $row['numero2Patient'];
$avsPatient = $row['avsPatient'];
$medecin1Patient = $row['medecin1Patient'];
$medecin2Patient = $row['medecin2Patient'];

?>

<div id="fancymodify">

<h2>Modification des données</h2>

<div class="allelement">

<div class="item">

<div class="contenu">

<form>

<fieldset>
<legend>Informations de base</legend>

<p><label class="nodeco" name="nom_patient" for="nom_patient"">Nom :</label>
<select name="civilite_patient" class="smallselect">
<option>Choisir...</option>
<option>Monsieur</option>
<option>Madame</option>
<option>Mademoiselle</option>
</select>

<input type="text" name="nom_patient" value="<?php echo $nomPatient;?>"></p>

<p><label class="nodeco" name="prenom_patient" for="prenom_patient">Prénom :</label><input type="text" name="prenom_patient" value="<?php echo $prenomPatient;?>"></p>

<p><label class="nodeco" name="adresse_patient" for="adresse_patient">Adresse :</label><input type="text" name="adresse_patient" value="<?php echo $adressePatient;?>"></p>

<p><label class="nodeco" name="ville_patient" for="ville_patient">Ville :</label><input class="smallinput" type="text" name="npa_patient" value="<?php echo $npaPatient;?>"><input type="text" name="ville_patient" value="<?php echo $villePatient;?>"></p>

<p><label class="nodeco" name="telephone_patient" for="telephone_patient">No. de téléphone :</label><input type="text" name="telephone_patient" value="<?php echo $telephonePatient;?>"></p>

</fieldset>



<fieldset>
<legend>Informations complémentaires</legend>

<p><label class="nodeco" name="1assurance_patient" for="1assurance_patient">Assurance :</label><input class="smallinput" type="text" name="1numero_assurance_patient" value="<?php echo $numero1Patient;?>""><input type="text" name="1assurance_patient" value="<?php echo $assurance1Patient;?>"></p>

<p><label class="nodeco" name="2assurance_patient" for="2assurance_patient">Assurance 2 :</label><input class="smallinput" type="text" name="2numero_assurance_patient" value="<?php echo $numero2Patient;?>"><input type="text" name="2assurance_patient" value="<?php echo $assurance2Patient;?>"></p>

<p><label class="nodeco" name="avs_patient" for="avs_patient">Numéro AVS :</label><input type="text" name="avs_patient" value="<?php echo $avsPatient;?>"></p>

<p><label class="nodeco" name="1medecin_patient" for="1medecin_patient">Médecin traitant :</label>

<select name="1medecin_patient">

<option><?php echo $medecin1Patient;?></option>

<?php //Affichage de la liste des médecins dans le formulaire d'ajout d'un patient

mysql_connect("localhost", "root", "") or die (mysql_error ());

mysql_select_db("facturation") or die(mysql_error());

$strSQL = "SELECT * FROM medecin ORDER BY nomMedecin";

$rs = mysql_query($strSQL);

while($row = mysql_fetch_array($rs)) {

?>

<option><?php echo $row['nomMedecin'];?><span> </span><?php echo $row['prenomMedecin'];?></option>

<?php }

mysql_close();

?>

</select></p>

<p><label class="nodeco" name="2medecin_patient" for="2medecin_patient">Médecin traitant 2 :</label>
<select name="2medecin_patient">

<option><?php echo $medecin2Patient;?></option>

<?php //Affichage de la liste des médecins dans le formulaire d'ajout d'un patient

mysql_connect("localhost", "root", "") or die (mysql_error ());

mysql_select_db("facturation") or die(mysql_error());

$strSQL = "SELECT * FROM medecin ORDER BY nomMedecin";

$rs = mysql_query($strSQL);

while($row = mysql_fetch_array($rs)) {

?>

<option><?php echo $row['nomMedecin'];?><span> </span><?php echo $row['prenomMedecin'];?></option>

<?php }

mysql_close();

?>

</select></p>


</fieldset>

</form>

</div>

</div>

</div>

<a href="#" class="fancyboxbouton">Fermer</a>

</div>

<?php

}

mysql_close();

?>
</table>

</p>

</article>



</section>


</body>

</html>

Comem cela me donnait une erreur, j'ai d'abord essayé de stocker les données dans des variables, puis d'appeler la div en dehors de la table. Cependant, si je cliquais sur modifier, seul la dernière ligne était modifiable (les données saisies dans les "values" étaient les dernières entrées). Je ne sais pas du tout comment régler ce problème.

Merci beaucoup de votre aide,

Vleeks
A voir également:

1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
21 déc. 2012 à 15:05
Bonjour,

Le problème vient du fait que mysql_close() ferme la dernière connexion utilisée. Or à la fin, tu as deux mysql_close plus ou moins consécutifs. Le deuxième ne sait pas quelle connexion fermer.

Pour corriger ton problème, il faut savoir qu'il n'est pas nécessaire d'ouvrir / fermer ta base de données à chaque fois que tu effectues une requête.

Je te suggère de ne garder que tes premiers mysql_connect / mysql_select_db, et que ton dernier mysql_close.

Par ailleurs, tu peux encore simplifier en te passant simplement de ce dernier : https://www.php.net/mysql_close indique qu'utiliser mysql_close n'est pas nécessaire car la connexion est de toutes façons fermée automatiquement à la fin du script.

Xavier
0