Lecture d'un fichier CSV échoue

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 : Lecture d'un fichier CSV échoue

Re: Lecture d'un fichier CSV échoue

par @rthur » 07 avr. 2010, 13:33

Depuis PHP 4.2.0 (il y a 8 ans déjà), register global est à Off.

Il faut que tu revoies comment utiliser des variables externes.
:arrow: http://phpdebutant.org/article56.php

Re: Lecture d'un fichier CSV échoue

par macgawel » 07 avr. 2010, 13:17

En effet, lorsque j'ajoute $action="ajouter"; en début de script, je ne retombe plus sur le formulaire de départ mais bien sur le script censé ajouter les données. J'obtiens un "Filename cannot be empty" laissant penser qu'il ne trouve pas les données issues du formulaire.
Tu l'obtiens comment ?
En général, les messages d'erreur PHP indiquent entre autres la ligne concernée...

On en revient toujours à la même chose :
Mets des points d'arrêt dans ton script ou si ton éditeur ne te le permet pas,
mets des die() pour voir ton script évoluer en vérifiant chaque étape...
3. Mets des echo régulièrement, pour voir à quel endroit ça bogue.
Ah, et aussi :
Revoie un peu le fonctionnement de base des formulaires, ainsi que la façon de récupérer les données...
Si tu es obligé de mettre $action="ajouter";, ça devrait te mettre la puce à l'oreille !

Re: Lecture d'un fichier CSV échoue

par street51 » 07 avr. 2010, 13:08

Après recherche, il semblerait que le problème vienne du formulaire.

En effet, lorsque j'ajoute $action="ajouter"; en début de script, je ne retombe plus sur le formulaire de départ mais bien sur le script censé ajouter les données. J'obtiens un "Filename cannot be empty" laissant penser qu'il ne trouve pas les données issues du formulaire.

Par contre, je ne vois pas ce qui cloche dans le formulaire.
<form method="post" action="notes_ajouter.php" ENCTYPE="multipart/form-data">
<input type="file" name="fichier" enctype="multipart/form-data"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="10000000"><br>
<input type="submit" name="submit" value="OK !"><input type="hidden" name="action" value="ajouter">  
    </form>

Re: Lecture d'un fichier CSV échoue

par @rthur » 07 avr. 2010, 11:58

Je pense que l'on t'a déjà donné les pistes à suivre pour débuguer ton script.
Maintenant c'est à toi de rechercher la cause du problème :
Mets des points d'arrêt dans ton script ou si ton éditeur ne te le permet pas,
mets des die() pour voir ton script évoluer en vérifiant chaque étape...
3. Mets des echo régulièrement, pour voir à quel endroit ça bogue.

Re: Lecture d'un fichier CSV échoue

par street51 » 07 avr. 2010, 10:46

Bonjour, ma page ressemble à ceci :

Image

Lorsque j'envoie le fichier notes.csv, je retombe sur la même chose, sans que le fichier ait été uploadé.

Re: Lecture d'un fichier CSV échoue

par macgawel » 07 avr. 2010, 10:25

Merci pour ta réponse.

L'ennui c'est que modifier mon script ne change absolument rien, je n'ai pas l'impression qu'il soit lu, je ne sais pas vraiment ce qu'il se passe quand je valide... #-o
Bonjour.

1. Ca t'affiche quoi ?

2. Après envoi du formulaire, ça t'affiche quoi ?

3. Mets des echo régulièrement, pour voir à quel endroit ça bogue.

4. Il y a des fichiers de log qui peuvent te donner des indications.

Re: Lecture d'un fichier CSV échoue

par stealth35 » 07 avr. 2010, 09:57

un petit LOAD_DATA pour le CVS

Re: Lecture d'un fichier CSV échoue

par Invité » 07 avr. 2010, 07:48

Merci pour ta réponse.

L'ennui c'est que modifier mon script ne change absolument rien, je n'ai pas l'impression qu'il soit lu, je ne sais pas vraiment ce qu'il se passe quand je valide... #-o

