PHP MYSQL вопрос - PullRequest
       16

PHP MYSQL вопрос

2 голосов
/ 12 сентября 2010

Я пытаюсь сделать простой вход в систему с PHP и MySQL, а также с помощью сессий. У меня есть код, который должен работать теоретически, однако он продолжает перенаправлять меня на страницу входа в систему (обновлять ее), а не переводить меня в профиль.

$username = $_POST['username'];

$query = "SELECT `confirmcode` FROM  `fb_network` WHERE `username` = '$username' AND `status`='Confirmed' ";

$result = mysql_query($query);

if (mysql_num_rows($result) == 1){     

$result2 = mysql_query($query);     

$row = mysql_fetch_row($result2);

    $_SESSION['conf_code'] = $row[0];

    $uid = $row[0];
 session_register($uid);


 header('location:profile.php?conf='.$row[0]);   

}       
else{
    echo 'Wrong username';
}

Ответы [ 6 ]

1 голос
/ 12 сентября 2010

нет, это не должно работать в теории
попробуйте это

<?php
$username = mysql_real_escape_string($_POST['username']);
$query = "SELECT `confirmcode` FROM  `fb_network` 
            WHERE `username` = '$username' AND `status`='Confirmed' ";
$result = mysql_query($query) or trigger_error(mysql_error().$query);
if ($row = mysql_fetch_row($result)){     
  session_start();
  $_SESSION['conf_code'] = $row[0];
  header('Location: profile.php');
  exit;
} else {
  echo 'Wrong username';
}

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

1 голос
/ 12 сентября 2010

Я бы использовал пользовательскую функцию и сделал бы ее, чтобы проверить учетные данные для входа и вернуть true или false из функции.

Вы можете использовать что-то вроде этого.

function check_login ($username, $password) {
             $query = "SELECT `confirmcode` FROM  `fb_network` WHERE `username` = '$username' AND `status`='Confirmed' ";
             $result = mysql_query($query);
             $row = mysql_fetch_array($result);
         if( mysql_num_rows($result) == 0) {
             return false;
             }
         if( mysql_num_rows($result) == 1) {
             $_SESSION['loggedin'] = "true";
             header('location:profile.php?conf='.$row[0]);
             return true;
             }
             } 

, затем легко вызвать функцию и отобразить соответствующее сообщение.

проверьте следующий код ..

<?php
    session_start();
    /** If the User is already Logged in then redirect to login.php **/
    if(isset($_SESSION['loggedin'])){
    header("Location: login.php");
    }
    else {
    if( check_login($_POST['username'], $_POST['password'])) {
    header('location:profile.php?conf='.$row[0]);
    }
    }

Хотя код не точный, но этого может быть достаточно, чтобы начать работу.

0 голосов
/ 12 сентября 2010

У вас есть две основные проблемы:

  1. Вы не используете session_start, чтобы сообщить PHP о начале отслеживания сеансов
  2. Вы используете session_register.session_register требует наличия register_globals, чего, как мы надеемся, нет в вашей среде.Он также ожидает, что его аргумент будет строкой, которая является именем переменной, которую вы хотите сохранить.Вместо этого вы должны использовать $_SESSION['uid'] = $row[0];

Вы также должны прочитать о внедрении SQL, очень серьезном и распространенном недостатке безопасности, который проявляется в вашем коде.

Вот исправленная версия вашего кода:

<?php
session_start(); //it's fine to just do this by habit at the top of every page

$username = $_POST['username'];

//I added mysql_real_escape_string - please read about "sql injection", as it is a very serious and common problem!
$query = "SELECT `confirmcode` FROM  `fb_network` WHERE `username` = '".mysql_real_escape_string($username)."' AND `status`='Confirmed' ";

$result = mysql_query($query);

if (mysql_num_rows($result) == 1) {

    $result2 = mysql_query($query);

    $row = mysql_fetch_row($result2);

    $_SESSION['conf_code'] = $row[0];

    //not sure if this is what you weree going for or not
    $_SESSION['uid'] = $row[0];

    header('location:profile.php?conf='.$row[0]);   

}       
else {
    echo 'Wrong username';
}

Затем в файле profile.php, чтобы проверить, вошел ли кто-то в систему:

<?php 
session_start();

if( ! isset($_SESSION['uid']))
    //Not logged in!

if( $_SESSION['uid'] != $_GET['conf'])
    //trying to access someone else's page!
0 голосов
/ 12 сентября 2010

Если у вас есть какой-либо «тестовый» сценарий на странице профиля, который перенаправляет вас, если вы не вошли в систему, возможно, что вышеприведенный код регистрирует вас, но неправильно передает переменную сеанса встраница профиля ... и впоследствии отправляет пользователя обратно, чтобы войти снова.

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

0 голосов
/ 12 сентября 2010

Вам нужно начать сеанс с помощью sessions_start() перед остальным кодом.

0 голосов
/ 12 сентября 2010

Я вижу, что у вашего кода есть только две опции - отображать «неправильный код» или перенаправлять на другую страницу.нет места, куда вы перенаправляете на страницу входа?

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