/** * 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; }
/** * checkType controleert de gegeven waarde tegen het gegeven type * * @access private * @param variant $p_vValue de waarde * @param int $p_nType Het te controleren type * @return int het resultaat van de controle (RESULT_OK, RESULT_INVALID) */ private function checkType($p_vValue, $p_nType) { $nResult = self::RESULT_INVALID; try { switch ($p_nType) { case self::TYPE_STRING: if (is_string($p_vValue)) { $nResult = self::RESULT_OK; } else { if (is_numeric($p_vValue)) { $nResult = self::RESULT_CONVERTABLE; } } break; case self::TYPE_BOOLEAN: if (is_bool($p_vValue)) { $nResult = self::RESULT_OK; } else { // convertable als het 1 of 0 bevat if (is_numeric($p_vValue) && (intVal($p_vValue) == 1 || intVal($p_vValue) == 0)) { $nResult = self::RESULT_CONVERTABLE; } } break; case self::TYPE_INT: if (is_int($p_vValue)) { $nResult = self::RESULT_OK; } else { // convertable als het een getal bevat if (is_numeric($p_vValue)) { $nResult = self::RESULT_CONVERTABLE; } } break; case self::TYPE_FLOAT: if (is_float($p_vValue)) { $nResult = self::RESULT_OK; } else { // convertable als het een getal bevat if (is_numeric($p_vValue)) { $nResult = self::RESULT_CONVERTABLE; } } break; case self::TYPE_ARRAY: if (is_array($p_vValue)) { $nResult = self::RESULT_OK; } break; case self::TYPE_URL: if (CheckLib::checkURL($p_vValue)) { $nResult = self::RESULT_OK; } break; case self::TYPE_EMAIL: if (CheckLib::checkEmail($p_vValue)) { $nResult = self::RESULT_OK; } break; case self::TYPE_ZIPCODE: if (CheckLib::checkDutchZipcode($p_vValue)) { $nResult = self::RESULT_OK; } break; case self::TYPE_PLAINTEXT: if (CheckLib::checkPlainText($p_vValue)) { $nResult = self::RESULT_OK; } break; case self::TYPE_ALPHATEXT: if (CheckLib::checkAlphaText($p_vValue)) { $nResult = self::RESULT_OK; } break; case self::TYPE_PHONE: if (CheckLib::checkPhoneNumber($p_vValue)) { $nResult = self::RESULT_OK; } break; default: // resultaat invalid } } catch (Exception $e) { // bij een fout wordt het resultaat invalid $nResult = self::RESULT_INVALID; } return $nResult; }
static function isRequiredPhone(&$DataProvider, $Key, $NoneKey = 'CheckLib_RequiredPhone_None', $TooLongKey = 'CheckLib_RequiredPhone_TooLong', $FormatKey = 'CheckLib_RequiredPhone_Format') { $ReturnValue = true; $Value = $DataProvider->get($Key); if (strlen($Value) > 0) { $ReturnValue = CheckLib::isOptionalPhone($DataProvider, $Key, $TooLongKey, $FormatKey); } else { $ReturnValue = false; $DataProvider->setError($Key, $NoneKey); } return $ReturnValue; }