Page 1 sur 1

insertion en double

Posté : 07 août 2010, 23:06
par yablif
Je n'arrive pas à comprendre pourquoi lorsque j'exécute la page suivante, le record est inséré 2 fois dans la database.
Quelqu'un voudrait-t'il me signaler mon erreur ?
Merci.
<html>
<head>
<title>Forum</title>
<meta http-equiv="Content-Type" content="text/html; charset=charset=iso-8859-1">
<style>
p {padding:0.5em; background-color:lightblue;}
</style>
</head>
<body>
<?php
echo "<h3>Insertion dans la table $forum</h3>\n";

include "../vars.inc.php";
$link = mysql_connect($HOST,$USER,$PASS) or 
	die("Impossible de se connecter: ".mysql_error());
if (!mysql_select_db($DB, $link)) {
	die('Sélection de base de données impossible');
}

echo "<p>\n";
$sql = "SELECT * FROM `Forum_attente` WHERE `num` = '$no'";
echo "$sql<br>\n";
$result = mysql_query($sql, $link);
if (!$result)
	die ('ERREUR lors de la lecture du record $no de la table Forum_attente !<br>\n');
$row = mysql_fetch_array($result);
echo "</p>\n";

echo "<p>\n";
$sql = "INSERT INTO `$forum` (`date`,`type`,`sujet`,`message`,`coordonnees`,`mail`,`ip`)
	VALUES ('".$row['date']."', '".$row['type']."', '".$row['sujet']."', '".$row['message']."', '".$row['coordonnees']."', '".$row['mail']."', '".$row['ip']."')";
echo "$sql<br>\n";
$result = mysql_query($sql, $link);
printf("Lignes affect&eacute;es : %d<br>\n", mysql_affected_rows());
if ($result==FALSE)
	echo "ERREUR lors de l'insertion dans la table $forum !<br>\n";
else
	echo "Insertion dans la table $forum: OK<br>\n";
echo "</p>\n";
?>
<br>
<a href="index.php">Retour forum attente</a><br>
<a href="../../forum.php">Retour forum principal</a><br>
</body>
</html>


Re: insertion en double

Posté : 08 août 2010, 04:31
par Patriboom
Quand tu fais ta vérification ( if ($result==FALSE) ) tu demandes un nouvel enregistrement.

Il vaudrait mieux faire
if (mysql_query($sql, $link) )  {
        echo "Insertion dans la table $forum: OK<br>\n";
} else {
        echo "ERREUR lors de l'insertion dans la table $forum !<br>\n";
}

Re: insertion en double

Posté : 08 août 2010, 10:16
par 3S48L
Je te remercie vivement de ta réponse.
J'ai changé le code comme tu le suggères, mais malheureusement le problème n'est pas résolu !
Une aute idée ?

Re: insertion en double

Posté : 08 août 2010, 13:50
par Patriboom
Force est de croire que ton code est lu deux fois ... ta page ou ton segment est appelé deux fois.

Quel résultat te donne ta ligne de contrôle ( 1 ou 2 ) ?
printf("Lignes affect&eacute;es : %d<br>\n", mysql_affected_rows());

Aussi, lisant ceci
$sql = "SELECT * FROM `Forum_attente` WHERE `num` = '$no'";
...
$sql = "INSERT INTO `$forum` (`date`,`type`,`sujet`,`message`,`coordonnees`,`mail`,`ip`)  VALUES ('".$row['date']."', '".$row['type']."', '".$row['sujet']."', '".$row['message']."', '".$row['coordonnees']."', '".$row['mail']."', '".$row['ip']."')";
Je comprends que tu fais un INSERT dans Forum_attente ailleurs (autre code, autre page) ... est-ce que tu ne ferais pas l'INSERT semblable dans le $forum en même temps dans cette autre page (ailleurs)

Autrement, vois dans tes autres pages si tu n'appellerais pas deux fois le code que tu nous présentes ici.

Re: insertion en double

Posté : 08 août 2010, 17:07
par yablif
J'essaye de copier un record (num=$no) depuis la table Forum_attente dans la table Forum ($forum). Les 2 tables ont la même structure:

Code : Tout sélectionner

CREATE TABLE `Forum_attente` ( `num` int(4) NOT NULL auto_increment, `date` datetime NOT NULL default '0000-00-00 00:00:00', `type` varchar(10) NOT NULL default '0', `sujet` varchar(50) NOT NULL default '', `message` longtext NOT NULL, `coordonnees` varchar(30) NOT NULL default '0', `mail` varchar(50) NOT NULL default '', `ip` varchar(50) NOT NULL default '', `fichier` varchar(35) NOT NULL default '', `mac` text NOT NULL, PRIMARY KEY (`num`) ) TYPE=MyISAM AUTO_INCREMENT=2 ;
Le mysql_affected_rows retourne toujours 1.

Si j'appelle ma page comme suit,
http://www.monsite.web/monscript.php?forum=Forum&no=3
le problème se présente aussi, le record est inséré deux fois.

Re: insertion en double

Posté : 10 août 2010, 19:16
par yablif
J'ai ajouté une trace (écriture dans un fichier de log), et je constate qu'en fait, c'est toute la page web qui est exécutée deux fois.
Bizarre ...

Re: insertion en double

Posté : 12 août 2010, 00:01
par Patriboom
C'est bien ce que je soupçonnais. Analyse bien ton log et cherche surtout dans les sous-routines appelées par plusieurs pages, souvent se trouvent là les appels en double qu'on ne soupçonne pas. Autrement, tu peux encore faire une index "UNIQUE" à ta table de données pour que MySQL empêche les doublons.

Re: insertion en double

Posté : 13 août 2010, 03:24
par Patriboom
Je n'arrive pas à comprendre pourquoi lorsque j'exécute ... la page suivante, le record est inséré 2 fois dans la database.
As-tu fait les vérifications que yablif fait ou a faites ?
Si oui, donne-nous ton code, ta structure de base que nous puissions regarder cela.

Re: insertion en double

Posté : 13 août 2010, 03:28
par stealth35
Je n'arrive pas à comprendre pourquoi lorsque j'exécute ... la page suivante, le record est inséré 2 fois dans la database.
As-tu fait les vérifications que yablif fait ou a faites ?
Si oui, donne-nous ton code, ta structure de base que nous puissions regarder cela.
c'est un spam :(