Probleme script d'ajout d'entrée dans une base mysql

Probleme script d'ajout d'entrée dans une base mysql - PHP - Programmation

Marsh Posté le 27-08-2007 à 14:47:05    

Bonjour,  
J'ai un script pour ajouter des entrées dans une base mysql, il fonctionnait bien jusqu'à il y a peu. Je n'ai pourtant fait aucune modification.
 
Voici la table :
 id   int(3) auto_increment  Index  
 nom   text
 
Voici mes le script :
 
Page 1 :
 

Code :
  1. <h2><a href="ajoutparfum_rediger.php">Ajouter un Parfum</a></h2>
  2. <?php
  3. mysql_connect("localhost", "***", "***" );
  4. mysql_select_db("***" );
  5. if (isset($_POST['nom']) AND isset($_POST['image']))
  6. {
  7.     $nom = addslashes($_POST['nom']);
  8.     if ($_POST['id_parfum'] == 0)
  9.     {
  10.         mysql_query("INSERT INTO parfum VALUES('', '" . $nom . "')" );
  11.     }
  12.     else
  13.     {
  14.         mysql_query("UPDATE parfum SET nom='" . $nom . "' WHERE id=" . $_POST['id_parfum']);
  15.     }
  16. }
  17. if (isset($_GET['supprimer_parfum']))
  18. {
  19.     mysql_query('DELETE FROM parfum WHERE id=' . $_GET['supprimer_parfum']);
  20. }
  21. ?>
  22. <table><tr>
  23. <th>Modifier</th>
  24. <th>Supprimer</th>
  25. <th>Nom</th>
  26. </tr>
  27. <?php
  28. $retour = mysql_query('SELECT * FROM parfum ORDER BY nom DESC');
  29. while ($donnees = mysql_fetch_array($retour))
  30. {
  31. ?>
  32. <tr>
  33. <td><?php echo '<a href="ajoutparfum_rediger.php?modifier_parfum=' . $donnees['id'] . '">'; ?>Modifier</a></td>
  34. <td><?php echo '<a href="ajoutparfum.php?supprimer_parfum=' . $donnees['id'] . '">'; ?>Supprimer</a></td>
  35. <td><?php echo stripslashes($donnees['nom']); ?></td>
  36. </tr>
  37. <?php
  38. }
  39. ?>
  40. </table>


 
Page 2:
 

Code :
  1. <h3><a href="ajoutparfum.php">Retour à la liste des Parfums</a></h3>
  2. <?php
  3. mysql_connect("localhost", "***", "***" );
  4. mysql_select_db("***" );
  5. if (isset($_GET['modifier_parfum']))
  6. {
  7.     $retour = mysql_query('SELECT * FROM parfum WHERE id=' . $_GET['modifier_parfum']);
  8.     $donnees = mysql_fetch_array($retour);
  9.  
  10.     $nom = $donnees['nom'];
  11.     $id_parfum = $donnees['id'];
  12. }
  13. else
  14. {
  15.     $nom = '';
  16.     $id_parfum = 0;
  17. }
  18. ?>
  19. <form action="ajoutparfum.php" method="post">
  20. <p>Nom : <input type="text" size="30" name="nom" value="<?php echo stripslashes ($nom); ?>" /></p>
  21.   <br /> 
  22.     <input type="hidden" name="id_parfum" value="<?php echo $id_parfum; ?>" />
  23.     <input type="submit" value="Envoyer" />
  24. </p>
  25. </form>


 
Je n'ai pour l'instant que 76 entrées dans la table. La modification et l'ajout d'entrée ne fonctionne pas, je n'ai aucun message d'erreur, c'est comme si je n'avais rien fait.
J'ai cru que c'était un probleme de table, je l'ai donc refaite, mais ca n'a rien modifier.
 
Avez vous une idée d'où pourrait provenir le probleme?  
 
Merci d'avance !

Reply

Marsh Posté le 27-08-2007 à 14:47:05   

