Problème d'insertion php/mysql

Petit nouveau ! | 3 Messages

20 avr. 2009, 10:51

Bonjour,

Lors d'une insertion dans ma base de données, au lieu de m'ajouter une ligne, il m'en ajoute 3 (3 identiques)
J'ai utilisé la fonction mysql_affected_rows(), cependant quand je l'utilise, elle me dit que je ne fais qu'une seule insertion.

Je pense avoir fouillé tout mon code, et pourtant, je ne vois pas d'où cela pourrait bien venir. Si besoin, je peux vous le mettre à disposition.

Cordialement,
pikmin

ViPHP
ViPHP | 1136 Messages

20 avr. 2009, 11:21

Slt ,

Pour t'aider à résoudre ton problème , ça serai effectivement mieux avec ton code ...

Ch. :D

Petit nouveau ! | 3 Messages

20 avr. 2009, 11:48

Voilà la partie du code concernant l'ajout d'une entrée dans ma base

Code : Tout sélectionner

if (isset($_POST['submit'])) { $id = addslashes($_POST['id']); $redacteur = addslashes($_POST['redacteur']); $dateDemande = (!empty($_POST['dateDemande']) AND testDate($_POST['dateDemande'])) ? changeDateFrEnUs($_POST['dateDemande']) : date("Y/m/d"); $demandeur = addslashes($_POST['demandeur']); $lieu = addslashes($_POST['lieu']); $ident = addslashes($_POST['ident']); $theme = addslashes($_POST['theme']); $objet = addslashes($_POST['objet']); $priorite = addslashes($_POST['priorite']); $intervenant = addslashes($_POST['intervenant']); $action = addslashes($_POST['action']); $commentaire = addslashes($_POST['demandeur']); $dateObjectif = (!empty($_POST['dateObjectif']) AND testDate($_POST['dateObjectif'])) ? changeDateFrEnUs($_POST['dateObjectif']) : ''; $dateCloture = (!empty($_POST['dateCloture']) AND testDate($_POST['dateCloture'])) ? changeDateFrEnUs($_POST['dateCloture']) : ''; if ($_POST['submit'] == 'ajouter') { mysql_query ("INSERT INTO tache VALUES ('', '" . $redacteur . "', '" . $dateDemande . "', '" . $demandeur . "', '" . $lieu . "', '" . $ident . "', '" . $theme . "', '" . $objet . "', '" . $priorite . "', '" . $intervenant . "', '" . $action . "', '" . $commentaire . "', '" . $dateObjectif . "', '" . $dateCloture . "')") or die(mysql_error()); } }
Les informations sont rentrées par l'utilisateur via un formulaire classique, je ne pense pas qu'il y ait besoin de le mettre.
Et pour précision, ce n'est pas un problème d'affichage, j'ai regardé dans phpMyAdmin, les lignes sont bien insérées

EDIT :
Auto-réponse :
Le problème viendrait peut-être du serveur étant donné que sur un autre PC avec Wamp il n'y a pas de soucis

Y a-t-il une explication à cela ?

Petit nouveau ! | 3 Messages

21 avr. 2009, 07:56

Bonjour,

Actuellement tu es sous quel environnement ? (windows, linux, mac)
Quel est le serveur installé (wamp, easyphp...)
Quel est sa version ?

Vu que tu dis par toi même que sur un autre PC ça fonctionne, on va se pencher sur ce que tu utilise sur ce PC pour que ça te fasse cela.

De mémoire ça m'avait fait la même chose une fois 3 insertions identique dans la BDD et j'étais avec une ancienne version de easyphp. Après l'avoir mis à jour ça avait réglé le problème.

Cordialement,

ViPHP
ViPHP | 1136 Messages

21 avr. 2009, 08:05

Re,

Peux tu dejà tenter ceci :

1: séparer ta requête de la méthode query() , ce qui va te permettre de l'afficher avant exécution , et donc t'aider à déboger .
$sql = "INSERT INTO tache VALUES 
      	(
      		'',
      		'" . $redacteur . "',
      		'" . $dateDemande . "',
      		'" . $demandeur . "',
      		'" . $lieu . "',
      		'" . $ident . "',
      		'" . $theme . "',
      		'" . $objet . "',
      		'" . $priorite . "',
      		'" . $intervenant . "',
      		'" . $action . "',
      		'" . $commentaire . "',
      		'" . $dateObjectif . "',
      		'" . $dateCloture . "'
      	)"
//Pour voir la requete
//echo $sql;

mysql_query ( $sql ) or die(mysql_error());
2: Préfère une syntaxe plus détaillée pour tes requêtes , comme ceci :

INSERT INTO table (a,b,c) VALUES (1,2,3)


3: apres , juste pour information , ici tes données ne sont pas filtrées ! ( addslashes ne suffit pas ) tu as donc une possible faille d'injection sql , ou xss.

Prends l'habitude d'utiliser au moins la méthode mysql_real_escape_string() pour limiter ce genre de failles .

Ce qui permet de bien vérifier la correspondance champ / valeur , et c'est plus lisible pour le debogage.

Ch.

Petit nouveau ! | 3 Messages

21 avr. 2009, 09:23

J'ai testé ce que tu m'as dit (la requête séparée de la méthode query(), les (a, b, c) avant les values)

1) la requête est bonne (vérifiée avec echo $sql;)

2) j'obtiens la même chose :?

et pour ce qui est du filtrage des données, dans mon cas il n'y a pas trop de soucis, c'est en intranet pour un service informatique, mais c'est toujours bon à savoir pour le futur :wink:

EDIT : il y a environ 10 minutes, je fais un ajout pour tester autre chose et là ça marche impeccable, pourtant je n'ai rien changé de spécial. J'ai pas essayé de comprendre (j'ai pas compris d'ailleurs) vu que ça marche