Import txt to MySQL

Résolu
Bonjour à tous et meilleurs voeux !

Voilà, j'ai un bout de code qui ne fonctionne pas :\
J'essaie d'importer via un input file une liste d'adresse email dans ma table, mais je n'ai qu'une ligne vide qui s'insère.
Pouvez-vous m'aider svp ?

Voici mon fichier mes_mail.txt :
test1@test.com
test2@test.com
test3@test.com


Voici ma table :
CREATE TABLE IF NOT EXISTS `tb_newsletter_adresses` (
  `NumId` int(11) NOT NULL AUTO_INCREMENT,
  `Newsletter` varchar(255) NOT NULL,
  PRIMARY KEY (`NumId`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ;


Voici mon code PHP
$myFile = $_FILES['FileMail']['name'];
if(!($myFile))
{print("Impossible d'ouvrir le fichier $file_name ");}        
for ($index=0; $index < count($myFile); $index++)
{
$token_table[1]=strTok(";");
$Newsletter = addslashes(trim($token_table[1]));
echo stripslashes($Newsletter)."<br/>";
$result = mysql_query("INSERT INTO tb_newsletter_adresses (Newsletter) VALUES ('$Newsletter')");

if ($result == 1)
{echo stripslashes($Newsletter)."inséré <br/>";}
else
{echo "error inserting stripslashes($Newsletter) <br/>";}
}

echo "***** CONTENU DE LA TABLE *****<br/>";
$result = mysql_query("select * from tb_newsletter_adresses ");
while($row = mysql_fetch_array($result))
{echo stripslashes($row['Newsletter'])."<br/>";}

3 réponses

  1. Modérateur
    Bonjour,

    Le souci.. c'est que là .. tu ne lis pas le contenu du fichier....
    Il te faut utiliser les instructions :
    $myFile = isset( $_FILES['FileMail']['name'])?$_FILES['FileMail']['name']:NULL;
    if(!($myFile)){
      print("Impossible d'ouvrir le fichier $file_name ");
    }else{ 
     //ouverture du fichier
    $fp = fopen ($myFile, "r");
    
    // Boucle sur les lignes du fichier
    if ($fp){
    	/*Tant que l'on est pas à la fin du fichier*/
    	while (!feof($$fp)) {
    		/*On lit la ligne courante*/
    		$buffer = fgets($fp);
    		/*Traitement */
    		echo $buffer; // par exemple affichage
    
                   // c'est ici que tu peux mettre l'INSERT en BDD
    
                  
               
    	}
    	/*On ferme le fichier*/
    	fclose($fp);
    }
    ?>
    
    
    }
    

    1. Merci Jordane,

      Je rencontre un problème cependant :

      Warning: fopen(mes_email.txt): failed to open stream: No such file or directory in /home/sivop/www/version_3/admin/gestions/newsletter/index.php on line 89
      $fp = fopen ($myFile, "r");


      $myFile = isset( $_FILES['FileMail']['name'])?$_FILES['FileMail']['name']:NULL;
      
      if(!($myFile)){
      print("Impossible d'ouvrir le fichier $FileMail ");
      }else{ 
      $fp = fopen ($myFile, "r");
      
      if ($fp){
      	while (!feof($$fp)) {
      		$buffer = fgets($fp);
      		echo $buffer;
      
      $query = "INSERT INTO tb_newsletter_adresses VALUES('$Newsletter')"; 
      $result= MYSQL_QUERY($query);               
                 
      }
      fclose($fp);
      }
      }
      1. Modérateur
        Tu as fait l'upload du fichier sur ton serveur avant d'essayer de le lire ?

        testes ceci :
        <?php
        
        if(isset($_FILES['userfile']['name'])){
         // emplacement où sera stocké le fichier sur le serveur :
         // le dossier doit disposer des droits suffisant pour que le script puisse y coller un fichier 
         $uploaddir = './';
         $myFile= $uploaddir . basename($_FILES['userfile']['name']);
         // déplacement du fichier sur le serveur
         if (move_uploaded_file($_FILES['userfile']['tmp_name'], $myFile)) {
          // upload ok
          $fp = fopen ($myFile, "r");
           if ($fp){
              while (!feof($fp)) {
                $Newsletter = fgets($fp);
                echo $Newsletter;
                $query = "INSERT INTO tb_newsletter_adresses VALUES('$Newsletter')"; 
               $result= MYSQL_QUERY($query) or die("<pre>Erreur".$query ."</pre>");                       
             } // fin du While
             //fermeture du fichier
            fclose($fp);
          } // Fin du if($fp)
         } else {
          // upload KO
          echo "<pre> Erreur. Le fichier n'a pas été téléchargé ! </pre>";
         }
        }
        
        ?>
        
    2. Merci beaucoup jordane,

      J'ai récupéré un bout de ton code et ça fonctionne maintenant :

      <?php if(isset($_POST['EnvoisMail'])){
      //######################################
      $myFile = isset( $_FILES['FileMail']['tmp_name'])?$_FILES['FileMail']['tmp_name']:NULL;
      if(!($myFile)) {print("Impossible d'ouvrir le fichier ".$myFile);}        
      //################################################### ERREUR DE BOUCLE
      $fp = fopen($myFile, 'r') or die ("Unable to open the file");
      if($fp){
      while (!feof($fp)) {
      $Newsletter = fgets($fp);
      //###################################################
      $result = mysql_query("INSERT INTO tb_newsletter_adresses (Newsletter) VALUES ('".$Newsletter."')");
      //################################################### AFFICHE LES ELEMENTS AJOUTES
      }
      fclose($fp);
      }
      if ($result == 1)
      {echo "<tr><td height='40' align='left' valign='middle'><div class='Message_Info'>La liste des abonnés a été ajoutée avec succès.</div></td></tr>";}
      else
      {echo "<tr><td height='40' align='left' valign='middle'><div class='Error_Info'>Une erreur est survenue lors de l'ajout de ".$Newsletter."</div></td></tr>";}
      // FIN DE BOUCLE
      
      //###################################################
      }
      ?>

      Merci beaucoup !
      1. Modérateur
        Pas de soucis.

        Par contre...

        Si la question est résolue..
        Merci de ne pas oublier de clôturer le sujet
        (en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

        Cordialement,
        Jordane