isset () не работает должным образом по форме

У меня есть форма регистрации, которую пользователь отправляет, данные отправляются с использованием isset ($ _ POST), чтобы узнать, есть ли что-либо, что было помещено в поля ввода формы. Если нет, он отправляется в другое, которое затем отправляет его функции, которая возвращает пользователя обратно в регистрационную форму, чтобы заполнить некоторые отсутствующие формы. По какой-то причине он работает неправильно.

Вот мой код проверки ——-

function returnBack(){ header("Location:register.php"); exit; } if(isset($_POST['myusername'])) { $myusername = $_POST['myusername']; } else { returnBack(); } if(isset($_POST['mypassword'])) { $mypassword=$_POST['mypassword']; } else{ returnBack(); } if(isset($_POST['myemail'])) { $myemail=$_POST['myemail']; } else{ returnBack(); } if(isset($_POST['myname'])) { $myname=$_POST['myname']; } else{ returnBack(); } if(isset($_POST['mylastname'])){ $mylastname=$_POST['mylastname']; } else{ returnBack(); } /////////////////////////////////////////////////////////////*******CONNECT TO SERVER ******************************************************************/ try { # MySQL with PDO_MYSQL $DBH = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); } catch(PDOException $e) { echo "I'm sorry, I'm afraid I can't do that."; file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); } ////////////////////////////////////////////////////////////***********INSERT REGISTER DATA INTO DB ***************************************************************/ //$encrypt_password = md5($mypassword); $insertdata = $DBH->prepare("INSERT INTO members (username, password, email, firstname, lastname ) VALUES ('$myusername','$mypassword','$myemail','$myname','$mylastname')"); $insertdata->execute(); echo "success"; $DBH = null; 

Вот раздел формы ——————————

 <table width="300" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"> <tr> <form name="register" method="post" action="insertnewmem.php"> <td> <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF"> <tr> <td colspan="3"><strong>Registration Form </strong></td> </tr> <tr> <td width="78">Username</td> <td width="6">:</td> <td width="294"><input name="myusername" type="text" id="myusername" ></td> </tr> <tr> <td>Password</td> <td>:</td> <td><input name="mypassword" type="text" id="mypassword"></td> </tr> <tr> <td>Email</td> <td>:</td> <td><input name="myemail" type="text" id="myemail"></td> </tr> <tr> <td>First Name</td> <td>:</td> <td><input name="myname" type="text" id="myname"></td> </tr> <tr> <td>Last Name</td> <td>:</td> <td><input name="mylastname" type="text" id="mylastname"></td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td><input type="submit" name="Submit" value="Register"></td> </tr> </table> </td> </form> </tr> </table> 

ОБНОВЛЕНО ———————————————-

Извините, что он пропускает функцию returnBack () и просто вставляет ее в db, даже если форма не заполнена должным образом.

Попробуйте !empty() вместо isset() . Это будет оцениваться как true, только если есть что-то другое, кроме null, false, 0 или пустая строка ''. Вероятно, у вас есть пустые строки.

Другие ответили, но позвольте мне объяснить, почему.

isset () проверяет, установлено ли значение, а не значение, но просто если оно имеет значение. Когда вы отправляете свою форму, вы передаете пустую строку в качестве значения для каждого из входов.

Обычно я проверяю это, используя:

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

Первая часть гарантирует, что переменная существует (так что второе условие не будет вызывать ошибку), а второе условие гарантирует, что строка не пуста.