Вопрос по php, session, mysql – Запрос входа в PHP и MySQL

0

Я изучаю MySQL и PHP, и в настоящее время у меня проблемы с этим процессом входа в систему.

Кажется, что запрос MySQL не возвращает никаких строк и не перенаправляет меня после успешного входа в систему.

PHP:

$error_msg = "";
//checks the session to see if the user is logged in
if (!isset($_SESSION['userid'])) {
    if (!isset($_POST['submit'])) {
        $dbc = mysqli_connect('localhost', 'root', '', 'login')
        or die('Error Connecting to Database on the SQL Server');
        //grabs data from POST
        $user_username = $_POST['username'];
        $user_password = $_POST['password'];
        //lookup username and password in the database
        if (!empty($user_username) && !empty($password)) {
            $query = "SELECT userid, username FROM tuser WHERE username = '$user_username' AND password = SHA('$user_password')";
            $res = mysqli_query($dbc, $query);
            //login is ok so set the user ID and username cookies, redirect to homepage
            if (mysqli_num_rows($res) == 1) {
                $row = mysqli_fetch_array($res);
                $_SESSION['userid'] = $row['userid'];
                $_SESSION['username'] = $row['username'];
                setcookie('userid', $row['userid'], time() + (60 * 60 * 24 * 30), "/");
                setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30), "/");
                setcookie('email', $row['email'], time() + (60 * 60 * 24 * 30), "/");
                setcookie('password', $row['password'], time() + (60 * 60 * 24 * 30), "/");
                //redirect after successful login
                header("Location: index.php");
            } else {
                //the username and password are incorrect so set error message
                $error_msg = 'Sorry, you must enter a valid username and password to log in. <a href="Signup.php">Please sign up!</a>';
            }
        }
    }
}

HTML:

<form action="login_process.php" method="post" class="login">
 Username: <input type="text" name="username"/>
 Password: <input type="password" name="password"/>
 <input type="submit" value="submit"/>
</form>

Извините за неаккуратный код, я знаком с PHP и MySQL и учу себя, как это сделать. Я сделал некоторые изменения, и код отправляет, но он не перенаправляет меня, он просто идет в login_process.php и ничего не делает. Что мне не хватает? Я ценю всю помощь, спасибо всем!

    <?
    session_start();

    $error_msg = "";

    //checks the session to see if the user is logged in

if (!isset($_SESSION['user_id'])) 
{
    if (isset($_POST['submit'])) 
    {

        $user_username = mysql_real_escape_string($_POST['username']);
        $user_password = mysql_real_escape_string($_POST['password']);

        $dbc = mysqli_connect('localhost', 'root', '', 'login')
        or die('Error Connecting to Database on the SQL Server');
        //grabs data from POST

            //lookup username and password in the database
            if (!empty($user_username) && !empty($password)) 
            {

                $query = "SELECT userid, username FROM tuser WHERE username = '$user_username' AND password = SHA('$user_password')";

                $res = mysqli_query($dbc, $query);

                //login is ok so set the user ID and username cookies, redirect to homepage
                if (mysqli_num_rows($res) == 1) 
                {
                    $row = mysqli_fetch_array($res);

                    $_SESSION['user_id'] = $row['userid'];
                    $_SESSION['user'] = $row['username'];
                    setcookie('userid', $row['userid'], time() + (60 * 60 * 24 * 30), "/");
                    setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30), "/");
                    setcookie('email', $row['email'], time() + (60 * 60 * 24 * 30), "/");
                    setcookie('password', $row['password'], time() + (60 * 60 * 24 * 30), "/");

                    //redirect after successful login
                    header("Location: home.php");
                    echo mysqli_error($dbc);

                } 
                else 
                {
                    //the username and password are incorrect so set error message
                    $error_msg = 'Sorry, you must enter a valid username and password to log in. <a href="Signup.php">Please sign up!</a>';

                    header("Location: home.php");
                    echo mysqli_error($dbc);

                }
            }
            else
            {
                $error_msg = 'Please enter a username and password to log in. <a href="Signup.php">Please sign up!</a>';

                header("Location: home.php");
                echo mysqli_error($dbc);

            }

    }
}

    ?>
О, я согласен, отступ в вашем коде, чтобы он был читабельным, полностью переоценен. DaveRandom
@ Ронни Ты имеешь в виду, ты думаешь, что он должен на самом делеexecute some code? Радикальная идея, я не уверен, что это зацепит ... DaveRandom
Ваша заявка должна бытьif (isset($_POST['submit']))... начать там Ronnie
Начните комментировать SQL-инъекцию ... сейчас ...! craig1231
Попробуйте повторить имя пользователя и пароль, прежде чем инициализировать соединение с базой данных. чтобы определить, действительно ли вы ввели код в свой оператор if. так как у меня возникли некоторые мысли о вашем $ _POST ['submit' ']. Кажется, неправильно. magicianiam

Ваш Ответ

4   ответа
0

Ваше логическое значение находится в обратном направлении на линии (то есть снимите метку!)

if (!isset($_POST['submit'])) {

Вторая проблема заключается в том, что на вашей кнопке ввода отсутствует имя = & quot; submit & quot; атрибут, поэтому он никогда не передается, поэтому переменная никогда не будет присутствовать независимо от первой проблемы.

0

<?
//Start session
session_start();

$_SESSION['message'] = "";

//Include database connection details
require_once('global.php');


//Connect to mysql server
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
    die('Failed to connect to server: ' . mysql_error());
}

//Select database
$db = mysql_select_db(DB_DATABASE);
if(!$db) {
    die("Unable to select database");
}

if(!empty($login) && !empty($password)) {

    $login = mysql_real_escape_string($_POST['login']);
    $password = mysql_real_escape_string($_POST['password']);

    $query = "SELECT * FROM tuser WHERE username = '$login' AND password = SHA('$password')";
    $data = mysql_query($query);

    if($data) {
        if (mysql_num_rows($data) == 1 ) {
            $row = mysql_fetch_assoc($data);
            $_SESSION['userid'] = $row['userid'];
            $_SESSION['username'] = $row['username'];
            $_SESSION['message'] = "Welcome,&nbsp;" . $_SESSION['username'];
            header('Location: member.php');
            exit();
        }
        else {
            $_SESSION['message'] = "Please enter a valid username or password";
            header('Location: error.php');
            exit();
        }

    }
    else {
        die("Query failed");
    }

}
else {
    $_SESSION['message'] = "Please enter a username or password";
    header('Location: error.php');
    exit();
}


?>
1

session_start() прежде чем вы сможете получить доступ$_SESSION

Ваш код только запрашивает, если пост не установлен, поэтому измените его:

if (isset($_POST['submit'])) {

  //your code

}

Кроме того, не забудьте ввести пользовательский ввод для предотвращения внедрения SQL:

$user_username = mysql_real_escape_string($_POST['username']);

Убедитесь, что это не ошибка в вашем SQL:

echo mysqli_error($dbc);
1

if (!isset($_POST['submit'])) {

Это должно быть изменено на

if (isset($_POST['submit'])) {

isset () вернет TRUE, если эта переменная установлена. ! isset () вернет TRUE, если этоnot задавать

Похожие вопросы