insertion en double

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : insertion en double

Re: insertion en double

par stealth35 » 13 août 2010, 03:28

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 :(

Re: insertion en double

par Patriboom » 13 août 2010, 03:24

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

par Patriboom » 12 août 2010, 00:01

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

par yablif » 10 août 2010, 19:16

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

par yablif » 08 août 2010, 17:07

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

par Patriboom » 08 août 2010, 13:50

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

par 3S48L » 08 août 2010, 10:16

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

par Patriboom » 08 août 2010, 04:31

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";
}

insertion en double

par yablif » 07 août 2010, 23:06

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>