[PHP/MySQL] - Problème d'insertion dans BDD

- Problème d'insertion dans BDD [PHP/MySQL] - PHP - Programmation

Marsh Posté le 06-08-2004 à 09:55:44    

Je fais un script de gestion d'évènements avec agenda pour un intranet.
J'ai programmé un formulaire pour poster des nouveaux évenements. le fichier admin.php, contenant le formulaire de saisie est le suivant :  
 

Code :
  1. <?php
  2. // Aucune mise en cache
  3. header("Cache-Control: no-store, no-cache, must-revalidate" );
  4. /* Fichier de config d'accès à la base de données */
  5. require ("../confbdd.php" );
  6. // Récupération des variables
  7. $modifevok = $_GET['modifev']; //Validation de modification d'un Evènement
  8. $deleteev = $_GET['deleteev']; //Suppression d'un Evènement
  9. ?>
  10. <html>
  11. <head>
  12. <title>Gestion des Evènements</title>
  13. <link href='../styleadmin.css' rel='stylesheet' type='text/css'>
  14. </head>
  15. <body>
  16. <!-- Formulaire d'ajout d'evenements -->
  17. <center>
  18. <table class="deco-table" cellpadding='5' cellspacing='0'>
  19.  <tr>
  20.   <td class='deco3' colspan='2'>Ajout d'évènements</td>
  21.  </tr>
  22.  <tr>
  23.   <td class='nav' colspan='2'>
  24.   <a href="exevent.php">Evènements passés</a> |
  25.   <a href="eventencours.php">Evènements en cours</a> |
  26.   <a href="../admin.php">Menu général</a>
  27.   </td>
  28.  </tr>
  29.  <?php
  30.  if($modifevok != "" )
  31.    {
  32.     echo "<tr><td colspan='2'>\n";
  33.     echo "<center>Modification effectuée avec succès !</center>\n";
  34.     echo "</td></tr>\n";
  35.    }
  36.   if($deleteev != "" )
  37.    {
  38.       // lancement du lien mysql
  39.     $mysql_link = mysql_connect($host_mysql, $login_mysql, $password_mysql);
  40.     $supprev = requete("DELETE FROM events WHERE id='".$deleteev."'" );
  41.     echo "<tr><td colspan='2'>\n";
  42.     echo "<center>Suppression de l'évènement n°".$deleteev." effectuée avec succès !</center>\n";
  43.     echo "</td></tr>\n";
  44.      mysql_close($mysql_link);
  45.    }
  46.  ?>
  47.  <tr>
  48.   <td width=15% align='right'>
  49.    <form name='eventform' method='POST' action='doevent.php'>
  50.    <br>Titre :
  51.   </td>
  52.   <td width=85%><br><input type='text' name='titre' size='80' class='form-zonetexte'></td>
  53.  </tr>
  54.  <tr>
  55.   <td width=15% align='right'><br>Contenu :</td>
  56.   <td width=85%><br><textarea name='event' cols='60' wrap='virtual' rows='5' class='form-zonetexte'></textarea></td>
  57.  </tr>
  58.  <tr>
  59.   <td width=15% align='right'><br>Date evt : </td>
  60.   <td width=85%><br><input type='text' name='dateevt' size='10' class='form-zonetexte'> (format jj/mm/aaaa)</td>
  61.  </tr>
  62.  <tr>
  63.   <td colspan='2' align='center'><input type='submit' value='Valider' class='form-valider'><br>
  64.    </form>
  65. <!-- Fin du Formulaire d'ajout d'evenements -->
  66.   </td>
  67.  </tr>
  68. </table>
  69. </center>
  70. </body>
  71. </html>


 
Et le fichier doevent.php, qui fait la requête d'insertion dans la BDD :  

Code :
  1. <?php
  2. // Insertion d'un évènement dans l'agenda
  3. // Aucune mise en cache
  4. header("Cache-Control: no-store, no-cache, must-revalidate" );
  5. // Fichier d'accès à la base de données
  6. require ("../confbdd.php" );
  7. // Récupération des variables page précédente
  8. $titreev=$_POST['titre'];
  9. $event=$_POST['event'];
  10. $dateevt=$_POST['dateevt'];
  11. // Formatage des dates
  12. $dateinsert=date("dmY" );
  13. $evjour = subStr($dateevt,0,2);
  14. $evmois = subStr($dateevt,3,2);
  15. $evannee = subStr($dateevt,6,4);
  16. $dateevt = $evannee.'-'.$evmois.'-'.$evjour;
  17. // Lancement du lien mysql
  18. $mysql_link = mysql_connect($host_mysql, $login_mysql, $password_mysql);
  19. if($mysql_link)
  20. {
  21. // Requête d'insertion
  22. $insertevt = requete("INSERT INTO events VALUES ('','$titreev','$event','$dateinsert','$dateevt')" );
  23. mysql_close($mysql_link);
  24. }
  25. else echo "Erreur de connexion à la base de données.";
  26. // Redirection vers les evenements en cours
  27. header("Location: eventencours.php" );
  28. ?>


 
Le problème est que l'insertion ne marche qu'une fois sur 2... Après validation, ca me fait parfois comme si tout marchait normalement, mais rien n'est inséré dans la Base. Alors que certaines fois, avec le même script, tout fonctionne.  
La transmission des variables avec POST marche bien dans tous les cas. Je l'ai testé en affichant le contenu des variables dans doevent.php, sans faire la redirection.
 
