Функция isset () возвращает true, даже если элемент не задан

Вот мой код. По какой-то причине, если я отправлю форму без размещения и паролей, она все равно создает запись в базе данных. Есть несколько комментариев, разбросанных по всему коду, но код довольно прост. Есть идеи?

<?php //signup.php include 'connect.php'; include 'header.php'; echo '<h3>Sign up</h3>'; if($_SERVER['REQUEST_METHOD'] != 'POST') { /*The form hasn't been posted yet, display it note that the action="" will cause the form to post to the same page it is on */ echo '<form method="post" action=""> Username: <input type="text" name="user_name" /><br /> Password: <input type="password" name="user_pass" /><br /> Password again: <input type="password" name="user_pass_check" /><br /> E-mail: <input type="email" name="user_email" /><br /> <input type="submit" value="Add category" /> </form>'; } else { /* so, the form has been posted, we'll process the data in three steps: 1. Check the data 2. Let the user refill the wrong fields (if necessary) 3. Save the data */ $errors = array(); /* declare the array for later use */ if(isset($_POST['user_name'])) { //the user name exists if(!ctype_alnum($_POST['user_name'])) { $errors[] = 'The username can only contain letters and digits.'; } if(strlen($_POST['user_name']) > 30) { $errors[] = 'The username cannot be longer than 30 characters.'; } } else { $errors[] = 'The username field must not be empty.'; } if(isset($_POST['user_pass'])) { if($_POST['user_pass'] != $_POST['user_pass_check']) { $errors[] = 'The two passwords did not match.'; } } else { $errors[] = 'The password field cannot be empty.'; } if(!empty($errors)) { echo 'Uh-oh.. a couple of fields are not filled in correctly..'; echo '<ul>'; foreach($errors as $key => $value) { echo '<li>'.$value.'</li>'; } echo '</ul>'; } else { //the form has been posted without errors, so save it //notice the use of mysql_real_escape_string, keep everything safe. //also notice the sha1 function which hashes the password $sql = "INSERT INTO users(user_name, user_pass, user_email, user_date, user_level) VALUES('" . mysql_real_escape_string($_POST['user_name']) . "', '" . sha1($_POST['user_pass']) . "', '" . mysql_real_escape_string($_POST['user_email']) . "', NOW(), 0)"; $result = mysql_query($sql); if(!$result) { //something went wrong, display the error echo 'Something went wrong while registering. Please try again later.'; //echo mysql_error(); //debugging purposes, uncomment when needed } else { echo 'Successfully registered. You can now <a href="signin.php">sign in</a> and start posting!'; } } } include 'footer.php'; ?> 

Related of "Функция isset () возвращает true, даже если элемент не задан"

Нулевые и / или пустые строки все еще задаются, если объявлена ​​переменная. Попробуй это:

if(isset($_POST['user_pass']) && $_POST['user_pass'] != "")

isset проверяет, что переменная установлена ​​- в этом случае она установлена ​​в '' (пустая строка). Попробуйте использовать empty ().

простое решение: if(!empty($_POST['xxx']) == true) почти равно, когда вы используете:

 if(isset($_POST['xxx']) == true && $_POST['xxx'] != '') 

кроме: isset () считает, что 0 (строка или число) истинно, а empty () считает 0 истинным.