Envoyer les données d'un CSV dans BDD Mysql

Résolu/Fermé
Caroo - 17 sept. 2007 à 07:43
 AT Internet - 17 sept. 2007 à 08:33
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 :frenchy: (c’est la foire aux vins !) à l’âme charitable qui volera à mon secours

<?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) :

"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 !!
A voir également:

1 réponse

Very good !
0