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
|
<?php
// On se connecte à la base
mysql_connect("localhost", "root", "");
mysql_select_db("bdd_evenementsmajeurs_backbonerbci");
// ENREGISTREMENT DU FICHIER A IMPORTER ET VERIFICATIONS
//---------------------------------------------------------------------
// On enregistre le fichier sur le disque dans le dossier upload :
//---------------------------------------------------------------------
if (!(isset($_POST['annuler']) or isset($_POST['mettreAJour'])))
{
$dossier = 'upload/'; // Dossier où tous les fichiers importés seront stockés
$fichier = basename($_FILES['ticket']['name']); // On récupère le nom du fichier
$taille_maxi = 100000; // On limite la taille des fichiers à 100ko
$taille = filesize($_FILES['ticket']['tmp_name']); // On récupère la taille du fichier chargé
$extensions = array('.csv'); //Extension du fichier à importer
$extension = strrchr($_FILES['ticket']['name'], '.'); // On récupère l'extension du fichier chargé
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type csv ...';
}
if($taille>$taille_maxi) // Si le fichier chargé est trop gros
{
$erreur = 'Le fichier est trop gros...<br/> Vous êtes limité à 100ko';
}
//On formate le nom du fichier ici...
$fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $fichier); // On remplace le nom du fichier chargé
}
// FIN DES VERIFICATIONS
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
// On regarde si le fichier a déjà été téléchargé
if (!(file_exists($dossier . $fichier))) // S'il n'existe pas, c'est qu'on le charge pour la première fois
{
move_uploaded_file($_FILES['ticket']['tmp_name'], $dossier . $fichier);
//--------------------------------------------------------
// On ouvre le fichier pour effectuer les modifications :
//--------------------------------------------------------
$handle = @fopen($dossier.$fichier, "r+"); // on ouvre le fichier chargé
$csv_ok = @fopen('C:\\Program Files\\wamp\\www\\projet_tickets\\admin\\upload_ok\\ok_' . $fichier, "w+"); // on ouvre le fichier sui sera chargé dans la base, s'il n'existe pas il est créé
// Test d'ouverture des fichiers
if (!($handle))
{
echo 'impossible d\'ouvrir le fichier' . $fichier . '<br/>';
}
else
{
echo $fichier . ' ouvert<br/>';
}
if (!($csv_ok))
{
echo 'impossible d\'ouvrir le fichier ok_' . $fichier . '<br/>';
}
else
{
echo 'ok_' . $fichier . ' ouvert<br/>';
}
// On regarde si le fichier est accessible en écriture
if (is_writable('C:\\Program Files\\wamp\\www\\projet_tickets\\admin\\upload_ok\\ok_' . $fichier))
{
$date_fr = "/([a-z]{3} \d{1,2}\/\d{1,2}\/\d{4} \d{1,2}\:\d{2})/";
$impact_pt = "/(\d{1}\,\d{2})/";
$impact_pondere = "/(\d{1,10}\:\d{2}\:\d{2})/";
// On effectue toutes les modifications nécéssaires
while(!feof($handle))
{
$ligne_en_cours = fgets($handle);
if (!feof($handle))
{
// On supprime les fins de ligne sur les lignes non complètes
if (!preg_match("/(\r)$/",$ligne_en_cours)) // \r correspond au retour chariot
{
$ligne_en_cours = preg_replace("/(\r\n|\n|\r)/", "", $ligne_en_cours);
}
// On modifie les formats de date pour les exploiter dans MySQL
if(preg_match_all($date_fr, $ligne_en_cours, $datetrouvee, PREG_PATTERN_ORDER))
{
$date_a_modifier = $datetrouvee[0][0];
$date_a_mettre = datefr2en($datetrouvee[0][0]);
$ligne_en_cours = str_replace($date_a_modifier, $date_a_mettre, $ligne_en_cours);
}
if(preg_match_all($impact_pt, $ligne_en_cours, $impactTrouve, PREG_PATTERN_ORDER))
{
$impact_a_modifier = $impactTrouve[0][0];
$impact_a_mettre = modifImpact($impactTrouve[0][0]);
$ligne_en_cours = str_replace($impact_a_modifier, $impact_a_mettre, $ligne_en_cours);
}
if(preg_match_all($impact_pondere, $ligne_en_cours, $impactPondereTrouve, PREG_PATTERN_ORDER))
{
$impact_pondere_a_modifier = $impactPondereTrouve[0][1];
$impact_pondere_a_mettre = duree2sec($impactPondereTrouve[0][1]);
$ligne_en_cours = str_replace($impact_pondere_a_modifier, $impact_pondere_a_mettre, $ligne_en_cours);
}
$ligne_en_cours = str_replace("'", "_", $ligne_en_cours);
$ligne_en_cours = str_replace("; ", ";", $ligne_en_cours);
// On écrit que les bonnes lignes dans le fichier
if(preg_match("/^(\d{1,9})/",$ligne_en_cours))
{
if(strlen($ligne_en_cours))
{
fwrite($csv_ok,$ligne_en_cours);
}
}
else
{
fwrite($csv_ok,$ligne_en_cours);
}
}
}
echo 'Le chargement a été effectué</br>';
// On n'oublie pas de fermer les fichiers
fclose($handle);
fclose($csv_ok);
}
else
{
echo 'Impossible d\'écrire dans le fichier ok_' . $fichier . '</br>';
}
// On charge le fichier correct dans la base
mysql_query("LOAD DATA INFILE 'C:/Program Files/wamp/www/projet_tickets/admin/upload_ok/ok_" . $fichier . "' INTO TABLE `qpr` FIELDS TERMINATED BY ';' (`oceane`,`date_debut`,`duree`,`gravite`,`equipement`,`type_vendor`,`nb_clients_impactes`,`commentaires`,`cause`,`coeff_impact`,`impact_pondere`)") or die(mysql_error());
?> |
Partager