Probleme insert [PHP/SQL]

Probleme insert [PHP/SQL] - PHP - Programmation

Marsh Posté le 16-07-2006 à 12:40:01    

Bonjour a tous,
 
Voila jai un petit probleme dans un script php.
 
Cest un script banal qui recoit des donnees d'un formulaire et qui m'enregistre ces donnees dans une base sql.
 
Le probleme, cest que a chaque execution du script, j'ai un doublon qui se creer et pourtant j'ai bien qu'un seul insert dans mon code.
 
La j'avoue je calle dur si quelqu'un a une idee, je prend ;).
 
type de l'insert:
 
$res = xmysql_query("INSERT INTO `page` (`id`, `sujet`, `date`, `titre`, `resumer`, `contenu`, `nom_page`, `template`, `contenu_ref`, `publier` , `auteur` , `destinataire` , `date_auteur` ) VALUES ('', '".$sujet."', '".$date."', '".$titre."', '".$resumer."', '".$contenu."', '".$nom_page."', '".$_POST['modele']."', '', '".$publier."' , '".$auteur."' , '', '".$date."' )", $lien);
 
sachant que xmysql_query est une fonction qui verifie la valeur de retour de mysql_query et qui redirige sur une autre page en cas d'erreur.
 
J'ai fait des print des mes requetes et je n'ai bien qu'un seul insert qui s'execute  :cry: .

Reply

Marsh Posté le 16-07-2006 à 12:40:01   

Reply

Marsh Posté le 16-07-2006 à 12:48:28    

Tu peux détailler ladite fonction ?

Reply

Marsh Posté le 16-07-2006 à 12:52:18    

xmysql_query n'est pas une fonction standard de php.
Utilise mysql_query tout simplement.  Elle renvoie faux en cas d'échec avec une erreur.
Je ne vois pas l'interêt d'utiliser une fonction autre que ce qu'on nous offre ;)

Reply

Marsh Posté le 16-07-2006 à 13:04:02    

xmysql_query est une fonction faite par moi qui verifie juste la valeur de retour et qui envoie sur une page d'erreur.
 
elle ressemble a:
function xmysql_query($sql, $lien)
{
 $res = mysql_query($sql, $lien);
 if ($res == 0)
 {
           header("location:xx.php" );
        }
}
 
donc je ne pense pas quelle joue sur mon probleme sachant quel existe juste pour eviter de me retaper tout sa a chaque fois (le but dune fonction quoi ;)).

Reply

Marsh Posté le 16-07-2006 à 13:06:48    

AlphaZone a écrit :

xmysql_query n'est pas une fonction standard de php.
Utilise mysql_query tout simplement.  Elle renvoie faux en cas d'échec avec une erreur.
Je ne vois pas l'interêt d'utiliser une fonction autre que ce qu'on nous offre ;)


 
 
t ecris jamais de fonctions en php  [:petrus dei]  
surtout en sql !
d habitude tu dis des trucs bien mais la alphazone jte comprends pas :heink:
en tout cas le bug provient surement de ta fonction sundevil donc balance la ici
 

Reply

Marsh Posté le 16-07-2006 à 13:08:05    

ba sa yest je lai fait lol.

Reply

Marsh Posté le 16-07-2006 à 13:30:57    

ouais j ai vu mais t avais deja posté :D
je vois pas trop d ou peut venir le probleme
poste la en entier et aussi la page qui appelle la fonction

Reply

Marsh Posté le 16-07-2006 à 14:34:52    

Le header de ta fonction pue, j'imagine qu'il y en a déjà un autre un peu plus haut dans ta page.
 
Pourquoi tu ne fais pas une requête avec un or die derrière ? Tu peux récupérer le numéro de l'erreur et la traiter.

Reply

Marsh Posté le 16-07-2006 à 14:39:04    

 $nom_page = date("d-m-Y" )."-".$_POST['sujet'].".php";
  $sujet = $_POST['sujet'];
  $titre = $_POST['titre'];
  $resumer = $_POST['resumer'];
  $contenu = $_POST['txt_area2'];
  $publier = 'N';
  $auteur = $_SESSION['nom_de_login'];
  $date = time();
  if (isset($_POST['publier']))
   $publier = 'O';
xmysql_query("INSERT INTO `page` (`id`, `sujet`, `date`, `titre`, `resumer`, `contenu`, `nom_page`, `template`, `contenu_ref`, `publier` , `auteur` , `destinataire` , `date_auteur` ) VALUES ('', '".$sujet."', '".$date."', '".$titre."', '".$resumer."', '".$contenu."', '".$nom_page."', '".$_POST['modele']."', '', '".$publier."' , '".$auteur."' , '', '".$date."' )", $lien);
 