Re: Lecture d'un fichier CSV échoue

par @rthur » 07 avr. 2010, 00:17

Bonjour,

Tu as posté dans le forum "PHP avancé", donc c'est à toi de faire ton debug pour nous dire d'où viens le problème.
Mets des points d'arrêt dans ton script ou si ton éditeur ne te le permet pas des die() pour voir ton script évoluer en vérifiant chaque étape... et dégage ces "@" qui servent justement à masquer les erreurs alors que justement tu pourrais en avoir besoin.

Lecture d'un fichier CSV échoue

par street51 » 06 avr. 2010, 23:18

Bonjour,
Il y a quelques mois, j'avais un problème pour insérer un fichier CSV dans une BDD, qui avait été résolu et le script fonctionnait parfaitement.

J'ai voulu l'utiliser à nouveau aujourd'hui, et il ne fonctionne plus. Je n'ai touché à aucune ligne de code depuis novembre, et je n'ai pas eu à réutiliser le script depuis d'ailleurs. Lorsque je charge le fichier CSV et que je clique sur OK, je reviens sur la même page (ce qui est normal) mais il ne se passe absolument rien, je n'ai ni message de confirmation ni message d'erreur, et la BDD reste inchangée.

D'où pourrait venir le problème ? Y'aurait-il eu des changements de normes, une évolution du code, ou quelque chose dans le genre, depuis l'année dernière ?

Je vous joins l'intégralité du code pour tenter d'y voir plus clair :
<!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 http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="java/connect.css">

<title>Partiels blancs PCEM1/APEMK</title></head><body>
<br><br><br>
<center>
<?
ini_set('auto_detect_line_endings',TRUE);
 switch($action)
 {
   case "ajouter":

if ($fichier == "none")
	{
	print "Spécifier un fichier à envoyer.";
	}

else
	{	
	$dest_file="notes.csv";

	$source_file=stripslashes($fichier);
	
	$res_copy=copy($source_file , $dest_file);
	
	print "Fichier envoyé.<br>";
	}
	
   $bdd = "xxx";
   $host= "xxx";
   $user= "xxx";
   $pass= "xxx";

   @mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données"); 
   @mysql_select_db($bdd); 
   
 if (file_exists($fichier))
     $fp = fopen("$fichier", "r"); 
 else
     {
       echo "Fichier introuvable !<br>Importation stoppée.";
       exit();
     }
      
    while (!feof($fp)) 
    { 
       $liste = fgetcsv($fp,4096,";",""); 
    
       $num = $liste[0]; 
       $anat = $liste[1]; 
       $physio = $liste[2]; 
       $bc = $liste[3]; 
       $anat = preg_replace("#,#", '.', $anat);    
       $physio = preg_replace("#,#", '.', $physio);    
       $bc = preg_replace("#,#", '.', $bc);
$anat=round($anat,2);
$physio=round($physio,2);
$bc=round($bc,2);   

       $query = "UPDATE P1 SET anat='$anat', physio='$physio', bc='$bc' WHERE num='$num'"; 
       $result= MYSQL_QUERY($query); 
  
       if(mysql_error())
        { 
           print "Erreur dans la base de données : ".mysql_error();
           print "<br>Importation stoppée.";
           exit();
        } 
       else 
         print "";
     } 
     
     echo "<br><b>Importation Ok !</b>"; 
       
     /* Fermeture */ 
     fclose($fp); 
     MYSQL_CLOSE(); 
   
   break;
   
   default: 
   ?>  
   <? echo "<form method=\"post\" action=\"$PHP_SELF\" ENCTYPE=\"multipart/form-data\">"; ?>
<input type="file" name="fichier" enctype="multipart/form-data"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="10000000"><br>
<input type="submit" name="submit" value="OK !"><input type="hidden" name="action" value="ajouter">  
    </form>
   <? 
   break;  
   }
  ?>
</body> 
</html>
Merci de votre aide #-o