Сценарий входа в систему не выполняется - Bluehost

У меня есть следующий сценарий входа в систему, который запускается, когда пользователь нажимает кнопку отправки в форме входа на сайте www.msheeksproductions.com. Я удалил информацию для входа в БД по соображениям безопасности.

    <?php
error_reporting(E_ALL);
        $user = '***************';
        $pass = '***************';
        $host = '***************';
        $data = '***************';
$userN=$_POST['userN'];
$passW=$_POST['passW'];

mysql_connect($host, $user, $pass)or die("Could not connect");
mysql_select_db($data)or die("Database Not Found");

$query="SELECT userID FROM sec_login WHERE Username='$userN' AND Password='passW'";
$result=mysql_query($query) or die(mysql_error());

$user=mysql_num_rows($result);
if($user==1) {
    session_register("userN");
    header("location: ../index.php");
}
else {
echo("You have entered invalid login information.");
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
</body>
</html>

Моя проблема в том, что если вы попадаете на страницу security.php, ничего не происходит. Сценарий PHP, похоже, вообще не выполняется. Я не уверен, есть ли у меня где-то синтаксическая ошибка или это проблема конфигурации с моей учетной записью хостинга. Сервер использует PHP 5.2. Кто-нибудь знает, есть ли известные проблемы с Bluehost для подобных вещей? Если есть ошибка кодирования, то, очевидно, я тоже хотел бы знать. Я новичок в этом, поэтому, возможно, я не все сделал правильно.

Кроме того, я пытаюсь снова вызвать переменную в файле index.php, который, похоже, не возвращает никаких данных.

<?php $usr=$_SESSION['username']; 
echo "User Name Is: $usr"; ?>

Заранее спасибо!


person Martin Sheeks    schedule 21.05.2012    source источник
comment
Окончание; работать на пхп? И вы можете использовать if (case) { } else { } вместо двоеточий   -  person abelito    schedule 21.05.2012
comment
Сначала включите отчеты об ошибках для проверки синтаксиса. Во-вторых, вы не сможете использовать header() там, где он у вас есть - переместите весь свой PHP в начало файла.   -  person freejosh    schedule 21.05.2012
comment
@abelito По словам валидатора Dreamweavers, код действителен. Однако мне больше нравится синтаксис {}, и, поскольку он также подтверждается, я буду использовать его. Спасибо. (Кстати, это не решило проблему, поэтому, пожалуйста, продолжайте отвечать!)   -  person Martin Sheeks    schedule 21.05.2012
comment
@freejosh, я переместил PHP перед деклератором DOCTYPE, как вы предложили, однако это не дало никакого эффекта. Я также добавил сообщения об ошибках, но ничего не было сгенерировано. Обновленный код был отредактирован в основной пост.   -  person Martin Sheeks    schedule 21.05.2012


Ответы (2)


Пожалуйста, обратите внимание на следующее:

  • Остерегайтесь внедрения SQL (остановлено mysql_real_escape_string);
  • Остерегайтесь фиксации/перехвата сеанса;
  • Остерегайтесь атак грубой силы;
  • Пожалуйста, проверьте http://php.net/pdo для лучшей обработки ошибок и параметров запроса....

    <?php
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $user = '***************';
        $pass = '***************';
        $host = '***************';
        $data = '***************';
    
        mysql_connect($host, $user, $pass) or die("Could not connect");
        mysql_select_db($data) or die("Database Not Found");
    
        $result=mysql_query("SELECT COUNT(1) FROM sec_login WHERE Username='".mysql_real_escape_string($_POST['username'])."' AND Password='".mysql_real_escape_string($_POST['password'])."'") or die(mysql_error());
    
        if(mysql_result($result) == 1) {
            $_SESSION['username'] = $_POST['username'];
            header("location: ../index.php");
            exit;
        } else {
            $message = 'You have failed to provide valid credentials.';
        }
    } else {
        $message = '<form method="post">
                        <input type="text" name="username" value="username" />
                        <br />
                        <input type="password" name="password" value="password" />
                        <br />
                        <input type="submit" />
                    </form>';
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Untitled Document</title>
        </head>
    
        <body>
            <?php echo $message; ?>
        </body>
    </html>
    
person ivodvb    schedule 21.05.2012
comment
Спасибо за информацию. Я знал, что мне нужно защититься от SQL-инъекций и тому подобного, но еще не изучил правильный процесс. Кроме того, это, похоже, работает, но когда я пытаюсь вывести переменную сеанса на странице index.php, она, похоже, не установлена. Или, во всяком случае, это ничего не повторяет. Доступны ли переменные сеанса во всех каталогах в данном URL-адресе? Может я не правильно называю. Я обновил основной пост, чтобы включить код для вызова переменной имени пользователя, которую я использую. Спасибо! - person Martin Sheeks; 22.05.2012
comment
Пожалуйста, добавьте session_start(); сразу после ini_set теперь вы сможете вывести имя пользователя.. - person ivodvb; 22.05.2012
comment
Это сделало это! Я действительно видел ваш комментарий после того, как устранил проблему, но спасибо за ответ! Нужны все страницы ‹? session_start() ?› в первой строке кода, чтобы он работал, но теперь все в порядке. - person Martin Sheeks; 23.05.2012

Хорошо, если кто-то наткнется на это и ему понадобится пример. Ниже приведен код, который я сейчас использую для функционирующего сценария входа в систему:

<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $user = '***********';
    $pass = '***********';
    $host = '***********';
    $data = '***********';

    mysql_connect($host, $user, $pass) or die("Could not connect");
    mysql_select_db($data) or die("Database Not Found");

    $result=mysql_query("SELECT userID FROM sec_login WHERE Username='".mysql_real_escape_string($_POST['userN'])."' AND Password='".mysql_real_escape_string($_POST['passW'])."'") or die(mysql_error());

    if(mysql_num_rows($result) == 1) {
        $_SESSION['login']=1;
        $_SESSION['username']=$_POST['userN'];
        $session= session_name() . '=' . session_id();
        header("location: ../index.php?".$session);
        exit();
    } else {
        $message = 'You have failed to provide valid credentials.';
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Untitled Document</title>
    </head>

    <body>
        <?php echo $message; ?>
    </body>
</html>

переменные соединения опущены, конечно. Чтобы другие страницы могли получить доступ к переменным сеанса, убедитесь, что каждая страница начинается с (буквально в первой строке кода, даже до объявления вашего типа документа)

Спасибо, что помогаете людям!

person Martin Sheeks    schedule 22.05.2012