Я довольно новичок в php-сцене, но поскольку я искал несколько часов о том, что может быть неправильно с этим кодом, я в недоумении. По какой-то причине FILTER_VALIDATE_EMAIL и уникальная проверка электронной почты в db не работают, их пропускают полностью. Я знаю это, потому что, когда форма отправлена, она выдает ошибку на последнем catch(PDOExceptions $ex)
(не показана, но после последнего блока кода ниже) вместо любой другой ошибки, установленной для показа прежде (показано здесь). Ошибок не возникает (или показывается) до тех пор, пока не будет предпринята попытка вставить данные формы в db. Поскольку индекс электронной почты уникален, он не позволяет дублировать вставку. Таким образом, запрос не запускается и die()
. Я пытаюсь опубликовать сообщение о том, что письмо недействительно или что оно уже используется в самой форме без die()
.FILTER_VALIDATE_EMAIL и уникальная проверка электронной почты в db не работает
Сначала я установил условия для подачи пустых входов и повторил обработку ошибок для всех других входов, как показано для «fname».
if (isset($_POST['submit'])) {
if(empty($_POST['fname']) ||
empty($_POST['lname']) ||
empty($_POST['email']) ||
empty($_POST['password']))
{
if(empty($_POST['fname']))
{
$fnamerr = "<font color=\"red\">Please enter your first name</font>";
}
Тогда я проверить пустой:
}
else if (!empty($_POST['fname']) &&
!empty($_POST['lname']) &&
!empty($_POST['email']) &&
!empty($_POST['password']))
{
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL))
{
$emailerr = "<font color=\"red\">Please enter a valid email address</font>";
}
$query = "
SELECT
1
FROM users
WHERE
email = :email
";
$query_params = array(
':email' => $_POST['email']
);
try
{
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
die ("Failed to run query: " . $ex->getMessage());
}
$row = $stmt->fetch();
if($row)
{
$emailerr = "<font color=\"red\">This email address is already registered</font>";
}
Что не так с этим кодом? Или может быть причиной того, что FILTER_VALIDATE_EMAIL и уникальная проверка электронной почты в db полностью пропущены? Спасибо заранее.
Я не вижу нигде, что вы пытаетесь остановить скрипт на основе '$ emailerr' или даже эха, возвращаемого пользователю. – Mike
Майк. Я вставляю '$ fnamerr' в html над вводом формы как' Php echo $ fnamerr;?> ', А остальные в свои собственные (т.е.' $ emailerr' в ' Php echo $ emailerr;?>') , – impromptu
Похоже, вам нужно изучить некоторые основные принципы отладки. Вставьте комбинации 'echo',' print_r' или 'var_dump' в ключевые места вашего скрипта, чтобы увидеть, действительно ли эта часть выполняется, а если нет, то почему. Возможно, заявление 'elseif', которое у вас здесь, терпит неудачу, но я не могу сказать. Попробуйте повторить некоторую случайную строку сразу после нее. Появляется ли оно на выходе? Если нет, попробуйте повторить различные переменные, используемые там, и работать с логикой вручную. Например, возможно, '$ _POST ['lname']' пуст. – Mike