upload fichiers

Petit nouveau ! | 6 Messages

21 mars 2012, 17:19

Bonjour,

Le code suivant fonctionne avec FireFox et pas avec IE ?
Est ce que qq a une idée ?
<form id="fCsv" method="post" enctype="multipart/form-data" action="/Acc_Abs/PHP/importCsv.php"></form>
<?php
include "connexion.php";
//Connection à la base
$db=connect("localhost","root","","oscar");

for($x=1;$x<7;$x++){
		if (!$_FILES['avecBo02'.$x]['error']== UPLOAD_ERR_NO_FILE){
				$chemin=$_FILES["avecBo02".$x]['tmp_name'];
				//Remplace les antislash du chemin du fichier téléchargé par des slash
				$cheminfinal=str_replace('\\','/',$chemin);
				//editionde la requete
				$requete="LOAD DATA INFILE '$cheminfinal' INTO TABLE `accabsbo` FIELDS TERMINATED BY ';' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES";
				//exécute la requête SQL
				$reponse=mysql_query($requete,$db) or die (mysql_error());
			
		}//else{echo 'le fichier 02'.$x.' n\'existe pas';}
}
for($y=1;$y<7;$y++){
	
		if (!$_FILES["avecssBo02".$y]['error']== UPLOAD_ERR_NO_FILE){
				$chemin=$_FILES["avecssBo02".$y]['tmp_name'];
				//Remplace les antislash du chemin du fichier téléchargé par des slash
				$cheminfinal=str_replace('\\','/',$chemin);
				//editionde la requete
				$requete="LOAD DATA INFILE '$cheminfinal' INTO TABLE `accabsssbo` FIELDS TERMINATED BY ';' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES";
				//exécute la requête SQL
				$reponse=mysql_query($requete,$db) or die (mysql_error());
			
		}//else{echo 'le fichier 02'.$x.' n\'existe pas';}
}

?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 mars 2012, 19:02

Salut,

Vu l'étendu du code html, et le ça marche pas peux significatif je dirais qu'il s'agit tas de JS qui ne fait pas sont travail ?

Dans cas rien a voir avec c'est un problème du à la non normalisation du JS dans les navigateurs.

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 6 Messages

22 mars 2012, 11:36

Voici en parti mon code HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta content="no-cache" http-equiv="Pragma">
<meta content="no-cache, must-revalidate" http-equiv="Cache-Control">
<meta content="0" http-equiv="Expires">
<title>Releve du Jour</title>
<script src="Javascript/Requete_Export_Text.js" type="text/javascript" language="javascript">
<link href="CSS/style.css" type="text/css" rel="stylesheet">
</head>
<body id="corp">
Inscrire la date de la veille (AAAA-MM-JJ):
<br>
<br>
<input id="date_Rel" type="text" value="2011-04-01" name="date_Rel">
<br>
<br>
<input id="Csv" type="button" onclick="cEstParti('021')" value="Generer les Csv">
<div id="Csv2">
<div id="Csv3">
<form id="fCsv" method="post" enctype="multipart/form-data" action="/Acc_Abs/PHP/importCsv.php">
<input id="csvFileBo021" class="formeFile" type="file" name="avecBo021">
<input id="csvFilesansBo021" class="formeFile" type="file" name="avecssBo021">
<input id="csvFileBo022" class="formeFile" type="file" name="avecBo022">
<input id="csvFilesansBo022" class="formeFile" type="file" name="avecssBo022">
<input id="csvFileBo023" class="formeFile" type="file" name="avecBo023">
<input id="csvFilesansBo023" class="formeFile" type="file" name="avecssBo023">
<input id="csvFileBo024" class="formeFile" type="file" name="avecBo024">
<input id="csvFilesansBo024" class="formeFile" type="file" name="avecssBo024">
<input id="csvFileBo025" class="formeFile" type="file" name="avecBo025">
<input id="csvFilesansBo025" class="formeFile" type="file" name="avecssBo025">
<input id="csvFileBo026" class="formeFile" type="file" name="avecBo026">
<input id="csvFilesansBo026" class="formeFile" type="file" name="avecssBo026">
<input id="envoyerBo" type="submit">
</form>
</div>
</body>
</html>

ViPHP
ViPHP | 2577 Messages

22 mars 2012, 12:15

Reste le "ca ne marche pas" assez peu explicite.
Détail un peu ce qui se passe, ce qui devrait se passer et ce que tu fais.
Moogli pourra alors peut être voir quelque chose parce que moi et le javascript...

Petit nouveau ! | 6 Messages

22 mars 2012, 12:25

Voici le code erreur :

Notice: Undefined index: avecBo021 in C:\Users\Public\applications\EasyPHP5.2.10\www\Acc_Abs\PHP\importCsv.php on line 8

