2010-09-12 2 views
2

Я пытаюсь сделать простой вход с PHP и mysql, а также с помощью сеансов. У меня есть код, который должен работать теоретически, однако он перенаправляет меня на страницу входа в систему (обновляя ее) вместо того, чтобы вводить меня в профиль.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'; 
} 
+0

У вас есть какой-либо скрипт 'test' на странице профиля, который перенаправляет вас, если вы не вошли в систему? – d2burke

+0

делает, по крайней мере, говорит «Неправильное имя пользователя» при обновлении? –

+0

Да на оба вопроса. На каждой странице выполняется проверка session_registered, для которой требуется аутентификация. И он показывает неправильное имя пользователя, если я перехожу непосредственно к этому скрипту. –

ответ

1

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

<?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'; 
} 

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

+0

Возможно, вы хотели устранить '$ result2'? У вашей 'fetch' по-прежнему есть' $ results2', а не '$ results' – d2burke

+0

. исправлено –

+0

Хорошее сообщение, хотя, я задавался вопросом, почему запрос выполнялся дважды. Что вы видели в оригинале, которое не позволило бы ему работать правильно, кроме того, что вы добавили ошибку и дублировали запросы? – d2burke

0

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

0

Перед остальной частью кода вам необходимо начать сеанс sessions_start().

+0

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

1

Я бы использовал определенную пользователем функцию и проверил учетные данные для входа и вернул 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]); 
    } 
    } 

althoough код не является точным, но это может быть достаточно, чтобы ты. не

+0

и помните, если вы используете сеанс, вам нужно использовать session_start() на каждой странице. –

0

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

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

0

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

  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'; 
} 

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

<?php 
session_start(); 

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

if($_SESSION['uid'] != $_GET['conf']) 
    //trying to access someone else's page! 
+0

Это глупые проверки прав доступа, не так ли? вообще не должно быть использования GET. –

+0

Я согласен, но я хотел сохранить его как можно ближе к первоначально представленному коду. Невозможно учить все сразу! – notJim