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 :

Envoyer les données d'un CSV dans une BDD Mysql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 11
    Points
    11
    Par défaut Envoyer les données d'un CSV dans une BDD Mysql
    Bonjour à toutes et à tous,

    Depuis plusieurs jours, je tente en vain de faire fonctionner un script pour mon forum. Ce script PHP me sert à créer des comptes utilisateurs à partir d’une liste de contacts en CSV que j’actualise tous les jours.

    Le principe :
    - J’upload mon fichier CSV
    - Je récupère la liste des contacts de mon fichier CSV et je la compare à celle qui est déjà dans ma base
    - Pour chaque nouveau contact dans mon CSV, je créé un compte dans ma table

    Je suis conscient que mon script est assez long. Alors pour vous motiver, j’offre un bon Bourgogne (c’est la foire aux vins !) à l’âme charitable qui volera à mon secours !

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    <?php 
     
    define('IN_PHPBB', 1); 
     
    // 
    // Let's set the root dir for phpBB 
    // 
    $phpbb_root_path = "./../"; 
    require($phpbb_root_path . 'extension.inc'); 
    include($phpbb_root_path . 'includes/functions_selects.'.$phpEx);     
    include($phpbb_root_path . 'common.'.$phpEx); 
    include($phpbb_root_path . 'includes/emailer.'.$phpEx); 
    define('IN_ADMIN', true); 
     
    // 
    // Start session management 
    // 
    $userdata = session_pagestart($user_ip, PAGE_INDEX); 
    init_userprefs($userdata); 
    // 
    // End session management 
    // 
     
    $debut = microtime(true); 
     
    if (empty($no_page_header)) 
    { 
        include('./page_header_admin.'.$phpEx); 
    } 
     
    $template->set_filenames(array( 
        'body' => 'admin/action_creer_utilisateurs.tpl') 
    ); 
     
    // 
    // Récupération de la liste 
    // 
    $email_liste = array(); 
    $email_bdd = array(); 
     
    if( isset($_POST['upload']) ) // si formulaire soumis 
    { 
        $content_dir = './'; // dossier où sera déplacé le fichier 
        $tmp_file = $_FILES['fichier']['tmp_name']; 
        if( !is_uploaded_file($tmp_file) ) 
        { 
            message_die(GENERAL_ERROR, "Le fichier est introuvable"); 
        } 
     
        // on vérifie maintenant l'extension 
        $extension = strrchr($_FILES['fichier']['name'], '.'); 
        //Ensuite on teste 
        if(trim($extension) != '.csv')  
        { 
            message_die(GENERAL_MESSAGE, 'no_csv'); 
        } 
        // on copie le fichier dans le dossier de destination 
        $name_file = $_FILES['fichier']['name']; 
     
        if( !move_uploaded_file($tmp_file, $content_dir . $name_file) ) 
        { 
            message_die(GENERAL_ERROR, "Impossible de copier le fichier dans $content_dir"); 
        } 
     
        $template->assign_vars(array( 
                'CREER_OFFRE_SUBMIT' => "ajouter",  
                'TITRE_PAGE' => $lang['maj_bdd'], 
                'PSEUDO' => $lang['pseudo'], 
                'EMAIL' => $lang['email'], 
                'MOT_DE_PASSE' => $lang['mot_de_passe'], 
                'SUPPRIMER' => $lang['Delete'], 
                'CREER_OFFRE' => $lang['Creer_offre'], 
                'EDITER' => $lang['Edit']) 
        ); 
     
        $row = 1; 
     
        $handle = fopen($name_file, "r");     
     
        if ($handle == 0) 
        {     
            message_die(GENERAL_MESSAGE, 'Fichier impossible à ouvrir'); 
        }     
        $nb_cree = 0; 
     
        while (($data = fgetcsv($handle, 1000, "\r")) !== FALSE)  
        { 
            $num = count($data); 
            $row++; 
     
     
            for ($c=0; $c < $num-1; $c++) // Pour chaque utilisateur 
            { 
                $email = ""; 
                for ($a = 0; $a <= 4; $a++) 
                {   
                    $chaine = strval($data[$c]); 
                    $Ligne = explode(";",$chaine); 
                    $donnée = $Ligne[$a]; 
     
                    if ($a == 0) 
                    { 
                        $nom = $donnée; 
                    } 
                    else if ($a == 1) 
                    { 
                        $email = trim($donnée); 
                        $email = strtolower($email); 
                    } 
                }             
                $email_liste[] = array($email, $nom);             
            } 
        } 
        fclose($handle); 
     
    } 
    else 
    { 
        message_die(GENERAL_MESSAGE, "Pas de forumulaire"); 
    } 
     
    // On récupère le nombre total d'inscrits avant la création 
    $nb_dans_bdd = 0; 
    $sql = "SELECT user_email 
            FROM phpbb_users 
            WHERE user_id <> -1"; 
     
    if( !($result = $db->sql_query($sql)) ) 
    { 
        message_die(GENERAL_ERROR, 'Impossible d\'obtenir la liste des inscrits', '', __LINE__, __FILE__, $sql); 
    } 
     
    while( $row = $db->sql_fetchrow($result) ) 
    { 
        $email_bdd[] = strtolower(trim($row['user_email'])); 
    } 
     
    $nb_cree = 0; 
     
    //--------------------------------------------------------------------// 
    // Vérification : est-ce que les mail dans la liste sont dans la bdd // 
    //-------------------------------------------------------------------// 
     
    for ($i = 0; $i <= count($email_liste)-1; $i++)  
    { 
        if ( !(in_array($email_liste[$i][0],$email_bdd))) 
        { 
            $nb_cree++; 
            $nom_text = '\'' . $nom . '\''; 
            $email_text = '\'' . $email_liste[$i][0] . '\''; 
            $date_inscription = time(); 
     
            // ajout de l'utilisateur à la base de donnée 
            $insert = "INSERT INTO phpbb_users(user_id, username, user_regdate, user_email)  
                        VALUES(" . $user_id . ", " . $nom_text . "," . $date_inscription .", " . $email_text . ")"; 
     
            if( !($result = $db->sql_query($insert)) ) 
            { 
                message_die(GENERAL_ERROR, 'Impossible d\'ajouter un membre', '', __LINE__, __FILE__, $insert); 
            } 
            $email_bdd[] = $email_liste[$i][0];         
        } 
    }     
     
    $template->assign_vars(array( 
            'PRESENTATION_PAGE' => $lang['presentation_traitement'], 
            'NOMBRE_DANS_BDD' => count($email_bdd), 
            'NOMBRE_LISTE' => count($email_liste), 
            'NOMBRE_CREE' => $nb_cree, 
            ) 
    );  
     
     
    $template->pparse("body"); 
     
    ?>
    Voici le contenu de ma liste de destinataires pour le test (j’ai aussi testé en ôtant les guillemets qui entoure chaque ligne) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "Dupont;Dupont@free.fr;" 
    "Robert;Robert@hotmail.fr;" 
    "Marie;Marie@laposte.net;"
    Dans mon formulaire de résultat :
    - j’obtiens le bon nombre dans la variable NOMBRE_DANS_BDD
    - mais j’ai 0 pour NOMBRE_LISTE alors que je devrais obtenir 3
    - bien sur aucun compte n’a été créé.


    Merci par avance de votre aide !!

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    181
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 181
    Points : 189
    Points
    189
    Par défaut
    bonjour,
    je peux peut être t'aider, je bouffe du csv depuis 2 mois mais par contre j'ai commencé à faire du php en même temps
    alors il va falloir que tu m'expliques ton nom de fichier $_FILES['fichier']['name'] vaut quoi ? pour tester ici
    comme tu dois t'en douter, je ne te promets rien
    mais je vais essayer
    ...

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 11
    Points
    11
    Par défaut
    Bonjour Sebdu,

    c'est sympa de me proposer ton aide mais ça y est, mon script fonctionne (grâce aux forumeurs).

    Bonne journée !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/10/2013, 11h43
  2. Réponses: 0
    Dernier message: 12/10/2012, 15h45
  3. envoyer les données d'un champ dans une fenetre
    Par pyranha dans le forum WinDev
    Réponses: 2
    Dernier message: 07/05/2008, 08h33
  4. Réponses: 6
    Dernier message: 27/09/2006, 20h27

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