PHP-форма, не направляющая правильные страницы

Я делаю страницу входа для администраторов, чтобы сделать некоторые изменения на веб-сайте легко. Однако страница входа в систему работает неправильно. Он не попадет на страницу с ошибкой InvalidLogin.html и не перейдет на следующую страницу админ-сайта AdminChanges.php .

Вместо этого я получаю следующее сообщение:

Не найдено. Запрошенный URL / website / method = "post" не найден на этом сервере.

<?php if ($_POST['submit'] == "submit") { $userName = $_POST['username']; $passWord = $_POST['password']; $db= mysql_connect("localhost", "root", "root"); if(!$db) die("Error connecting to MySQL database."); mysql_select_db("onlineform", $db); $checkUserNameQuery = "SELECT username FROM onlineformdata ORDER BY id DESC LIMIT 1"; $checkUserName = mysql_query($checkUserNameQuery); $checkPassWordQuery = "SELECT password FROM onlineformdata ORDER BY id DESC LIMIT 1"; $checkPassWord = mysql_query($checkPassWordQuery); if (($userName == $checkUserName) && ($passWord == $checkPassWord)) { $AdminChanges = "AdminChanges.php"; } else { $AdminChanges = "InvalidLogin.html"; } } function PrepSQL($value) { // Stripslashes if(get_magic_quotes_gpc()) { $value = stripslashes($value); } // Quote $value = "'" . mysql_real_escape_string($value) . "'"; return($value); } ?> <html> <head> <title>Admin Login</title> </head> <body> <form action = <?php PrepSQL($AdminChanges); ?> method="post"> username: <input type="text" name="username" /> password: <input type="text" name="password" /> <br/> <input type="submit" name="submit" value="submit" /> </form> </body> </html> 

Две проблемы объединяют силы, чтобы вызвать эту ошибку. Во-первых, ваша функция PrepSQL не отвечает на ответ, и код не вызывает его. Вам нужно echo или print ответ так, чтобы он отображался в сгенерированном HTML.

 <?php echo PrepSQL($AdminChanges); ?> 

Во-вторых, вам нужно инкапсулировать это значение атрибута action в двойные кавычки, например:

 <form action = "<?php echo PrepSQL($AdminChanges); ?>" method="post"> 

Также обратите внимание, что ваш код предполагает, что ваши mysql_query() были успешными. Для устранения неполадок вы должны по крайней мере добавить оператор or die(mysql_error()) в конец mysql_query() . Это позволит вашему коду предоставить некоторую обратную связь, когда запрос завершится с ошибкой.

Кроме того, обратите внимание, что ваш метод обработки запросов никогда не приведет к действительным действиям входа.

 $checkUserName = mysql_query($checkUserNameQuery); $checkPassWord = mysql_query($checkPassWordQuery); if (($userName == $checkUserName) && ($passWord == $checkPassWord)) 

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

Заменить: PrepSQL ($ AdminChanges);

с: печать PrepSQL ($ AdminChanges);

Попробуй это:

 <form action = "<?php echo PrepSQL($AdminChanges); ?>" method="post"> 

Вам нужно повторить значение.

Я заметил 2 ошибки:

Ваш оператор $ _POST ['submit'] if не позволяет устанавливать $ AdminChanges для формы, если он уже не был отправлен.

Чтобы исправить это, вы можете изменить свой оператор if submit, чтобы просто перенаправить на свою неверную страницу входа, например:

 if (($userName == $checkUserName) && ($passWord == $checkPassWord)) { //Correct info do what you need to here } else { header("Location: InvalidLogin.html"); exit(); } 

А также:

Вам нужно изменить действие, чтобы опубликовать сообщение на этой странице.

 <form action="<? $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">