IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Upload de CSV


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Upload de CSV
    Bonjour Bonjour, étant un amateur de chez amateur en PHP je voulais créer une vue où il est possible à partir de l'upload d'un fichier csv sur le site,
    de mettre ce que contient ce dernier dans ma base de donnée. J'ai peut être mal expliqué mais j’espère que vous captez quand meme mes pensées.

    Donc niveau html, la vue donne ceci :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <h2><u>Par CSV</u></h2>
    	<br/>
     
    	<form enctype="multipart/form-data" action="index.php?action=teacher" method="post">
    	<input type="file" size="100" name="addcsv">
    	<input type="submit" name="submitcsv" value="Envoyer"  />
    	</form>

    Et au niveau du controller j'ai ceci comme code fait un peu à l'arrache:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    $year = date('Y');
    			$notification_csv='';
     
    			if ($_FILES['addcsv']['error'] > 0) $erreur = "Erreur lors du transfert";
     
     
    				$extensions_valides = array( 'csv');
     
    				$extension_upload = strtolower(  substr(  strrchr($_FILES['icone']['name'], '.')  ,1)  );
    				if ( in_array($extension_upload,$extensions_valides) ) echo "Extension correcte, fichier non valide";
     
    			if(isset($_POST['submitcsv'])){
    				if(is_uploaded_file($_FILES['addcsv']['tmp_name'])){
    					echo "Le fichier a bien été upload";
    					echo " Contenu :" ;
    					readfile($_FILES['addcsv']['tmp_name']);
    				}
     
    				$handle= fopen($_FILES['addcsv']['tmp_name'],"r");
    				while(($line= fgetcsv($handle,1000,";"))!== FALSE){
    					$import='INSERT INTO students (`registration_nb`,`name`, `first_name`, `email`, `password`, `year`) VALUES ("'. $line[0] . '",, "'. $line[1] .'", "'. $line[2] .'", "'. $line[3] .'", "'. $line[4] .'", "'. $year.'")';
    					mysql_query($import) or die(mysql_error());
    				}
    				fclose($handle);
    				$notification_csv='Ajout fait';
    			}
    En testant, aucun message d'erreur n'apparait mais cependant je ne trouve pas les données du fichier csv dans ma base de donnée.

    Merci et bonne soirée

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    Grosse qualité ISO 1664

    là comme ça :

    - Faudrait voir le contenu de $_FILES et $_POST avec print_r()
    - Voir à quel endroit le script coince avec des echo par exemple
    - utiliser les balises [ code ] pour mettre du code sur le forum
    - fgetcsv() pour ce genre de traitement sur un csv c'est pas mal
    - ne plus utiliser mysql_query()
    - enlever la double virgule de la requête
    - mettre un echo $sql au lieu du mysql_query. ca permet de voir si la requete à l'air correcte avant de mettre n'importe quoi en base
    - se renseigner sur les injections sql
    - gérer les cas où il y a une apostrophe dans le csv, ou s'il manque des champs (ce qui arrive très souvent dans ce genre de cas)
    - corriger le message d'erreur qui ne veut rien dire
    - se forcer à ne plus stocker les mots de passe en clair, même si c'est pratique

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse, j'ai complètement repenser à mon code mais j'ai toujours le même problème, il n'y a aucun message d'erreur mais je ne trouve pas les données du csv dans ma base de données.

    Niveau html j'ai garder la même chose, c'est le code php que j'ai changé
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    #CSV
     
    			$notification_csv='';
    			$erreur='';
     
     
     
    			if(isset($_POST['submitcsv'])){
    				$content_dir='models/';
    				$tmp_file=$_FILES['addcsv']['tmp_name'];
     
    				if(!is_uploaded_file($tmp_file)){
    					$notification_csv='Erreur le fichier est introuvable';
    				}
     
    				#Right extension
    				$type_of_file=$_FILES['addcsv']['type'];
     
    					if(!strstr($type_of_file,'csv'))
    						$notification_csv='L\'extension du fichier n\'est pas correcte';
     
     
    				#Copy the file
    				$name_file = $_FILES['addcsv']['name'];
    				if( !move_uploaded_file($tmp_file, $content_dir . $name_file) ){
    					$notification_csv='Impossible de copier le fichier dans $content_dir';
    				}
    				$path = $content_dir.$name_file;
    				Db::getInstance()->addCSV($path);
     
    				$notification_csv='Le fichier a bien été upload';
    			}
     
     
     
    			require_once(CHEMIN_VUES . 'addStudent.php');
     
    		}

    Ma méthode addCSV:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     public function addCSV($csv){
            $year = date('Y');
     
                $path_of_csv = $csv;
                $file=fopen($path_of_csv,'r');
                fgetcsv($file,1000,';');
                $array = array();
                while($line=fgetcsv($file,1000,';')) {
                    $query = 'INSERT INTO students (`registration_nb`,`name`, `first_name`, `email`, `year`) VALUES ("'. $line[0] . '", "'. $line[1] .'", "'. $line[2] .'", "'. $line[3] .'","'. $year.'")';
                    $this->_db->prepare($query)->execute();
                }
     
            return $array;
     
        }

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Déjà un grand mieux d'utiliser pdo (l'extension mysql est supprimée en php 7).

    Pour le reste j'y vois pas trop clair. Tu parles de contrôleur, de vues, tu utilises un CMS ? si oui il faudrait poser ta question dans la rubrique concernant le CMS en question.

    Sinon sur le principe du débugage : fais des tests pour voir si ton contrôleur intercepte bien ton formulaire, mets des echo ou var_dump() à différents endroits de ton code pour voir ce qui se passe, tu peux combiner avec des exit pour sortir à des étapes tests, et surtout prends soin de faire afficher les erreurs php et pdo.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    @ABCIWEB

    Oke merci je vais essayer les var_dump, je fais mon projet selon l'architecture MVC

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour info, si tu utilises des requêtes préparées, tu peux la préparer une seule fois et l'exécuter plusieurs fois avec des paramètres différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query = 'INSERT INTO students (`registration_nb`,`name`, `first_name`, `email`, `year`) VALUES (:nb, :name, :first_name, :email, :year)';
    $stmt = $this->_db->prepare($query)
    while($line=fgetcsv($file,1000,';')) {
    	$stmt->execute(array(':nb' => $line[0], ':name' => $line[1], ':first_name' => $line[2], ':email' => $line[3], ':year' => $year));
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. [Web Service] Upload fichier csv vers serveur PHP SOAP
    Par Jarod51 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 06/02/2016, 17h27
  2. [PrestaShop] Upload fichier CSV
    Par Merevinh dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 12/03/2013, 12h25
  3. Upload fichier CSV
    Par Nheil dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2011, 11h50
  4. [phpMyAdmin] Impossible d'uploader un CSV
    Par SebastienM dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 05/02/2008, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo