Insertion complexe de de données provenant d'un fichier txt

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 complexe de de données provenant d'un fichier txt

par BFH » 31 mai 2005, 11:21

Désolé sadeq mais ça ne marche pas!

rappel de ce que j'ai:
$insert="LOAD DATA INFILE '".$FI."' INSERT INTO TABLE item FIELDS TERMINATED BY ','  LINES TERMINATED BY '\\n\\r' IGNORE 9 LINES  (INum,IPage,IDevice,IGroup,IValue,IID) ";
Erreur de syntaxe près de 'INSERT INTO TABLE item FIELDS TERMINATED BY ',' LINES TERMINA' à la ligne 1

par BFH » 31 mai 2005, 11:13

Jeudi grand max car je doit commencer les tests pour voir si cela fonctionne vendredi qui vient

par sadeq » 31 mai 2005, 11:13

LOAD DATA INFILE '".$FI."' INSERT INTO TABLE 'item'
C'est là le problème : il faut enlever les quotes ce qui donne :
...LOAD DATA INFILE '".$FI."' INSERT INTO TABLE item FIELDS TERMINATED BY ';' ....

par mere-teresa » 31 mai 2005, 10:46

Tu as jusque quand pour résoudre ton problème ?

par BFH » 31 mai 2005, 10:44

J'ai ça comme code :
$insert="LOAD DATA INFILE '".$FI."' INSERT INTO TABLE 'item' FIELDS TERMINATED BY ';'
		LINES TERMINATED BY '\\n\\r' IGNORE 9 LINES  (INum,IPage,IDevice,IGroup,IValue,IID) ";
c'est a dire comme sadeq
cela me retourne :
Erreur de syntaxe près de 'INSERT INTO TABLE 'item' FIELDS TERMINATED BY ';' LINES TERMI' à la ligne 1
je ne comprends pas pourquoi!

par zeus » 31 mai 2005, 09:40

Le ignore 9 lines doit être à la fin de la requete !!!!

J'ai essayé de l'utiliser mais j'ai pas réussi

par sadeq » 31 mai 2005, 09:38

C'est normal, il faut mettre IGNORE juste avant la liste des champs comme il faut doubler les anti-slash de \n et \r:
$insert="LOAD DATA INFILE '".$FI."' INSERT INTO TABLE item FIELDS TERMINATED BY ';' LINES TERMINATED BY '\\n\\r' 
IGNORE 9 LINES  (INum,IPage,IDevice,IGroup,IValue,IID) "; 
mysql_query($insert)or die(mysql_error()); 
Syntaxe générale :
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'    [REPLACE | IGNORE]    INTO TABLE tbl_name    [FIELDS        [TERMINATED BY '\t']        [[OPTIONALLY] ENCLOSED BY '']        [ESCAPED BY '\\' ]    ]    [LINES         [STARTING BY '']            [TERMINATED BY '\n']    ]    [IGNORE number LINES]    [(col_name,...)]

par BFH » 31 mai 2005, 08:48

Maintenant j'ai un problème de syntaxe :
$insert="LOAD DATA INFILE '".$FI."' INSERT INTO TABLE 'item' IGNORE 9 LINES FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n\r' (INum,IPage,IDevice,IGroup,IValue,IID) ";
mysql_query($insert)or die(mysql_error());
ça ma retourne:
Erreur de syntaxe près de 'INSERT INTO TABLE 'item' IGNORE 9 LINES FIELDS TERMINATED BY ';'' à la ligne 1
quelqu'un sait il pourquoi?

par BFH » 30 mai 2005, 13:55

Ces valeurs viennent du fichier texte que j'insère dans la base. Je desirerais extraire une partie des lignes 2, 7, 9 & 10 afin de les inserer dans la table report.

par sadeq » 30 mai 2005, 12:38

D'où viennent les valeurs des champs que tu veux insérer

par BFH » 30 mai 2005, 11:26

Bon je rappelle mon code complet, code qui permet de faire pour l'instant une insertion semi complex d'un fichier dans une base de données.
if(isset($_GET["FI"]))
{
$FI=$_GET["FI"];
}

if(file_exists($FI))
{
$RHost=basename($FI, ".csv");//c'est encore mieux que ce qu'il y avait avant!
$insert="LOAD DATA INFILE '".$FI."' INSERT INTO TABLE 'item' IGNORE 1 LINES FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n\r' (INum,IPage,IDevice,IGroup,IValue,IID) ";
$insert2="INSERT INTO TABLE 'report' (RHost) VALUES ('$RHost') ";

mysql_query($insert);
mysql_query($insert2);

echo"<CENTER><h1><font color='#0033CC'>Insertion Réussie</font></h1></CENTER><hr><P>";
}
Avec ce code on ignore la première ligne du fichier texte et on insere toutes les autres dans la table item;
Et on recupère juste le nom du fichier qu'on insère dans report(RHost).

Ma table report est construite comme suit :
report (ID, RVersion, RHost, RHostComment, RUser, RLocation, RDateTime)
Je desirerais inserer :
_ la ligne n°2 du fichier dans le champs RVersion
_ la ligne n°7 du fichier dans le champs RUser
_ les lignes n°9 & 10 du fichier dans le champs RDateTime


Est ce que quelqu'un sait comment faire cela :?:

par BFH » 30 mai 2005, 09:17

Et ça tu sais pourquoi c'est comme ça??
Maintenant ce qui ne fonctionne pas c'est :
print($tab["'$fichier'"]);
ça me dit : Notice: Undefined index:
Problème reglé

par Cyrano » 30 mai 2005, 09:15

Pas facile de prendre un magohamoth de vitesse :langue:

par BFH » 30 mai 2005, 09:14

Désolé j'ai édité trop tard :
STOP problème solutionné
J'y avais pensé juste apres avoir posté...

par Cyrano » 30 mai 2005, 09:12

Oui, là, le problème est plus subtil: le "\" est un caractère d'échappement, pour l'utiliser en tant que caractère, il faut lui-même l'échapper:
$tab = explode('\\',$FI) //ici ça bug;
$fichier = count($tab) - 1;
echo"<CENTER><h1><font color='#0033CC'>Insertion Réussie</font></h1></CENTER><hr><P>";
echo $FI;
echo $fichier;
print($tab["'$fichier'"]);