如何在csv文件中验证电子邮件



我有一个csv文件,我通过将其存储在数组中来解析和显示它。我想知道在将邮件插入mysql之前,如何验证邮件或确保其格式正确?而且,如果邮件没有经过验证,它应该显示一个错误,并且不会将该行插入mysql。

我知道我可以使用filter_var($email, FILTER_VALIDATE_EMAIL) !== false;,但我不确定如何在代码中使用它,因为它在数组中(电子邮件的值(。感谢您的帮助。

我的代码:

<?php 
require "database.php";
$lines = file('users.csv', FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
$csv = array_map('str_getcsv', $lines);
$col_names = array_shift($csv);
$users = [];
try {
$stmt = $dbh->prepare("INSERT INTO users(name, surname, email) 
VALUES(:name, :surname, :email)");
foreach($csv as $row) {
$users[] = [
$col_names[0] => ucfirst(strtolower($row[0])),
$col_names[1] => ucfirst(strtolower($row[1])),
$col_names[2] => strtolower(strtolower($row[2])), //that's the mail
];
$stmt->bindValue(':name', $col_names[0], PDO::PARAM_STR);
$stmt->bindValue(':surname', $col_names[1], PDO::PARAM_STR);
$stmt->bindValue(':email', $col_names[2], PDO::PARAM_STR);
$stmt->execute();

}
}catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$dbh = null;
?>

您可以简单地在循环中检查它,比如下面的

foreach($csv as $row) {
if (filter_var(strtolower(strtolower($row[2])), FILTER_VALIDATE_EMAIL) === false) {
echo("".strtolower($row[2]))." is not a valid email address"); // You can break the loop and return from here
}
$users[] = [
$col_names[0] => ucfirst(strtolower($row[0])),
$col_names[1] => ucfirst(strtolower($row[1])),
$col_names[2] => strtolower(strtolower($row[2])), //that's the mail
];
$stmt->bindValue(':name', $col_names[0], PDO::PARAM_STR);
$stmt->bindValue(':surname', $col_names[1], PDO::PARAM_STR);
$stmt->bindValue(':email', $col_names[2], PDO::PARAM_STR);
$stmt->execute();

}

除此之外,我建议您为此创建一个批量插入。。永远不要在循环中执行插入查询

相关内容

  • 没有找到相关文章

最新更新