2013-06-13 4 views
2

Я пытаюсь создать основной скрипт регистрации. Если оставить все формы пустыми, я получаю сообщение о том, что я не использовал действительный адрес электронной почты, но я хотел бы, чтобы он сказал мне, что я не ввел никаких данных, и сделайте это, если какая-либо форма оставлена ​​пустой. Логика не кажется правильной, ее, вероятно, небольшая проблема, но я не могу ее найти.Базовая регистрационная форма, логика неправильная

homepage.php

<html> 
<head> 
</head> 
<body> 

<?php 

    require 'functions.php'; 

    registration_form(); 

?> 

</body> 
</html> 

functions.php

function registration_form() { 

echo '<form id="register" action="register.php" method="post">'; 
echo '<fieldset>'; 

echo '<legend>Register</legend>'; 

echo '<input type="hidden" name="submitted" id="submitted" value="1" /></br>'; 

echo '<label for="email">Email Address:</label></br>'; 
echo '<input type="text" name="email" id="email" maxlength="100" /> </br>'; 

echo '<label for="password">Password:</label></br>'; 
echo '<input type="password" name="password" id="password" maxlength="60" /></br>'; 

echo '<label for="confirmpassword">Confirm Password:</label></br>'; 
echo '<input type="password" name="confirmpassword" id="confirmpassword" maxlength="60" /></br>'; 

echo '<input type="submit" name="Submit" value="Submit">'; 

echo '</fieldset>'; 
echo '</form>'; 
} 

function validate_registration($password, $confirmpassword, $email) { 

    if ((!isset($email)) || (!isset($password)) || (!isset($confirmpassword))) { 


    registration_form(); 
    echo "Please enter the required information:"; 

    } 


    elseif ((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($password == $confirmpassword)) { 

     echo "You have registered with: $email"; 

    } 

    elseif ((filter_var($email, FILTER_VALIDATE_EMAIL)) && ($password !== $confirmpassword)) { 

     registration_form(); 

     echo "Your password does not match!"; 
    } 

    else { 

     registration_form(); 
     echo "You have not entered a valid email address!"; 
    } 
} 

register.php

require 'functions.php'; 

$email = $_POST['email']; 
$password = $_POST['password']; 
$confirmpassword = $_POST['confirmpassword']; 

validate_registration($password, $confirmpassword, $email); 
+0

Не связано с PHP, но если вы знаете Javascript, вы можете использовать JQuery, чтобы проверить, пусты ли поля формы, и только отправить, если форма завершена. – jh314

+0

Валидация на стороне клиента отлично подходит для сокращения поездок на сервер, но не слепо доверять чему-либо, поступающему от клиента. –

ответ

1

Вы, вероятно, хотите использовать

if (!empty([VARIABLE])) 

в вашей проверке проверки, так как эти значения параметров будут установлены как строки нулевой длины при POST. Таким образом, они не будут работать с !isset, потому что значения ARE установлены и ARE NOT null.

0

Я думаю, что вы можете использовать empty() функцию, а не isset()

if ((empty($email)) || (empty($password)) || (empty($confirmpassword))) { 

Это происходит потому, что также, если поле не заполнено при любых значениях, isset() по-прежнему устанавливаются как пустые, вы можете проверить, что если сбросить проводку массива var_dump($_POST);

+0

Вы имеете в виду 'if ((empty ($ email))', а не 'if ((! Empty ($ email))'. –

0

Заканчивать PHP docs:

Просто к сведению, потому что я не знаю точно, пока я не проверял.

Если у вас есть строка запроса, которая содержит параметр, но не значение (не даже знак равенства), например так: http://path/to/script.php?a

The following script is a good test to determine how a is valued: 
<pre> <?php print_r($_GET); if($_GET["a"] === "") echo "a is an 
empty string\n"; if($_GET["a"] === false) echo "a is false\n"; 
if($_GET["a"] === null) echo "a is null\n"; if(isset($_GET["a"])) 
echo "a is set\n"; if(!empty($_GET["a"])) echo "a is not empty"; ?> 
</pre> 

Я испытал это с script.php , и он вернулся:

а является пустой строкой устанавливается

Так, обратите внимание, что параметр без значения, связанного с, даже без знак равенства считается пустой строкой (""), isset() возвращает true для него, и считается пустым, но не false или null. Кажется очевидным после первого теста, но я просто должен был убедиться.

Конечно, если бы я не включить его в моем браузере запрос, сценарий возвращает Array() а нуль

0

Это форма представить, следовательно, каждая переменная установлена, но в вашем случае, с пустые значения. Попробуйте empty() вместо !isset().

0

Что относительно if(variable)?

В прошлом я использовал его, чтобы определить, присутствует ли переменная и имеет значение, которое вернет true. Если нет, он вернет false.

Я также проверил бы длины варов. В случае, если оба password и confirmpassword - пустые строки, поэтому оба они будут равны.

Смежные вопросы