Reply

Marsh Posté le 27-08-2007 à 14:50:08    

ajoutparfum.php, c'est ta page 1 ?
 
Accessoirement, tes mysql_query sont bourrés de failles de sécurité. Utilise mysqli/PDO avec des prepared statements, ou au pire mysql_real_escape_string.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-08-2007 à 14:52:12    

Bonjour,
Oui ma page 1 est ajoutparfum.php et la 2 ajoutparfum_rediger.php.
Merci pour le conseil pour la sécurité, je regarderai ça une fois ce probleme réglé.

Reply

Marsh Posté le 27-08-2007 à 14:55:00    

Au hasard, je dirais que tu as mis la colonne id en tinyint et que le id le plus grand vaut 255.
Si j'ai faux c'est quoi la structure de ta table et la valeur id la plus grande?

Reply

Marsh Posté le 27-08-2007 à 14:55:05    

Pourquoi y a deux valeurs dans ton INSERT (dont une vide :heink:) alors que ton id est en auto-increment et qu'il n'y a que "nom" ?
 
edit: ah, p-e que ça prend en compte l'auto-increment quand on fout du vide, m'enfin il serait plus sage de le faire proprement => INSERT INTO parfum (nom) VALUES ('$nom')


Message édité par sielfried le 27-08-2007 à 14:56:11

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-08-2007 à 15:08:00    

omega2 : Le id le plus grand vaut 76
Ma table :
 id - tinyint(3)- auto_increment  - Primaire - Index - Unique
 nom - text - latin1_swedish_ci  - Texte entier
 
Sielfried :  :whistle: J'avoue que ca serait plus propre ^^
 
Ce que je comprends pas, c'est que ce script fonctionnait tres bien et puis tout d'un coup il n'accepte plus aucune entrée  :??:

Reply

Marsh Posté le 27-08-2007 à 15:18:20    

id le plus grand != valeur de l'auto-increment
 
Quand tu vires un élément, la valeur reste au même niveau.
 
Donc c'est probablement ça... tinyint pour un identifiant c'est quand même rarement une bonne idée.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-08-2007 à 15:20:09    

J'y ai pensé, et j'ai mit en int pour voir, ca faisait la meme chose.  
(Je préfère mettre tinyint car il risque d'y avoir au maximum 100 parfums, donc ca suffit.)

Reply

Marsh Posté le 27-08-2007 à 15:21:48    

echo mysql_error() après tes mysql_query


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 27-08-2007 à 15:28:39    

Askental > Est ce que t'es sur que tu n'auras eu que 100 parfums différents en l'espace 15 ans?
L'autoincrément n'utilise pas les numéros libéré mais le plus grand numéro utilisé depuis la création de la table (ou le dernier forcage manuel de sa valeur) +1.
Même si tu n'as que 80 parfums à la fois, il suffit que t'en ai 20 qui disparaissent chaque année et 20 qui apparaissent à leur place (dieux sait qu'ils sont prolifique les créateurs de parfums) pour faire péter le compteur en moins de 9 ans.
 
Ceci dit, si ton id n'est pas mis en "not null", alors ton problème peut venir de là. T'es sur que tu n'as pas un id égal à null? (le dernier inséré logiquement)
 
PS : Depuis tout à l'heure j'essaye de me rapeller, sans réussir, comment mysql réagit quand on essaye d'envoyer une chaine vide dans une colonne numérique 'not null' en autoincrément.

Reply

Marsh Posté le 27-08-2007 à 15:28:39   

Reply

Marsh Posté le 27-08-2007 à 15:30:40    

Dans mes souvenirs ça s'autoincrémente. Mais je peux confondre avec oracle...

Reply

Marsh Posté le 27-08-2007 à 15:32:39    

Le mieux ça reste de spécifier aucune valeur pour être sûr, mais s'il dit que ça fonctionnait avant... :spamafote:


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Sujets relatifs:

Leave a Replay

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