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 :

Actualiser une table à l'aide d'un fichier CSV [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Par défaut Actualiser une table à l'aide d'un fichier CSV
    Bonjour à toutes et à tous

    je suis en train de concevoir un forum pour lequel je souhaite actualiser les comptes utilisateurs à l'aide d'une liste en CSV.

    Pour l'instant, j'ai réussi à faire un script qui ouvre mon fichier csv, en extrait les données et les envoie dans ma table des utilisateurs (voir le code ci-dessous)

    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
    $fichier = "liste.csv";
    if (file_exists($fichier))
         $fp = fopen("$fichier", "r"); 
    while (!feof($fp)) // on importe 
        { 
           $ligne = fgets($fp,4096); //On lit une ligne 
           $liste = explode( ";",$ligne);  
           $titre_text = $liste[0];
           $prenom_text = $liste[1];
           $nom_text = $liste[2];
           $email_text = $liste[3]; 
           //(...)
           $query = "INSERT INTO phpbb_users //(...)
           $result= MYSQL_QUERY($query);
         }
    Mais ce traitement est trop basique car ma table peut déjà contenir un compte pour une adresse email issue du CSV . Je voudrais donc créer un nouveau compte (nouvelle ligne dans ma base) seulement si l'email n'est pas déjà présent dans la base.Voyez-vous comment je pourrais m'y prendre ?

    Merci par avance !

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Par défaut
    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
    $fichier = "liste.csv";
    if (file_exists($fichier))
         $fp = fopen("$fichier", "r"); 
    while (!feof($fp)) // on importe 
        { 
           $ligne = fgets($fp,4096); //On lit une ligne 
           $liste = explode( ";",$ligne);  
           $titre_text = $liste[0];
           $prenom_text = $liste[1];
           $nom_text = $liste[2];
           $email_text = $liste[3]; 
           //(...)
           $requete="select * from phpbb_users where email='".$email_text."'";
           $exe=mysql_query($requete);
           if(mysql_num_rows($exe)==0){
           $query = "INSERT INTO phpbb_users //(...)
           $result= MYSQL_QUERY($query);
           }
         }

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Par défaut
    Bonjour et merci Raideman,

    j'ai essayé d'insérer ta portion de code dans mon script mais j'ai du faire erreur quelque part :

    j'ai testé d'insérer 3 comptes avec des adresses qui étaient déjà présentes dans la base et 2 nouveaux comptes ont été créés à tort.

    Si tu as le temps d'y jeter un coup, voici ma page :

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php  
     
     // Connexion bdd 
       @mysql_connect($dbhost,$dbuser,$dbpasswd) or die("Impossible de se connecter à la base de données"); 
       @mysql_select_db($dbname); 
     
     
     
      // On ouvre le fichier à importer 
     $fichier = "liste.csv";
     if (file_exists($fichier))
         $fp = fopen("$fichier", "r"); 
     else
         { 
    	   echo "Fichier introuvable !<br>Importation stoppée.";
           exit();
         }
     
    	while (!feof($fp)) // Et Hop on importe 
        {  
         $ligne = fgets($fp,4096); 
         $liste = explode( ";",$ligne);  
         $titre_text = $liste[0];
         $prenom_text = $liste[1];
         $nom_text = $liste[2];
         $email_text = $liste[3]; 
     
    	 $requete="select * from phpbb_users where user_email='".$email_text."'";
         $exe=mysql_query($requete);
         if(mysql_num_rows($exe)==0)
     
    		   {	   
     
    		    //On crée l'identifiant de l'utilisateur
    			$sql = "SELECT MAX(user_id) as total
    					FROM phpbb_users";
     
    			$reponse = mysql_query($sql);
    			$donnees = mysql_fetch_array($reponse);
    			$user_id = $donnees['total']+1;
    			$email_text = trim($email_text);
    			$email_text = strtolower($email_text);
     
    		   // Ajouter un nouvel enregistrement dans la table  
    		   $date_inscription = time();
    		   $query = "INSERT INTO phpbb_users (user_id, user_active, user_level, user_regdate, user_date_bdd, user_timezone, user_style, user_lang, user_dateformat, user_login_tries, user_last_login_try, user_email, user_charte, user_titre, user_nom, user_prenom, user_compteur_lecteur) VALUES(" . $user_id . ", 0, 2, '', " . time() . ", '" . $board_config['board_timezone'] . "', 1, 'french', '" . $board_config['default_dateformat'] . "', 0, 0, '$email_text', 0, '$titre_text', '$nom_text', '$prenom_text', 0)";
     
     
    		   $result= MYSQL_QUERY($query); 
    		   }
     
    	  }
     
    ?>

  4. #4
    Membre confirmé Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 36

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Par défaut
    Ca marche rarement de recopier un code qu'on a pas pondu.

    Essaye plutot de comprendre ce qu'il t'a mis et de l'appliquer à ton appli.
    Ici les lignes importantes sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $requete="select * from phpbb_users where email='".$email_text."'";
           $exe=mysql_query($requete);
           if(mysql_num_rows($exe)==0){
    En clair aprés avoir récupéré l'email du nouvel user il selectionne toutes les lignes qui ont cet email dans ta table puis compte combien il y en a.
    Donc si le résultat du comptage est 0 tu peux insérer, sinon tu peux renvoyer une erreur à l'utilisateur.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Par défaut
    En clair aprés avoir récupéré l'email du nouvel user il selectionne toutes les lignes qui ont cet email dans ta table puis compte combien il y en a.
    Donc si le résultat du comptage est 0 tu peux insérer, sinon tu peux renvoyer une erreur à l'utilisateur.
    J'ai bien compris le rôle de cette portion de code, mais je ne vois ce qui cloche dans l'appli...

  6. #6
    Membre émérite Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Par défaut
    A mon avis, la solution qui est de loin la plus fiable est de vérifier cette contrainte au niveau de la base de données, par exemple en mettant le champ email en 'UNIQUE'
    Ainsi, lorsque tu exécutera l'import, les doublons éventuels déclencheront une erreur SQL.
    Le top étant évidemment d'intercepter cette erreur dans le code php pour la traiter si besoin (exemple : l'inscrire dans un fichier de log, ou encore faire un update à la place du insert, ... bref ce que tu veux). en plus ça t'évitera d'avoir des gros messages d'erreur php moches sur ton interface utilisateur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Google Maps] Créer une carte à l'aide d'un fichier .csv
    Par Prodiguy dans le forum APIs Google
    Réponses: 4
    Dernier message: 02/05/2013, 14h50
  2. [WD10] Actualiser une table fichier sur requête
    Par Mick16 dans le forum WinDev
    Réponses: 3
    Dernier message: 29/11/2011, 09h47
  3. [HTML] Parcours d'une table HTML pour creer un fichier CSV : comment faire ?
    Par Thomus38 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 28/06/2007, 12h19
  4. extraction d'une table au format d'un fichier csv
    Par smutmutant2003 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 06/06/2007, 16h55
  5. Réponses: 2
    Dernier message: 21/03/2006, 15h22

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