Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/12/2010, 19h36   #1
Futur Membre du Club
 
Inscription : octobre 2005
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 145
Points : 18
Points : 18
Par défaut impossible inserer insert

bonsoir,

j'effectue une requete on ne peut plus simple :
Code :
1
2
3
 
$req1 = "INSERT INTO document (nomfichier,libelle,posteur,datecreat,datemodif,daterecept,format,nomsource,taille,proprietaire,parent,fichier,repertoire,ordre) VALUES('$targetFile','$targetFile','$posteur','$date','$date','$date','$format','$targetFile','$taille','$posteur',$iddoc,1,0,2)";     
 mysql_query($req1);
eh bien seuls les champs <libelle, posteur> ne sont jamais mis à jour !!
j'ai tout testé: renommer les champs ...

qd je créé une nouvelle table, en recopiant seulement la même structure, l'insertion se fait sans soucis.
par contre la création d'une nouvelle table avec recopie données et structure, pas d'insertion.

je cherche une piste de reflexion

merci !!!!! et bonne fêtes
lolodev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 10h44   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

essayez déjà d'afficher votre requête dans votre navigateur, et de l'exécuter directement à la main ensuite, vous récupèrerez surement un message d'erreur.

Ça sent la violation de contrainte

Vous pouvez aussi récupérer le message d'erreur MySQL grâce aux fonctions php (car il semble que vous soyez en php), pour l'afficher directement...

Sinon, vous dites
Citation:
eh bien seuls les champs <libelle, posteur> ne sont jamais mis à jour !!
Vous n'effectuez une requête UPDATE, mais une requête INSERT. Vous voulez dire que ces colonnes restent à NULL, mais que votre ligne est quand même insérée ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 13h51   #3
Futur Membre du Club
 
Inscription : octobre 2005
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 145
Points : 18
Points : 18
merci pour votre intèret

effectivement, la valeur par defaut devrait être NULL mais en fait le champs reste vide.
je ne peux voir un msg d' erreur car je passe via une fenêtre ajax modal qui appelle un script uploadify ajax.

je vous mets le script complet ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
$tmpFile = ( @get_magic_quotes_gpc() ) ? $_FILES['Filedata']['tmp_name']   : @addslashes($_FILES['Filedata']['tmp_name']) ;
//$nomfichier = ( @get_magic_quotes_gpc() ) ? $_FILES['Filedata']['name']  : @addslashes($_FILES['Filedata']['name']) ; //nom du fichier a uploader
$targetFile=html_entity_decode(htmlentities($_FILES['Filedata']['name'], ENT_QUOTES, 'UTF-8'));
// CHANGE $_FILES['Filedata']['name'] BY $targetFile IN the follow line
 
$posteur=$_REQUEST['auteur'];    //nom de la personne connecte
$taille = $_FILES['Filedata']['size'];
$taille=$taille/1024;
$format = $_FILES['Filedata']['type'];
$format = end(explode(".",$targetFile));
 
 
 
    IF( $doc['parent'] != 0)  // si pas racine
    {
        $chemin.=getChemin1($doc,$db);
    }
 
    $chemin.=$doc['libelle']."/";
    $chemin.=$targetFile;
 
  	IF(file_exists($chemin.$targetFile))
	{
		exit;
	}
 
    IF(move_uploaded_file($tmpFile,$chemin))
        {
           $req1 = "INSERT INTO document (nomfichier,libelle,posteur,datecreat,datemodif,daterecept,format,nomsource,taille,proprietaire,parent,fichier,repertoire,ordre) VALUES('$targetFile','$targetFile','$posteur','$date','$date','$date','$format','$targetFile','$taille','$posteur',$iddoc,1,0,2)";     
 
		 mysql_query($req1);
 
    // ON recupere les droits du pere si ON n'est pas &agrave; la racine
                $recupDoc=mysql_db_query($db,"SELECT max(iddoc) as lastdocid from document");
 
                $lastdoc=mysql_fetch_array($recupDoc);
                $idlastdoc=$lastdoc[lastdocid];  // id du dernier doc enregistré
                $resDroit=mysql_db_query($db,"SELECT idaction,idrole from documentDroit where iddoc =".$iddoc) or die("Impossible de recuperer le dernier dossier cr&eacute;e");
 
        while($voirDroit=mysql_fetch_array($resDroit)){
                    $insertDroit=mysql_db_query($db,"insert into documentDroit (iddoc,idaction,idrole) values ($idlastdoc,$voirDroit[idaction],$voirDroit[idrole])");
                }
 
    }
en fait seule champ <nomfichier> est mis à jour lors de l'insert alors que <libelle> devrait prendre aussi la valeur '$targetFile' (idem pour le champ <posteur> qui reste aussi vide)

qu'entendez vous par une violation de contrainte - je gére pas les contrainte d'intégrité ...

merci
lolodev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 13h56   #4
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
tu dois bien avoir un acces shell / phpmyadmin à ta base de donnée. Passe la commande sql en direct et tu aurras ton erreur. On peut pas deviner le message d'erreur nous.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 14h07   #5
Futur Membre du Club
 
Inscription : octobre 2005
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 145
Points : 18
Points : 18
je n'ai aucun pb SQL avec ma rêquete ...
si je publie sur ce FORUM c'est bien que je sèche fort même avec la neige
lolodev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h11   #6
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
on va y aller avec des pincettes.
On est sur un forum mysql. Donc on part du principe que le probleme viens de la base de données par du script.

Bon active les logs du serveur mysql. On verra bien si ton INSERT qui ne se fait pas arrive jusqu'au serveur ou pas. http://dev.mysql.com/doc/refman/5.1/en/server-logs.html

ensuite on va ajouter un petit quelque chose pour comprendre pourquoi on vois ou pas la requete passer.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
//
$_SESSION['raison'] = 'les conditions sont mals placées';
 
 	IF(file_exists($chemin.$targetFile))
	{
// ICI
         $_SESSION['raison'] = 'écrasement fichier';
		die("coucou je vais pas écraser un fichier qui existe déjà");
	}
 
    IF(move_uploaded_file($tmpFile,$chemin))
        {
 
 
           $req1 = "INSERT INTO document (nomfichier,libelle,posteur,datecreat,datemodif,daterecept,format,nomsource,taille,proprietaire,parent,fichier,repertoire,ordre) VALUES('$targetFile','$targetFile','$posteur','$date','$date','$date','$format','$targetFile','$taille','$posteur',$iddoc,1,0,2)";     
 
      $_SESSION['raison'] = $req1;
 
		 mysql_query($req1);
 
    // ON recupere les droits du pere si ON n est pas  la racine, 
                $recupDoc=mysql_db_query($db,"SELECT max(iddoc) as lastdocid from document");
 
                $lastdoc=mysql_fetch_array($recupDoc);
                $idlastdoc=$lastdoc[lastdocid];  // id du dernier doc enregistre
                $resDroit=mysql_db_query($db,"SELECT idaction,idrole from documentDroit where iddoc =".$iddoc) OR die("Impossible de recuperer le dernier dossier cr&eacute;e");
 
        while($voirDroit=mysql_fetch_array($resDroit)){
                    $insertDroit=mysql_db_query($db,"insert into documentDroit (iddoc,idaction,idrole) values ($idlastdoc,$voirDroit[idaction],$voirDroit[idrole])");
                }
 
    }

et pour finir tu fais un petit fichier test.php qui montre

Code :
1
2
3
<?php
session_start();
var_dump($_SESSION['raison']);
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 15h18   #7
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
j'ai mal lu la question.

fait le truc avec les logs, ça sera instructif. C'est toujours instructif de toute façon.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 08h56   #8
Futur Membre du Club
 
Inscription : octobre 2005
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 145
Points : 18
Points : 18
en fait ce que je ne m'explique pas, c'est que ces 2champs LIBELLE et POSTEUR doivent être NULL si champ vide, mais après l'INSERT je n'ai pas NULL.
il ya donc un insertion vide

Compte tenu que dans le champ LIBELLE je dois insérer la même chose que dans le champ NOMFICHIER, je ne comprend pas

j'ai essayé d'insérer un champ texte en dur, tjrs le soucis ...

merci pour une piste
lolodev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 11h43   #9
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
C'est normal que vous ayez une insertion vide, c'est pour cela que je vous suggérais de récupérer d'une part la VRAIE requete envoyée au serveur (et non la commande php qui vous permet de générer la requete), et de récupérer aussi les éventuels messages d'erreur MySQL


