Probleme insert [PHP/SQL] - PHP - Programmation
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
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 ).
Marsh Posté le 16-07-2006 à 13:06:48
AlphaZone a écrit : xmysql_query n'est pas une fonction standard de php. |
t ecris jamais de fonctions en php
surtout en sql !
d habitude tu dis des trucs bien mais la alphazone jte comprends pas
en tout cas le bug provient surement de ta fonction sundevil donc balance la ici
Marsh Posté le 16-07-2006 à 13:30:57
ouais j ai vu mais t avais deja posté
je vois pas trop d ou peut venir le probleme
poste la en entier et aussi la page qui appelle la fonction
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.
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.
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.
Marsh Posté le 16-07-2006 à 15:35:51
mIRROR a écrit : t ecris jamais de fonctions en php |
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.
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 ?
Marsh Posté le 16-07-2006 à 15:54:54
sundevil a écrit : |
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
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 ?
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.
Marsh Posté le 16-07-2006 à 20:10:58
sundevil a écrit : et si tu parlai poliment, sa coute pas plus chere. |
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
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 ?
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.
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
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
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
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
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
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 .
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.
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);
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.
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.
Marsh Posté le 16-07-2006 à 23:57:45
meme sans le header, sa le fait, je comprend vraiment pas pourquoi...
Marsh Posté le 17-07-2006 à 00:17:01
juste les identifiant de la base de donnee, que des variables quoi.
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.
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).
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 ?
Bon, petite test qu'on peut faire, change provisoirement ta fonction en
Code :
|
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');
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.
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 )
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...)
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 ) |
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.
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.
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 .