sa cest mon script denregistrement.
 
J'utilise la fonction xmysql_query partout dans mon site et cest au seul endroit ou jai un probleme donc je pense pas que sa vienne d'elle. Sachant que l'enregistrement s'effectue correctement, la fonction ne rentre pas dans le if d'erreur, donc le header n'intervient pas, du moin cest se que je pense.

Reply

Marsh Posté le 16-07-2006 à 15:29:52    

Remplace ton header par un echo qui affiche n'importe quoi et vérifie si tu as toujours deux enregistrements qui se font.

Reply

Marsh Posté le 16-07-2006 à 15:29:52   

Reply

Marsh Posté le 16-07-2006 à 15:35:51    

mIRROR a écrit :

t ecris jamais de fonctions en php  [:petrus dei]  
surtout en sql !
d habitude tu dis des trucs bien mais la alphazone jte comprends pas :heink:
en tout cas le bug provient surement de ta fonction sundevil donc balance la ici


Sisi biensur mais je ne comprennais pas trop le sens de sa fonction. C'est surtout le nom qui m'a interpelé ou plutot déstabilisé ^^
 
Au passage, d'après un vague souvenir, il me semble avoir déjà eu ce problème de doublons.
 
@sundevil > Fais un affichage de ta requête pour voir ce qu'est-ce qu'elle fait.
 
[EDIT] Dans le cas d'un insert, tu n'es pas obligé de signalé tout les champs que tu veux remplir. Par exemple pour l'ID, s'il est en auto incrément, tu peux le viré. De même pour contenu_ref et destinataire que tu ne rempli pas. Biensur ca ne résoudra pas ton problème mais ca te simplifiera un peu la vie.


Message édité par AlphaZone le 16-07-2006 à 15:39:31
Reply

Marsh Posté le 16-07-2006 à 15:42:02    

exemple dinsert:
 
INSERT INTO `page` (`id`, `sujet`, `date`, `titre`, `resumer`, `contenu`, `nom_page`, `template`, `contenu_ref`, `publier` , `auteur` , `destinataire` , `date_auteur` ) VALUES ('', 'dfkjdfj', '1153057271', 'kjlkj', 'lkj', 'lkjlj', '16-07-2006-dfkjdfj.php', 'page', '', 'O' , 'sundevil' , '', '1153057271' )
 
et doublon :(.
 
AlphaZone tu te rapelle pas comment ta fait pour regler le probleme par hasard ?

Reply

Marsh Posté le 16-07-2006 à 15:54:54    

sundevil a écrit :


 
code inutile [:petrus75]
 
sa cest mon script denregistrement.
 
J'utilise la fonction xmysql_query partout dans mon site et cest au seul endroit ou jai un probleme donc je pense pas que sa vienne d'elle. Sachant que l'enregistrement s'effectue correctement, la fonction ne rentre pas dans le if d'erreur, donc le header n'intervient pas, du moin cest se que je pense.


 
et si tu essayais de nous montrer du code pertinent ?  
la ca fait deja deux fois que tu nous montres du flan on est pas voyants non plus :/
j ose esperer que tu n aies pas besoin de nous pour initialiser tes variables convenablement  
du genre ce fragment de code est dans une boucle foireuse
comment tu traites ta requete ensuite
toussa quoi

Reply

Marsh Posté le 16-07-2006 à 15:55:17    

Non justement c'est ca le pire. Une fois que tu auras pris une bonne habitude, tu feras moin attention à ce genre d'erreur.
 
As-tu essayé d'utilisé la fonction de base mysql_query() pour voir si cela fait pareil ?
Es-tu sur que ta fonction xmysql_query est appelée qu'une seule fois ?

Reply

Marsh Posté le 16-07-2006 à 15:55:51    

bug :o


Message édité par mIRROR le 16-07-2006 à 15:59:09
Reply

Marsh Posté le 16-07-2006 à 19:40:38    

la ca fait deja deux fois que tu nous montres du flan on est pas voyants non plus :/  
 
et si tu parlai poliment, sa coute pas plus chere.
 
Meme avec mysql_query de base, sa fait le doublon et mes variables sont bien initialiser et je n'ai pas de boucle dans mon script.

Reply

Marsh Posté le 16-07-2006 à 20:10:58    

sundevil a écrit :

et si tu parlai poliment, sa coute pas plus chere.


 
[:aloy] Flan: nm. 1) Dessert kilébon mais flasque 2) Un truc inutile et flasque aussi. Dans les deux cas ce mot n'est pas impoli mais réaliste
Source: le dictionnaire dtc :sweat:
 