Si votre variable php est indéfinie ou vide, le fait de faire INSERT ... VALUES('$maVarPHP'... insèrera une valeur vide, et non un null !

Je suis prêt a parier que votre problème se situe ailleurs que la ou vous êtes en train de chercher.

Vous dites que seules les colonne libellé et posteur restent a NULL, mais comment le savez vous ? comment vérifiez vous cela ? directement dans phpmyadmin (ou autre), Ou est-ce dans votre page d'affiche de votre site que vous ne voyez rien ? (auquel cas, le problème vient peut être même d'une bête faute de frappe dans votre page d'affichage)

C'est pourquoi je vous ai conseillé d'afficher votre requete, message d'erreur et autre, afin de bien localiser le problème :
1/ est ce que la requete générée par PHP est bien celle que vous pensez.
2/ est-ce que la requete reçue par MySQL est bien exécutée ? est-ce qu'elle génère une erreur ?
3/ est-ce que le résultat DANS LA BASE de données est bien celui escompté ?
4/ est-ce que la page d'affichage des données affiche bien le contenu de la base ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 14h37   #10
Futur Membre du Club
 
Inscription : octobre 2005
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 145
Points : 18
Points : 18
bonjour,

"C'est normal que vous ayez une insertion vide," pourquoi ? mon insertion n'est pas vide, une ligne dans phpadmin est bien créée

"Je suis prêt a parier que votre problème se situe ailleurs que la ou vous êtes en train de chercher." [COLOR="rgb(46, 139, 87)"]je le pense aussi mais pour l'instant je cherche sur l'insert ...[/COLOR]

Vous dites que seules les colonne libellé et posteur restent a NULL, mais comment le savez vous ? [COLOR="rgb(46, 139, 87)"]et bien via phpmyadmin et à l'affichage dans le gestion de document en ligne, le libellé et posteur sont vides[/COLOR]

la requete ne genere pas d'erreur : j'ai créé un champ type longtext dans lequel j'insert la requête complète

ce que je n'explique c'est que la même variable PHP $targetFile s'insere dans le champ <nomfichier> sans soucis mais dans <libelle> le champ est vide ...
mais pas NULL
lolodev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 14h47   #11
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
la requete ne genere pas d'erreur : j'ai créé un champ type longtext dans lequel j'insert la requête complète
pouvez-vous dans ce cas poster la requete "finale", celle exécutée par MySQL

Citation:
ce que je n'explique c'est que la même variable PHP $targetFile s'insere dans le champ <nomfichier> sans soucis mais dans <libelle> le champ est vide ...
mais pas NULL
Quels sont les type des 3 colonnes nomfichier,libelle et posteur ?
le mieux serait encore de nous exposer la DDL de la table complète
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 14h52   #12
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Re,

Quelques autres pistes :

1 / Êtes vous sur de n'avoir aucune contrainte d'aucun type sur ces colonnes (mais dans ce cas, si elle était violée, vous devriez avoir un message d'erreur)

2/ êtes vous sur de ne pas avoir de trigger sur cette table ?

3/ avez vous essayé de lancer la même requete en changeant les valeurs a la main, et essayé de mettre a jour à la main également depuis phpmyadmin ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2010, 15h26   #13
Futur Membre du Club
 
Inscription : octobre 2005
Messages : 145
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 145
Points : 18
Points : 18
voici la structure de la table ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 
-- Version de PHP: 5.2.9
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
--
-- Base de données: `ergo54_web`
--
 
-- --------------------------------------------------------
 
--
-- Structure de la table `document`
--
 
CREATE TABLE IF NOT EXISTS `document` (
  `iddoc` int(4) NOT NULL AUTO_INCREMENT,
  `nomfichier` varchar(255) NOT NULL,
  `titre` varchar(255) NOT NULL,
  `resume` mediumtext,
  `auteur` varchar(255) DEFAULT NULL,
  `posteur` varchar(100) DEFAULT NULL,
  `datecreat` date NOT NULL,
  `datemodif` date NOT NULL,
  `daterecept` date NOT NULL,
  `motscles` varchar(255) DEFAULT NULL,
  `consignes` varchar(255) DEFAULT NULL,
  `format` varchar(100) DEFAULT NULL,
  `nomsource` varchar(255) DEFAULT NULL,
  `taille` int(4) DEFAULT NULL,
  `proprietaire` varchar(255) DEFAULT NULL,
  `parent` int(4) DEFAULT NULL,
  `fichier` int(1) DEFAULT NULL,
  `repertoire` int(1) DEFAULT NULL,
  `ordre` int(2) DEFAULT NULL,
  `hit` int(2) NOT NULL DEFAULT '0',
  `libelle` varchar(255) DEFAULT NULL,
  PRIMARY KEY  (`iddoc`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1772 ;
et voici le resultat de l'insert inclu dans un champ de la meme table:
INSERT INTO document (nomfichier,libelle,posteur,datecreat,datemodif,daterecept,format,nomsource,taille,proprietaire,parent,fichier,repertoire,ordre) VALUES('Lot 14.pdf','Lot 14.pdf','ggable','2010-12-21','2010-12-21','2010-12-21','pdf','Lot 14.pdf','375.44140625','ggable',1768,1,0,2)

le champ LIBELLE et POSTEUR sont vides qd la requete est jouée par le script PHP mais ok quand je fait pas SQL sous PHPMYADMIN !!!
lolodev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 14h53   #14
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Citation:
Envoyé par lolodev Voir le message
le champ LIBELLE et POSTEUR sont vides qd la requete est jouée par le script PHP mais ok quand je fait pas SQL sous PHPMYADMIN !!!
Donc, soit votre MySQL est particulièrement caractériel et possède un fort esprit de contrariété, soit comme je le disais, le problème est ailleurs.

Je reste persuadé que la commande qui arrive de php n'est pas celle que vous croyez.

Essayez de créer un page php tout simple où vous exécutez la requête saisie à la main, et voyez ce que cela donne...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h09.


 
 
 
 
Partenaires

Hébergement Web