Я делаю страницу входа для администраторов, чтобы сделать некоторые изменения на веб-сайте легко. Однако страница входа в систему работает неправильно. Он не попадет на страницу с ошибкой 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">