Notice: Undefined index: avecBo021 in C:\Users\Public\applications\EasyPHP5.2.10\www\Acc_Abs\PHP\importCsv.php on line 9
File 'C:\Users\Public\APPLIC~1\EASYPH~1.10\mysql\data\oscar\' not found (Errcode: 2)


Par contre je vois pas pourquoi cela viendrait du JS, vu qu'il ne sert a générer le code HTML?

ViPHP
ViPHP | 2577 Messages

22 mars 2012, 12:56

Je te conseille d'ajouter en début de script :
var_dump($_FILES);
Ca te permettra de voir ce que contient $_FILES et d'adapter les index de ce tableau.
(par habitude, j'utilise les mêmes valeurs pour id et name)

Petit nouveau ! | 6 Messages

22 mars 2012, 13:12

Voilà ce que contient $_FILES :

sous IE : array(0) { }

sous FireFox:
array(12) { ["avecBo021"]=> array(5) { ["name"]=> string(10) "Query1.csv" ["type"]=> string(24) "application/vnd.ms-excel" ["tmp_name"]=> string(58) "C:\Users\Public\applications\EasyPHP5.2.10\tmp\phpAC80.tmp" ["error"]=> int(0) ["size"]=> int(424) }

C'est vraiment allucinant, c'est bien le meme script sauf que sous IE mon name "avecBo021" n'existe pas !

ViPHP
ViPHP | 2577 Messages

22 mars 2012, 14:59

Tu as choisi XHTML comme type de document. Il faut donc fermer les balises input (ainsi que les autres).
Pas sur que ca explique ton problème, mais c'est à vérifier.

Petit nouveau ! | 6 Messages

22 mars 2012, 15:55

Désolé, mais serais tu me dire comment créer mon input avec une balise fermé dynamiquement ?

nouveauInputFile('avecBo'+Centre, 'avecBo'+Centre, 'file', 'fCsv', 'formeFile');

function nouveauInputFile(id, nom, typebal, zone, cName)
{
var zoneFile = document.getElementById(zone);
var nFile = document.createElement('input');
nFile.type = typebal;
nFile.id = id;
nFile.name = nom;
nFile.className = cName
zoneFile.appendChild(nFile);
}

ViPHP
ViPHP | 2577 Messages

22 mars 2012, 16:20

D'après ce que je vois, il y a un problème dans le html que tu montres dans le premier message en utilisant http://validator.w3.org/ tu peux voir les problèmes.

Petit nouveau ! | 6 Messages

22 mars 2012, 16:48

Oui effectivement il y a un problème, j'ai passé mon code dans le W3C, il pointe bien sur les balise input et br qui ne sont pas fermé.

Le probleme est comment générer un <input /> en JS avec Var nFile = document.createElement('input');

ViPHP
AB
ViPHP | 5818 Messages

22 mars 2012, 17:39

Désolé, mais serais tu me dire comment créer mon input avec une balise fermé dynamiquement ?

nouveauInputFile('avecBo'+Centre, 'avecBo'+Centre, 'file', 'fCsv', 'formeFile');

function nouveauInputFile(id, nom, typebal, zone, cName)
{
var zoneFile = document.getElementById(zone);
var nFile = document.createElement('input');
nFile.type = typebal;
nFile.id = id;
nFile.name = nom;
nFile.className = cName
zoneFile.appendChild(nFile);
}
Pour donner des attributs essaies avec setAttribute()

Sinon je vois que tu utilises LOAD DATA INFILE. Faits attention car si cela marche en local il est peut probable que cela fonctionne en distant sur un serveur mutualisé car il faut avoir le droit mysql d'écriture sur les fichiers.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 mars 2012, 18:33

Je suis loin d'être calé en JS mais :
- le formulaire est generé par JAVASCRIPT, c'est du moins ce que montée ton code JS !
- php n'a rien a voir avec Javascript
- tu sais que le code php fonctionne vue que tu a fait des upload, à priori correct, via firefox.

À faire
- coder le formulaire complet en dure et voir s'il fonctionne sur tout les navigateurs (sans toucher au code php). Tu pourra ainsi valider le principe de fonctionnement et valider les fioritures après.
- debugger le JS pour qu'il fonctionne avec IE. Qui par essence ne fait que ce qu'il souhaite et de préférence pas. Olmert les autres.

Tu peux utiliser une extension comme firebug (ou la console du web de chrome) pour voir. E Ue fait exactement le JS (chrome permet même de le debugage avec des points d'arrêts !).
Use et abusé de la fonction var_dump et pas seulement sur $_FILES, (à fait sur GET et post aussi)
Je te conseillerais aussi d'utiliser l'extension xdebug qui, bien configurées, pourra te montrer "le scope" de variable.

Au passage tu n'a pas de balise form dans ton code, copier collé foireux ? Si ce n'est pas le cas peut être que simplement c'est IE qui ne fait pas n'importe quoi :mrgreen:

@+
Il en faut peu pour être heureux ......