Example #1
0
 /**
  * importCSV Importeert een lijst met personen naar de database
  * 
  * Deze methode maakt gebruik van PDO prepare om veelvuldig dezelfde query 
  * uit te voeren.
  * 
  * @access public
  * @param string $p_sBestand Naam van het importbestand
  * @return array aantal correct geimporteerde personen en aantal foute imports
  * @throws IllegalValueException
  */
 public static function importCSV($p_sBestand)
 {
     $aResult = array('correct' => 0, 'fout' => 0, 'dubbel' => 0, 'melding' => '');
     $nKolommen = 6;
     // aantal te importeren kolommen
     if (file_exists($p_sBestand)) {
         $aPersonen = @file($p_sBestand, FILE_IGNORE_NEW_LINES);
         if (is_array($aPersonen)) {
             try {
                 $oDB = new DB();
                 $sSql = 'SELECT Email FROM ledenlijst;';
                 $oResult = $oDB->query($sSql);
                 // bewaar alle emailadressen van bestaande leden
                 $aKlanten = $oResult->fetchAll(PDO::FETCH_COLUMN, 0);
             } catch (PDOException $e) {
                 $aKlanten = array();
             }
             $nTimeStart = microtime(true);
             $sVoorletters = '';
             $sVoornaam = '';
             $sTussenvoegsel = '';
             $sAchternaam = '';
             $sGeslacht = '';
             $sEmail = '';
             // bereid de query voor
             $sSql = "INSERT INTO ledenlijst (Voorletters, Voornaam, Tussenvoegsel, Achternaam, Geslacht, Adres, Postcode, Plaats, Email_prive, Username, Password) " . "VALUES (" . ":veld0" . ", :veld1" . ", :veld2" . ", :veld3" . ", :veld4" . ", ''" . ", ''" . ", ''" . ", :veld5" . ", ''" . ", ''" . ")";
             $oStatement = $oDB->prepare($sSql);
             // koppel de velden met PHP variabelen
             $oStatement->bindParam(':veld0', $sVoorletters);
             $oStatement->bindParam(':veld1', $sVoornaam);
             $oStatement->bindParam(':veld2', $sTussenvoegsel);
             $oStatement->bindParam(':veld3', $sAchternaam);
             $oStatement->bindParam(':veld4', $sGeslacht);
             $oStatement->bindParam(':veld5', $sEmail);
             foreach ($aPersonen as $sRegel) {
                 try {
                     // creeer de insert query met te vervangen velden
                     $aGegevens = split(',', $sRegel);
                     if (count($aGegevens == $nKolommen)) {
                         // strip de aamhalingstekens
                         for ($c = 0; $c < $nKolommen; $c++) {
                             $aGegevens[$c] = str_replace('"', '', $aGegevens[$c]);
                             // verwijder whitespaces
                             $aGegevens[$c] = trim($aGegevens[$c]);
                         }
                         // controleer de waarden op verkeerde data
                         if (!CheckLib::checkPlainText($aGegevens[0])) {
                             throw new InvalidTypeException('Incorrecte gegevens:' . $aGegevens[0]);
                         }
                         if (!CheckLib::checkPlainText($aGegevens[1])) {
                             throw new InvalidTypeException('Incorrecte gegevens:' . $aGegevens[1]);
                         }
                         if (!CheckLib::checkPlainText($aGegevens[2])) {
                             throw new InvalidTypeException('Incorrecte gegevens:' . $aGegevens[2]);
                         }
                         if (!CheckLib::checkPlainText($aGegevens[3])) {
                             throw new InvalidTypeException('Incorrecte gegevens:' . $aGegevens[3]);
                         }
                         if (!CheckLib::checkUserDefinedText("/[mv]{1}/", $aGegevens[4])) {
                             throw new IllegalTypeException('Incorrecte gegevens:' . $aGegevens[4]);
                         }
                         if (!CheckLib::checkEmail($aGegevens[5])) {
                             throw new InvalidTypeException('Incorrecte gegevens:' . $aGegevens[5]);
                         }
                         // controleer of lid nog niet bestaat adv het emailadres
                         if (!in_array($aGegevens[5], $aLeden)) {
                             // plaats de waarden in de juiste variabelen
                             $sVoorletters = $aGegevens[0];
                             $sVoornaam = $aGegevens[1];
                             $sTussenvoegsel = $aGegevens[2];
                             $sAchternaam = $aGegevens[3];
                             $sGeslacht = $aGegevens[4];
                             $sEmail = $aGegevens[5];
                             // voer de voorbereide query uit
                             $oStatement->execute();
                             $aResult['correct']++;
                         } else {
                             // Lid bestaat al
                             $aResult['dubbel']++;
                         }
                     }
                 } catch (IllegalTypeException $e) {
                     // hou een teller bij van foute invoer (voor later gebruik)
                     // negeer deze importregel
                     $aResult['fout']++;
                 }
             }
             $nTimeEnd = microtime(true);
             $aResult['time'] = round($nTimeEnd - $nTimeStart, 6);
             $oDB = null;
         } else {
             $aResult['melding'] = 'Importbestand niet correct gelezen';
         }
     } else {
         $aResult['melding'] = 'Importbestand niet gevonden';
     }
     return $aResult;
 }