Я очень новичок в PHP. У меня есть очень простая форма, к которой я пытаюсь добавить очень простую проверку. Я не знаю, что я делаю неправильно, но как только я отправляю свою форму с каждым заполненным полем, она не переходит на другую страницу. Имя отображается как незаполненное поле.
<?php
error_reporting(0);
if($_POST['submit'])
{
$error=array();
$n=$_POST['name'];
$p=$_POST['password'];
if($n == '');
{
$error[0]= "Please fill a name";
}
if($p == '')
{
$error[1]= "Password is required";
}
}
?>
<html>
<form method="post" action="<?php if($_POST['submit']) { if(count($error)<1) { echo "hello.php"; } else { echo ''; } } ?>">
<div>
<span>Username:</span> <input type="text" name="name" id="user" /> <span style="color:red;"> <?php echo $error[0];?> </span>
</div>
<div>
<span>Password:</span><input type="password" name="password" id="pass" /><span style="color:red;"> <?php echo $error[1];?> </span>
</div>
<div>
<input type="submit" name="submit" value="submit" />
<input type="reset" name="reset" value="reset" />
</div>
</form>
</html>
Теперь даже когда я отправляю форму с каждым заполненным полем, я получаю имя поля не заполнено!
Это может быть что-то глупое, но я не могу понять это.
if($n == '');
Удалить ; из этой линии должно быть это
if($n == '')
Это то, что вы спрашиваете в своем комментарии.
// Вместо кодирования действия. в форме вы должны проверить сообщения об ошибках $, если они пусты. Вы можете направить пользователя на hello.php. Спасибо
<?php
error_reporting(0);
if($_POST['submit'])
{
$error=array();
$n=$_POST['name'];
$p=$_POST['password'];
if(empty($n))
{
$error[0]= "Please fill a name";
}
if(empty($p))
{
$error[1]= "Password is required";
}
if(empty($error))
{
header('Location:hello.php');
}
}
?>
<form method="post" action="">
<div>
<span>Username:</span> <input type="text" name="name" id="user" /> <span style="color:red;"> <?php echo $error[0];?> </span>
</div>
<div>
<span>Password:</span><input type="password" name="password" id="pass" /><span style="color:red;"> <?php echo $error[1];?> </span>
</div>
<div>
<input type="submit" name="submit" value="submit" />
<input type="reset" name="reset" value="reset" />
</div>
</form>
</html>
Вы можете использовать функцию php empty () как
if(empty($n)){
$error[0]= "Please fill a name";
}
В вашем php используйте следующее:
<?php
function errors($error) {
echo '<ul> class="error"';
foreach($error as $fail) {
echo '<li>'.$fail.'</li>';
}
echo '</ul>';
}
// Sanitize user input
function sanitize($value) {
// You need to pass your db connection to mysqli functions.
// You can do this by setting it as a paramater to the function or include a file with the connection in the function (not really recommended)
return mysqli_real_escape_string($connect, trim(strip_tags($value)));
}
//redirect a user
function to($url) {
if(headers_sent()) {
echo '<script>window.location("'.$url.'");</script>';
} else {
header('Location: '.$url);
exit();
}
}
// The code is only tiggered when the page is posted
if($_POST) {
$error = array(); // store all errors
$name = sanitize($_POST['name']);
$pass = sanitize($_POST['password']);
if(!empty($name) && !empty($pass)) {
// continue with more validation
} else {
$error[] = 'You didn\'t enter a username and or password';
}
if(!empty($error)) {
echo errors($error);
} else {
// if there are no errors (forexample log the user in)
to('hello.php');
}
}
?>
И как ваш HTML этого достаточно:
<style>
.error ul {
list-style-type: none;
margin: 0;
padding: 0;
}
.error ul li {
color: red;
}
</style>
<html>
<form action="" method="post">
<div>
<span>Username:</span> <input type="text" name="name" id="user">
</div>
<div>
<span>Password:</span> <input type="password" name="password" id="pass">
</div>
<div>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</div>
</form>
</html>