on te demande une premiere fois ta fonction tu nous envoie un résumé  
ensuite on te demande un autre bout de code tu nous montre tes initialisations de variables
on s'en fout
c est toi l impoli qui nous fait perdre notre temps
si tu te contentais de repondre a nos questions ca couterait pas plus cher non plus :/
 
c est vraiment trop demander ... faire preuve d un peu de bon sens ? :cry:

Reply

Marsh Posté le 16-07-2006 à 20:17:22    

ma fonction, jvous lai, donner, avec le header, cest une fonction on ne peux plus conne. elle sert juste pour meviter de tout retaper a chaque fois.
 
Le script, ya pas de boucle rien, juste de variable initialiser pour les mettres dans une requetes sql, comme montrer un peu plus haut.

Reply

Marsh Posté le 16-07-2006 à 20:27:28    

alors ptet que tous tes scripts sont parfaits et que ptet tu n as pas besoin d'aide..ptet [:petrus75]
 
ou alors ptet que tes scripts ne sont pas parfaits et qu ils contiennent une grosse erreur  
 
je sais pas  
je sais plus  
je veux mourir :sweat:

Reply

Marsh Posté le 16-07-2006 à 20:28:25    

oui jme doute qui ya une erreur lol ;) mais justement, le script est telement bidon que jarrive pas a la voir :'(

Reply

Marsh Posté le 16-07-2006 à 20:35:29    

c est pour ca qu on te demande le code  
des fois on oublie un con de ";"  
ca peut etre du a plein de trucs debiles du meme style :/
 
mais si tu veux pas donner ton code je vais pas te forcer :sweat:
j espere juste que tu te rends compte qu on te sera d aucune utilité sans
 
mets toi au moins en mode strict je suis sur que ca va resoudre ton probleme si le script est aussi simple que tu le dis

Reply

Marsh Posté le 16-07-2006 à 21:18:26    

if (isset($_POST['sujet']) == false || isset($_POST['txt_area2']) == false)
{
 header("location:edition_page.php?id=page" );
 exit(1);
}
$nom_page = date("d-m-Y" )."-".$_POST['sujet'].".php";
$sujet = $_POST['sujet'];
$titre = $_POST['titre'];
$resumer = $_POST['resumer'];
$contenu = $_POST['txt_area2'];
$publier = 'N';
$auteur = $_SESSION['nom_de_login'];
$date = time();
if (isset($_POST['publier']))
 $publier = 'O';
$res = xmysql_query("INSERT INTO `page` (`id`, `sujet`, `date`, `titre`, `resumer`, `contenu`, `nom_page`, `template`, `contenu_ref`, `publier` , `auteur` , `destinataire` , `date_auteur` ) VALUES ('', '".$sujet."', '".$date."', '".$titre."', '".$resumer."', '".$contenu."', '".$nom_page."', '".$_POST['modele']."', '', '".$publier."' , '".$auteur."' , '', '".$date."' )", $lien);
 
 
voila le script complet (tt con comme prevue ;)). la fonction xmysql_query, vous lavai plus haut ;).

Reply

Marsh Posté le 16-07-2006 à 21:24:11    

Impossible que ce soit le script complet. Il manque la connexion à la base de données. Désolé mon ami, mais ils nous faut vraiment tout si tu veux pouvoir obtenir des réponses et pourquoi pas des solutions. C'est trop vague comme ca.

Reply

Marsh Posté le 16-07-2006 à 21:28:57    

pas con sa jai zapper cest ligne la dsl :s,  
 
re le script ;):
 
if (isset($_POST['sujet']) == false || isset($_POST['txt_area2']) == false)
{
 header("location:edition_page.php?id=page" );
 exit(1);
}
 
 
include("base.php" );
if (($lien = mysql_connect($bsql, $base, $password)) == 0)
{
 print("Serveur indisponible - Merci de recommencer dans quelques instants." );
 exit;
}
mysql_select_db($base_de_donne, $lien);
$nom_page = date("d-m-Y" )."-".$_POST['sujet'].".php";
$sujet = $_POST['sujet'];
$titre = $_POST['titre'];
$resumer = $_POST['resumer'];
$contenu = $_POST['txt_area2'];
$publier = 'N';
$auteur = $_SESSION['nom_de_login'];
$date = time();
if (isset($_POST['publier']))
 $publier = 'O';
$res = xmysql_query("INSERT INTO `page` (`id`, `sujet`, `date`, `titre`, `resumer`, `contenu`, `nom_page`, `template`, `contenu_ref`, `publier` , `auteur` , `destinataire` , `date_auteur` ) VALUES ('', '".$sujet."', '".$date."', '".$titre."', '".$resumer."', '".$contenu."', '".$nom_page."', '".$_POST['modele']."', '', '".$publier."' , '".$auteur."' , '', '".$date."' )", $lien);
 

