страница индекса не отображается после входа в систему - PullRequest
3 голосов
/ 03 ноября 2010

У меня есть страница процесса входа, я могу подключиться к БД, а также проверить имя пользователя и пароль.

но после этого я не могу показать страницу индекса после успешного входа в систему. Это мой код:

$dbc=mysql_connect(_SRV,_ACCID,_PWD) or die(_ERROR15.": ".mysql_error());
$db=mysql_select_db("qdbase",$dbc) or die(_ERROR17.": ".mysql_error());

    switch(postVar('action')) {
                    case 'submitlogin' :
                    submitlogin(postVar('loguser'),postVar('logpass'));
                    break;
    }
    function submitlogin($loguser,$logpass){
    if(isset($loguser, $logpass)) {
        ob_start();
        // To protect MySQL injection (more detail about MySQL injection)
        $myusername = stripslashes($loguser);
        $mypassword = stripslashes($logpass);
        $myusername = mysql_real_escape_string($myusername,$dbc);
        $mypassword = mysql_real_escape_string($mypassword, $dbc);
        $sql="SELECT * FROM admin WHERE user='$myusername' AND password=('$mypassword')";
        $result=mysql_query($sql, $dbc);
        // Mysql_num_row is counting table row
        $count=mysql_num_rows($result);
        // If result matched $myusername and $mypassword, table row must be 1 row
        if($count==1){
            // Register $myusername, $mypassword and redirect to file "admin.php"
            session_register("admin");
            session_register("password");
            $_SESSION['name']= $myusername;
            header("location:index1.php");
        }
        else {
            $msg = "Wrong Username or Password. Please retry";
            header("location:login.php?msg=$msg");
        }
  //      ob_end_flush();
    }
    else {
        header("location:login.php?msg=Please enter some username and password");
    }
    mysql_close($dbc);
    ob_end_flush();
    }

Можете ли вы помочь мне решить эту проблему?


EDIT

Я запутался в этой части из index1.php:

<?php
session_start(); //Start the session
define(ADMIN,$_SESSION['name']); //Get the user name from the previously registered super global variable
if(!session_is_registered("admin")){ //If session not registered
header("location:login.php"); // Redirect to login.php page
}
else //Continue to current page
header( 'Content-Type: text/html; charset=utf-8' );
?>

и эта часть из login.php, потому что я думаю, что они не синхронизированы:

if(mysql_num_rows($result) > 0)
        {
            session_register("admin");
            session_register("password");

            $_SESSION['name']= $myusername;

            header("location:index1.php");
        }

У меня просто есть имя пользователя и пароль, откуда взялся admin? из этого я получаю:

 PHP Notice:  Use of undefined constant ADMIN - assumed 'ADMIN' in /var/www/html/index1.php on line 12

Ответы [ 2 ]

2 голосов
/ 03 ноября 2010

Ты испортил свои настоящие побеги.

$myusername = mysql_real_escape_string($dbc, $myusername);
$mypassword = mysql_real_escape_string($dbc, $mypassword);

Должно быть

$myusername = mysql_real_escape_string($myusername, $dbc);
$mypassword = mysql_real_escape_string($mypassword, $dbc);

Вот блок документов:

string mysql_real_escape_string ( string $unescaped_string [, resource $link_identifier ] )

@ source: http://php.net/manual/en/function.mysql-real-escape-string.php

И

$result=mysql_query($dbc, $sql);

Должно быть

$result = mysql_query($sql, $dbc);

Обновление # 1

Не обещая, что это сработает, просто ушел, бросил ваш код и очистил его, удалил некоторые вещи и добавил некоторые вещи:

if(false === ($dbc = mysql_connect(_SRV,_ACCID,_PWD) die(_ERROR15.": ".mysql_error());
if(false === mysql_select_db("qdbase",$dbc)) die(_ERROR17.": ".mysql_error());


switch(postVar('action'))
{
    case 'submitlogin':
        submitlogin(postVar('loguser'),postVar('logpass'));
            mysql_close($dbc);
            exit; //Flushing the headers
    break;
}

function submitlogin($loguser,$logpass)
{
    if(isset($loguser, $logpass))
    {
        $myusername = mysql_real_escape_string(stripslashes($loguser));
        $mypassword = mysql_real_escape_string(stripslashes($logpass));

        $sql = sprintf("SELECT * FROM admin WHERE user='%s' AND password=('%s')",$myusername,$mypassword);

        if(false === ($result = mysql_query($sql))
        {
            //Show Database query error and die()
        }

        // If result matched $myusername and $mypassword, table row must be 1 row
        if(mysql_num_rows($result) > 0)
        {
            session_register("admin");
            session_register("password");

            $_SESSION['name']= $myusername;

            header("location:index1.php");
        }else
        {
            header("location:login.php?msg=" . urlencode("Wrong Username or Password. Please retry"));
        }
    }else{
        header("location:login.php?msg=" . urlencode("Please enter some username and password"));
    }
}
0 голосов
/ 03 ноября 2010

Вы проверяли, есть ли у вашей программы какой-либо вывод перед вызовом header ()?Если ваша программа отправила какой-либо вывод (даже один пробел), вызов заголовка не будет работать.

http://php.net/manual/en/function.header.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...