Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1133 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Probleme insert [PHP/SQL]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme insert [PHP/SQL]

n°1407489
sundevil
Posté le 16-07-2006 à 12:40:01  profilanswer
 

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

mood
Publicité
Posté le 16-07-2006 à 12:40:01  profilanswer
 

n°1407495
gebruik
Posté le 16-07-2006 à 12:48:28  profilanswer
 

Tu peux détailler ladite fonction ?

n°1407497
AlphaZone
Posté le 16-07-2006 à 12:52:18  profilanswer
 

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 ;)

n°1407501
sundevil
Posté le 16-07-2006 à 13:04:02  profilanswer
 

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 ;)).

n°1407502
mIRROR
Chevreuillobolchévik
Posté le 16-07-2006 à 13:06:48  profilanswer
 

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
 

n°1407503
sundevil
Posté le 16-07-2006 à 13:08:05  profilanswer
 

ba sa yest je lai fait lol.

n°1407512
mIRROR
Chevreuillobolchévik
Posté le 16-07-2006 à 13:30:57  profilanswer
 

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

n°1407547
gebruik
Posté le 16-07-2006 à 14:34:52  profilanswer
 

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.

n°1407551
sundevil
Posté le 16-07-2006 à 14:39:04  profilanswer
 

 $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.

n°1407569
gebruik
Posté le 16-07-2006 à 15:29:52  profilanswer
 

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

mood
Publicité
Posté le 16-07-2006 à 15:29:52  profilanswer
 

n°1407573
AlphaZone
Posté le 16-07-2006 à 15:35:51  profilanswer
 

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
n°1407576
sundevil
Posté le 16-07-2006 à 15:42:02  profilanswer
 

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 ?

n°1407585
mIRROR
Chevreuillobolchévik
Posté le 16-07-2006 à 15:54:54  profilanswer
 

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

n°1407587
AlphaZone
Posté le 16-07-2006 à 15:55:17  profilanswer
 

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 ?

n°1407588
mIRROR
Chevreuillobolchévik
Posté le 16-07-2006 à 15:55:51  profilanswer
 

bug :o


Message édité par mIRROR le 16-07-2006 à 15:59:09
n°1407692
sundevil
Posté le 16-07-2006 à 19:40:38  profilanswer
 

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.

n°1407704
mIRROR
Chevreuillobolchévik
Posté le 16-07-2006 à 20:10:58  profilanswer
 

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:

n°1407707
sundevil
Posté le 16-07-2006 à 20:17:22  profilanswer
 

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.

n°1407710
mIRROR
Chevreuillobolchévik
Posté le 16-07-2006 à 20:27:28  profilanswer
 

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:

n°1407711
sundevil
Posté le 16-07-2006 à 20:28:25  profilanswer
 

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

n°1407714
mIRROR
Chevreuillobolchévik
Posté le 16-07-2006 à 20:35:29  profilanswer
 

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

n°1407736
sundevil
Posté le 16-07-2006 à 21:18:26  profilanswer
 

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 ;).

n°1407739
AlphaZone
Posté le 16-07-2006 à 21:24:11  profilanswer
 

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.

n°1407743
sundevil
Posté le 16-07-2006 à 21:28:57  profilanswer
 

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);
 

n°1407776
AlphaZone
Posté le 16-07-2006 à 23:48:53  profilanswer
 

Tout cela est bizarre.

n°1407777
sundevil
Posté le 16-07-2006 à 23:51:20  profilanswer
 

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

n°1407779
AlphaZone
Posté le 16-07-2006 à 23:53:50  profilanswer
 

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.

n°1407781
sundevil
Posté le 16-07-2006 à 23:57:45  profilanswer
 

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

n°1407789
naceroth
Posté le 17-07-2006 à 00:14:51  profilanswer
 

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

n°1407790
sundevil
Posté le 17-07-2006 à 00:17:01  profilanswer
 

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


Message édité par sundevil le 17-07-2006 à 00:17:36
n°1407795
AlphaZone
Posté le 17-07-2006 à 00:23:34  profilanswer
 

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.

n°1407800
sundevil
Posté le 17-07-2006 à 00:32:06  profilanswer
 

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).

n°1407802
naceroth
Posté le 17-07-2006 à 00:41:21  profilanswer
 

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');

n°1407804
sundevil
Posté le 17-07-2006 à 00:46:44  profilanswer
 

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.

n°1407805
naceroth
Posté le 17-07-2006 à 00:50:21  profilanswer
 

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...)

n°1407822
AlphaZone
Posté le 17-07-2006 à 07:22:07  profilanswer
 

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
n°1408090
sundevil
Posté le 17-07-2006 à 14:05:11  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Probleme insert [PHP/SQL]

 

Sujets relatifs
[PHP] mon serveur ne traite pas le PHPproblème définition de variables
Température système en PHP via SNMPUn wizard pour la généralisation des requêtes SQL
Problème avec les textures en openglun équivalent à SQL Server Profiler ??
[C# .net] Faire un simple "select" à SQL Server[PHP] Controler une webcam en PHP
probleme sur mon site...Probleme fsockopen
Plus de sujets relatifs à : Probleme insert [PHP/SQL]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR