仅使用 html 和 PHP 通过电子邮件验证将未知数量的电子邮件添加到数据库
Add unknown number of email to database with with email-validation using only html and PHP
做一个学校作业,我必须制作一个包含成员的 CRUD 应用程序。部分作业如下:
- 每个成员可以有很多(未知)数量的电子邮件地址
- 我必须使用 HTML 来验证它们是否都是电子邮件地址
- 除了 PHP 和 HTML(以及 SQL),我不会使用 JS 或任何其他语言
我试过的东西(老师说不对):
- 在输入字段上使用 'multiple' 属性(他不希望我使用 'multiple')
- 使用文本区域并在新行中分隔每封电子邮件(不能使用正则表达式)
我真的被困在这里.. 任何人都知道我如何以一种方式来处理这个问题,我可以上传未知数量的电子邮件地址(在创建成员时)并且仍然对每个地址进行验证?
解决方案 1
好吧,您确实可以使用 textarea
,将发布的值拆分为一个数组,trim 行,验证每行包含一个有效的 E-Mail 地址并执行任何操作你想要的邮件:
<form method="POST">
<p>
<label for="emails">
One E-Mail per line:
</label>
<textarea name="emails" id="emails" cols="80" rows="10">jdsjdhs@sdhjsdhj.de
jsddhs@ssdddhjsdhj.email
jsddhs@sdsddhj.tk
jdsjdsdhs@sdhjsdhj.org
jdsjdsdhs@sdhjsdhj.jetzt</textarea>
</p>
<p>
<input type="submit" value="Validate">
</p>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$emails = explode("\n", $_POST['emails']);
$emails = array_map('trim', $emails);
$emails = array_filter($emails, function ($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
});
$validEmailCount = count($emails);
echo <<<HTML
<p>
$validEmailCount valid E-Mails found.
</p>
HTML;
// Your database logic here
}
解决方案 2
根据以下评论线程,OP 正在寻找 HTML 仅电子邮件“验证”。
为此,input[type=email]
可能是最佳选择。
为了允许尽可能多的电子邮件,我写了下面的 PHP,每次提交表单时都会添加一个空白的电子邮件字段,要求另一个字段的复选框被标记为 上.
<?php
$emails = [''];
if (
$_SERVER['REQUEST_METHOD'] === 'POST' &&
isset($_POST['emails']) &&
is_array($_POST['emails'])
) {
$emails = $_POST['emails'];
if (
isset($_POST['add_mail']) &&
$_POST['add_mail'] === 'on'
) {
$emails[] = '';
} else {
print_r($emails);
die;
}
}
?>
<form method="POST">
<?php foreach ($emails as $email) : ?>
<p>
<input type="email" name="emails[]" value="<?= $email ?>">
</p>
<?php endforeach; ?>
<p>
<label for="add_mail">
Would like to enter one more E-Mail?
</label>
<input type="checkbox" name="add_mail" id="add_mail">
</p>
<p>
<input type="submit" value="Send">
</p>
</form>
解决方案 3
另一种解决方案是将单个 input[type=text]
与 [pattern]
属性结合使用,并为其编写一个允许多个电子邮件地址的正则表达式。
<input type="text" pattern="…" required>
电子邮件可以用 space、逗号或分号等分隔。
然后您可以执行类似 ,?
的操作来决定是否允许使用分隔符。
- 编写和测试您的正则表达式:https://regex101.com
- E-Mail 正则表达式示例:How can I validate an email address using a regular expression?
做一个学校作业,我必须制作一个包含成员的 CRUD 应用程序。部分作业如下:
- 每个成员可以有很多(未知)数量的电子邮件地址
- 我必须使用 HTML 来验证它们是否都是电子邮件地址
- 除了 PHP 和 HTML(以及 SQL),我不会使用 JS 或任何其他语言
我试过的东西(老师说不对):
- 在输入字段上使用 'multiple' 属性(他不希望我使用 'multiple')
- 使用文本区域并在新行中分隔每封电子邮件(不能使用正则表达式)
我真的被困在这里.. 任何人都知道我如何以一种方式来处理这个问题,我可以上传未知数量的电子邮件地址(在创建成员时)并且仍然对每个地址进行验证?
解决方案 1
好吧,您确实可以使用 textarea
,将发布的值拆分为一个数组,trim 行,验证每行包含一个有效的 E-Mail 地址并执行任何操作你想要的邮件:
<form method="POST">
<p>
<label for="emails">
One E-Mail per line:
</label>
<textarea name="emails" id="emails" cols="80" rows="10">jdsjdhs@sdhjsdhj.de
jsddhs@ssdddhjsdhj.email
jsddhs@sdsddhj.tk
jdsjdsdhs@sdhjsdhj.org
jdsjdsdhs@sdhjsdhj.jetzt</textarea>
</p>
<p>
<input type="submit" value="Validate">
</p>
</form>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$emails = explode("\n", $_POST['emails']);
$emails = array_map('trim', $emails);
$emails = array_filter($emails, function ($email) {
return filter_var($email, FILTER_VALIDATE_EMAIL);
});
$validEmailCount = count($emails);
echo <<<HTML
<p>
$validEmailCount valid E-Mails found.
</p>
HTML;
// Your database logic here
}
解决方案 2
根据以下评论线程,OP 正在寻找 HTML 仅电子邮件“验证”。
为此,input[type=email]
可能是最佳选择。
为了允许尽可能多的电子邮件,我写了下面的 PHP,每次提交表单时都会添加一个空白的电子邮件字段,要求另一个字段的复选框被标记为 上.
<?php
$emails = [''];
if (
$_SERVER['REQUEST_METHOD'] === 'POST' &&
isset($_POST['emails']) &&
is_array($_POST['emails'])
) {
$emails = $_POST['emails'];
if (
isset($_POST['add_mail']) &&
$_POST['add_mail'] === 'on'
) {
$emails[] = '';
} else {
print_r($emails);
die;
}
}
?>
<form method="POST">
<?php foreach ($emails as $email) : ?>
<p>
<input type="email" name="emails[]" value="<?= $email ?>">
</p>
<?php endforeach; ?>
<p>
<label for="add_mail">
Would like to enter one more E-Mail?
</label>
<input type="checkbox" name="add_mail" id="add_mail">
</p>
<p>
<input type="submit" value="Send">
</p>
</form>
解决方案 3
另一种解决方案是将单个 input[type=text]
与 [pattern]
属性结合使用,并为其编写一个允许多个电子邮件地址的正则表达式。
<input type="text" pattern="…" required>
电子邮件可以用 space、逗号或分号等分隔。
然后您可以执行类似 ,?
的操作来决定是否允许使用分隔符。
- 编写和测试您的正则表达式:https://regex101.com
- E-Mail 正则表达式示例:How can I validate an email address using a regular expression?