Auriez vous une idée d'ou ca peut venir ?


Message édité par r@phblues le 06-08-2004 à 09:57:10

---------------
Tibet libre !
Reply

Marsh Posté le 06-08-2004 à 09:55:44   

Reply

Marsh Posté le 06-08-2004 à 10:08:20    

Euhhhh... il ya  beaucoup de code que tu nous as mis pour rien et qui surcharche un peu la lecture ... de plus il n'y a pas tout ... elle est où la fonction qui fait ton query ? On peut la voir ?
 
Tu n'as aucun message d'erreur quand ça ne marche pas ? Rien du tout ? Tu as bien activé les erreur PHP ? (E_ALL)
 
Sinon as tu mis des lignes du genre :
 

Code :
  1. or die('Erreur : '.mysql_error())

Reply

Marsh Posté le 06-08-2004 à 10:17:33    

Dj YeLL a écrit :

Euhhhh... il ya  beaucoup de code que tu nous as mis pour rien et qui surcharche un peu la lecture ... de plus il n'y a pas tout ... elle est où la fonction qui fait ton query ? On peut la voir ?
 
Tu n'as aucun message d'erreur quand ça ne marche pas ? Rien du tout ? Tu as bien activé les erreur PHP ? (E_ALL)
 
Sinon as tu mis des lignes du genre :
 

Code :
  1. or die('Erreur : '.mysql_error())



 
C'est vrai qu'il y a du code qui peut paraitre inutil mais j'ai posté tout le fichier de peur que le problème vienne d'un conflit avec des autres lignes de la page.
 
Pour les erreurs : J'ai ca :
error_reporting = E_ALL & ~E_NOTICE
 
Quand ca ne marche pas, auncun message d'erreur. Je n'ai pas mis de "or die". Je vais essayer.
 
Enfin, voila la fonction REQUETE :

Code :
  1. // fonction d'exection de requetes mysql
  2. function requete($sql)
  3. {
  4. GLOBAL $base_mysql;
  5. $execut = mysql_db_query($base_mysql, $sql);
  6. return($execut);
  7. }


Message édité par r@phblues le 06-08-2004 à 10:18:20

---------------
Tibet libre !
Reply

Marsh Posté le 06-08-2004 à 10:38:38    

Bon je comprend pas tout... il marche nickel depuis 5 mns. J'ai testé avec ie/ mozilla, fermé les browser, réouvert. tout marche ok, alors que tout a l'heure ca n'insérait rien...
Sinon j'ai ajouté un "die", a la fonction REQUETE :  
 
// fonction d'exection de requetes mysql

Code :
  1. function requete($sql)
  2. {
  3. GLOBAL $base_mysql;
  4. $execut = mysql_db_query($base_mysql, $sql) or die('Erreur : '.mysql_error());
  5. return($execut);
  6. }


 
et à la connexion à la base d'admin.php
 

Code :
  1. // Lancement du lien mysql
  2. $mysql_link = mysql_connect($host_mysql, $login_mysql, $password_mysql) or die('Erreur : '.mysql_error());


---------------
Tibet libre !
Reply

Marsh Posté le 06-08-2004 à 10:41:56    

Pour moi , apres survolage du code et lecture des parties sgbd , tout parait normal, tu devrais pas avoir de pbs....
si t as une erreur ki s'affiche avec le or die, poste la :p :p
 
ps : tu es sur que c'est pas le serveur de bdd qui etait en timeout au moment des pbs ?
 
 
 
l'informatique est decidement bien une science aléatoire :p

Reply

Marsh Posté le 06-08-2004 à 10:50:48    

oui... a suivre.
J'ai l'impression que le problème se pose souvent lors de la première connexion le matin, ou alors après un long temps d'inactivité.
C'est peut etre qu'une impression qu'il faudrait confirmer.
Peut etre que le problème n'est pas au niveau du code mais plutot de MySQL en lui même...


---------------
Tibet libre !
Reply

Marsh Posté le 08-08-2004 à 09:41:15    

C'est ridicule de passer par une fonction pour justement en effectué une., Ca fait Double emploie.
en plus dans les fonction faut refaire la connexion avec la base.
 
oublie cette fonction qui ne sert a rien.
 
ESSAYE CA
 
// Lancement du lien mysql  
 
//ouverture de la connexion avec la base de donnée
$mysql_link = mysql_connect($host_mysql, $login_mysql, $password_mysql);  
 
if($mysql_link){  
  // Requête d'insertion  
  $insertevt = mysql_db_query($base_mysql, "INSERT INTO events VALUES ('','$titreev','$event','$dateinsert','$dateevt')", $mysql_link);  
 
     mysql_close($mysql_link);  
 }else echo "Erreur de connexion à la base de données.";  
     
 
Voila ca devrait marcher.
 
http://www.


Message édité par papachico le 08-08-2004 à 17:50:25
Reply

Marsh Posté le 08-08-2004 à 12:49:55    

Ton lien à la fin est inutuile !


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
Reply

Marsh Posté le 08-08-2004 à 13:51:20    

t remarque son inutile !!

Reply

Marsh Posté le 08-08-2004 à 14:31:04    

papachico> TU es inutile...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed