2016-06-27 6 views
-1
<!DOCTYPE HTML> 
<html> 
<head> 
<title>Sign-In</title> 
</head> 
<body> 
<form method="POST" action="home.php"> 
User: <br><input type="text" name="username" size="40"/><br /> 
Password: <br><input type="password" name="password" size="40"/><br /> 
<input type="submit" name="submit" value="Log-In" /> 
</form> 
</body> 
</html> 
<?php 
error_reporting(E_ALL); 

if (isset($_POST['submit'])) 
{ 
    mysql_connect('localhost', 'root', '') or die(mysql_error()); 
    mysql_select_db('cheapbooks'); 
    echo "connected to DB"; 
    $username = $_POST["username"]; 
    $password = $_POST["password"]; 

    $query = mysql_query("SELECT * FROM customer WHERE username='".$username."' AND password='".$password."' "); 
    $numrows = mysql_num_rows($query); 
    if($numrows!=0) 
    { 
     while($row = mysql_fetch_assoc($query)) 
     { 
      $dbuser = $row['username']; 
      $dbpass = $row['password']; 
     } 
     if($username == $dbuser && $password == $dbpass) 
     { 
      session_start(); 
      $_SESSION['sess_user']=$username; 
      echo "Logged in successfully"; 
      //header("Location: home.php"); //Redirecting to home page after login 
     } 
     else 
     { 
      echo "Invalid username or password!"; 
     } 
    } 
    else 
    { 
     echo "Failed........"; 
    } 
} 
else 
{ 
    echo "NO Action!!!"; 
} 
?> 

Я написал этот код для создания формы для входа. Когда я открываю форму в браузере, он отображает «No Action !!!!» который является утверждением в последнем. Я не могу определить ошибку, почему она не проверяет, является ли (isset ($ _ POST ['submit']))isset не проверяет подлинность

+6

При первой загрузке страницы перед отправкой формы '$ _POST' не определяется. Итак, 'isset ($ _ POST ['submit'])' false, и отображается ваше сообщение «Нет действий». – showdev

+1

Еще один очень типичный пример, который должен показать всем, чтобы наконец прекратить эту глупую привычку размещать форму и логику обработки в том же сценарии. Не надо! Это создает проблемы! – arkascha

+0

Проповедь на брате @arkascha! Проповедуйте! –

ответ

1

Вы должны отделить php-часть, как только форма загружает ее, проверяет isset ($ _ POST ['submit ']), когда форма еще не отправлена, поэтому вы не увидите никаких действий. Создайте файл login.php и поместить этот код

<!DOCTYPE HTML> 
<html> 
<head> 
<title>Sign-In</title> 
</head> 
<body> 
<form method="POST" action="home.php"> 
User: <br><input type="text" name="username" size="40"/><br /> 
Password: <br><input type="password" name="password" size="40"/><br /> 
<input type="submit" name="submit" value="Log-In" /> 
</form> 
</body> 
</html> 

Далее в той же папке создать еще один файл с именем home.php и поместить код PHP

<?php 
error_reporting(E_ALL); 

if (isset($_POST['submit'])) 
{ 
    mysql_connect('localhost', 'root', '') or die(mysql_error()); 
    mysql_select_db('cheapbooks'); 
    echo "connected to DB"; 
    $username = $_POST["username"]; 
    $password = $_POST["password"]; 

    $query = mysql_query("SELECT * FROM customer WHERE username='".$username."' AND password='".$password."' "); 
    $numrows = mysql_num_rows($query); 
    if($numrows!=0) 
    { 
     while($row = mysql_fetch_assoc($query)) 
     { 
      $dbuser = $row['username']; 
      $dbpass = $row['password']; 
     } 
     if($username == $dbuser && $password == $dbpass) 
     { 
      session_start(); 
      $_SESSION['sess_user']=$username; 
      echo "Logged in successfully"; 
      //header("Location: home.php"); //Redirecting to home page after login 
     } 
     else 
     { 
      echo "Invalid username or password!"; 
     } 
    } 
    else 
    { 
     echo "Failed........"; 
    } 
} 
else 
{ 
    echo "NO Action!!!"; 
} 
?> 

при открытии login.php вы будете получите форму, и когда вы опубликуете ее, она перенаправит файл home.php. Вы можете делать все, что захотите, в home.php. Также я предлагаю вам использовать либо mysqli, либо PDO, они более безопасны.

+0

Другой файл не' '' required''', он может быть с тем же файлом. укажите два варианта. – xdevnull

+0

@xdevnull Это может быть, но это нехорошо иметь. Лучше держать форму и обрабатывать отдельные –

0

isset($_POST['submit']) ясно говоря,

Это страница содержит $_POST (который содержит 'Submit' ключ) или нет?

Если да, то это показывает вашу логику, в противном случае - часть "NO Action!!!". Вы должны знать, он всегда будет проверять содержимое $_POST независимо от того, установлен он или нет. И за то, что вы смотрите, метод запроса страницы выдает. Так как вы говорите страницу, чтобы слушать $_POST метод для того, чтобы показать логику (а не то, что он/ключ, содержащий), вы выражение должно быть

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['submit'])) { 
    /*ok*/ 
}else{ 
    /*No action*/ 
} 

Это теперь говорит

Эта страница содержит $_POST (содержит ключ «отправить»), а метод запроса - сообщение или нет?

И, как и другие предполагает, отделяя файлы (я имею в виду на самом деле целей), всегда лучше.

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