Я пытаюсь изменить простой сценарий входа. Когда я выполняю скрипт checklogin.php (при вызове формы входа), ничего не происходит. Я остаюсь на index.php, и я все еще вижу форму (которая должна быть удалена некоторым jquery). Если я открою firebug, я вижу следующее:
POST http://localhost/~Eamon/checklogin.php 200 OK 2ms jquery.js (line 8724) GET http://localhost/~Eamon/templates/login_success.php 302 Found 1ms jquery.js (line 8724) GET http://localhost/~Eamon/index.php 200 OK 1ms GET http://localhost/~Eamon/reqscripts/jquery.js?_=1371173056318 200 OK 1ms jquery.js (line 8724) GET http://localhost/~Eamon/js/application.js?_=1371173056319 200 OK 0
Ошибок нет, но мне интересно, правильны ли все эти запросы «GET». Должен ли кто-нибудь из них быть «POST»?
Вот мой код:
index.php
<!DOCTYPE html> <html> <head> <title>it IT</title> <script src="reqscripts/jquery.js"></script> <script src="js/application.js"></script> </head> <body> <form id="login" method="post" action="checklogin.php"> <h1>Member Login</h1> <p>Username:<input name="myusername" type="text" id="myusername"></p> <p>Password:<input name="mypassword" type="password" id="mypassword"></p> <input type="submit" name="Submit" value="Login"> </form> </body> </html>
checklogin.php
<?php session_start(); $host="localhost"; // Host name $username="root"; // Mysql username $password="bonjour3"; // Mysql password $db_name="itit"; // Database name $tbl_name="members"; // Table name // Connect to server and select databse. $mysqli = new mysqli("$host", "$username", "$password", "$db_name")or die("cannot connect"); // Define $myusername and $mypassword $myusername=$_POST['myusername']; $mypassword=$_POST['mypassword']; $sql = $mysqli->prepare("SELECT * FROM $tbl_name WHERE username=? and password=?"); $sql->bind_param('ss',$myusername,$mypassword); $sql->execute(); $sql->store_result();//apply to prepare statement $numRows = $sql->num_rows; if($numRows === 1){ $_SESSION['username'] = $myusername; } else { echo "Wrong Username or Password"; } session_destroy(); ?>
JS / application.js
$(document).ready(function() { $("#login").submit(function(e) { e.preventDefault(); $.post("checklogin.php", $(this).serialize(), function(){ $("#showuser").load("templates/login_success.php"); $("#login").remove(); }); }); });
шаблоны / login_success.php
<?php session_start(); if($_SESSION['username'] === null){ header("location: ../index.php"); } ?> <!DOCTYPE html> <html> <body> <h1>Login Successful</h1> <h2>Username: <? echo $_SESSION['username']?></h2> <a href = "logout.php">Log out</a> </body> </html>
ОБНОВИТЬ
Вот исходный код после попытки входа в систему. Я попытаюсь показать, почему я думаю, что $ _SESSION ['username'] никогда не устанавливается (но почему?)
<!DOCTYPE html> <html> <head> <body> <div id="showuser"> <title>it IT</title> <script src="reqscripts/jquery.js"> <script src="js/application.js"> <form id="login" action="checklogin.php" method="post"> <h1>Member Login</h1> <p> Username: <input id="myusername" type="text" name="myusername"> </p> <p> Password: <input id="mypassword" type="password" name="mypassword"> </p> <input type="submit" value="Login" name="Submit"> </form> <form id="register" action="checkreglogin.php" method="post"> <h1>Member Registration</h1> <p> Username: <input id="rmyusername" type="text" name="rmyusername"> </p> <p> Password: <input id="rmypassword" type="password" name="rmypassword"> </p> <p> Email: <input id="myemail" type="text" name="myemail"> </p> <input type="submit" value="Register" name="Submit"> </form> <div id="showuser"></div> </div> </body> </html>
Обратите внимание, как вся страница находится в разделе … но есть и пустой «showuser» div внизу. Это меня смущает. Я думаю, что когда checklogin.php вызывается формой – что-то пойдет не так, и пользователь никогда не будет сохранен в $ _SESSION ['username']. Поэтому … при вызове login_success.php – $ _SESSION ['username'] установлено значение null … и index.php (все это) загружается в запрос $ .post … потому что это то, что произойдет, когда $ _SESSION ['username'] имеет значение null в соответствии с login_success.php. По существу … login_success.php становится index.php где-то по пути. Просветите меня!