Reply

Marsh Posté le 16-07-2006 à 23:48:53    

Tout cela est bizarre.

Reply

Marsh Posté le 16-07-2006 à 23:51:20    

a toi aussi tu trouve ;), mais sa me soule grave car forcement, sa plante tout mon truc le doublon.

Reply

Marsh Posté le 16-07-2006 à 23:53:50    

Peut-être un problème avec les header. Commente tout tes header et mets des simples "echo" de ce que tu veux, une requête un message d'erreur.

Reply

Marsh Posté le 16-07-2006 à 23:57:45    

meme sans le header, sa le fait, je comprend vraiment pas pourquoi...

Reply

Marsh Posté le 17-07-2006 à 00:14:51    

Juste comme ça, y a quoi dans le fichier base.php ?

Reply

Marsh Posté le 17-07-2006 à 00:17:01    

juste les identifiant de la base de donnee, que des variables quoi.


Message édité par sundevil le 17-07-2006 à 00:17:36
Reply

Marsh Posté le 17-07-2006 à 00:23:34    

Quand tu as effectué l'insertion des données dans ta base, l'ID est identique au doublon ou bien il a été incrémenté pour le doublon ?
Les doublons sont-ils exactement identique ou bien est-ce qu'il y a des données qui changent ?
 
Est-tu sûr et certain que ta page est appelée qu'une seule fois ?
 
As-tu essayé de recoder ta page à partir d'une page vierge ?
 
C'est un problème assez particulier. Je pense qu'en faisant un maximum de test, tu tomberas sur la faille. Pour le moment, je suis complètement démuni face à cela.

Reply

Marsh Posté le 17-07-2006 à 00:32:06    

Ouai je suis sur que la page est appeller une seule fois car jai fait plein de test de print pour verifier sa.
 
Les doublons sont exactement identique, seul l'id change et est incrementer de 1 (comme pour chaque nouvel enregistrement).

Reply

Marsh Posté le 17-07-2006 à 00:41:21    

Hum, y a pas une fonction qui permet une éxécution du script pas à pas dans le logiciel avec lequel tu codes ? :D
 
Bon, petite test qu'on peut faire, change provisoirement ta fonction en  

Code :
  1. function xmysql_query($sql, $lien,$sender='aucun')
  2. {
  3. echo $sender;
  4. $res = mysql_query($sql,$lien);
  5. if ($res == 0)
  6. {
  7.    header("location:xx.php" );
  8. }
  9. }


 
et l'appel à la fonction en xmysql_query("INSERT INTO `page` (`id`, `sujet`, `date`, `titre`, `resumer`, `contenu`, `nom_page`, `template`, `contenu_ref`, `publier` , `auteur` , `destinataire` , `date_auteur` ) VALUES ('', '".$sujet."', '".$date."', '".$titre."', '".$resumer."', '".$contenu."', '".$nom_page."', '".$_POST['modele']."', '', '".$publier."' , '".$auteur."' , '', '".$date."' )", $lien, 'le nom de ta page');

Reply

Marsh Posté le 17-07-2006 à 00:46:44    

oui et je voit pas trop ou tu veux en venir ;).
 
Sa me marque bien le nom de la page et une seul fois si cest sa que tu voulais tester.

Reply

Marsh Posté le 17-07-2006 à 00:50:21    

Ben, ça nous apprend déjà que la fonction n'est exécutée qu'une fois (vu qu'un header n'aurait pas été exécuté avec un echo qui traine :D)
 
T'utilises quelle version de mysql ?
 
(en fait, la seule fois où j'ai vu un truc du genre, c'était avec des transactions et un auto-commit...)

Reply

Marsh Posté le 17-07-2006 à 07:22:07    

naceroth a écrit :

Ben, ça nous apprend déjà que la fonction n'est exécutée qu'une fois (vu qu'un header n'aurait pas été exécuté avec un echo qui traine :D)


Pas bête comme test
 
Ce que tu peux faire sundevil, c'est de faire des écho à chaque accolade de ton script en les numérotans 1, 2, 3, ...
Et tu regarde s'il y a un doublon dans la numérotation. Si y'en n'a pas, on devra faire à appel au détective privée Sherlock Holmes et Dr. Watson.


Message édité par AlphaZone le 17-07-2006 à 07:24:57
Reply

Marsh Posté le 17-07-2006 à 14:05:11    

lol pas bete de faire apel a eux ;). La version de mysql que jai cest la 5.0.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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