Отказано в доступе на Php - PullRequest
       29

Отказано в доступе на Php

0 голосов
/ 24 ноября 2011

I имеет форму покупателя, которая называется "Buyer.php":

<form method="post" action="check_buyer.php" id="LoggingInBuyer">
    <div style="width:265px;margin:0; padding:0; float:left;">
    <label>Username:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span><a href="#">Forgot Username?</span></a></label> <br />
    <input id="UserReg" style="width:250px;" type="text" name="userName" tabindex="1" class="required" /></div>
    <div style="width:265px;margin:0; padding:0; float:right;">
    <label>Password:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span><a href="#">Forgot Password?</span></a></label> <br />
    <input id="UserReg" style="width:250px;" type="password"  name="userPass" tabindex="2" class="required" /></div>
    <div class="clearB"> </div>
    <input type="submit" style="width:100px; margin:10px 200px;" id="UserRegSubmit" name="submit" value="Login" tabindex="3" />
</form>

Файл с именем check_buyer.php (в том же каталоге):

<?php
session_start(); #recall session from index.php where user logged include()

function isLoggedIn()
{
    if(isset($_SESSION['valid']) && $_SESSION['valid'])
        header( 'Location: buyer/' ); # return true if sessions are made and login creds are valid
    echo "Invalid Username and/or Password";  
    return false;
}

require_once('../inc/db/dbc.php');

$connect = mysql_connect($h, $u, $p) or die ("Can't Connect to Database.");
mysql_select_db($db);

$LoginUserName = $_POST['userName'];
$LoginPassword = mysql_real_escape_string($_POST['userPass']);
//connect to the database here
$LoginUserName = mysql_real_escape_string($LoginUserName);
$query = "SELECT uID, uUPass, dynamSalt, uUserType FROM User WHERE uUName = '$LoginUserName';";

function validateUser($ifUserExists['uID'], $ifUserExists['uUserType']) {
    $_SESSION['valid'] = 1;
    $_SESSION['uID'] = $uID;
    $_SESSION['uUserType'] = $uUserType; // 1 for buyer - 2 for merchant
}

$result = mysql_query($query);
if(mysql_num_rows($result) < 1) //no such USER exists
{
    echo "Invalid Username and/or Password";
}
$ifUserExists = mysql_fetch_array($result, MYSQL_ASSOC);

$dynamSalt = $ifUserExists['dynamSalt'];  #get value of dynamSalt in query above
$SaltyPass = hash('sha512',$dynamSalt.$LoginPassword); #recreate originally created dynamic, unique pass

if($SaltyPass != $ifUserExists['uUPass']) # incorrect PASS
{
    echo "Invalid Username and/or Password";
}else {
    validateUser();
}
// If User *has not* logged in yet, keep on /login
if(!isLoggedIn())
{
    header('Location: index.php');
    die();
}
?>

// Теперь выдается ошибка: Ошибка разбора: синтаксическая ошибка, неожиданный '[', ожидающий ')' в строке 23, которая равна function validateUser($ifUserExists['uID'], $ifUserExists['uUserType']) {

и файл "index.php" в каталоге покупателя /:

<?php
session_start();
if($_SESSION['uUserType']!=1)
{ 
    die("You may not view this page. Access denied.");
}

function isLoggedIn()
{
    return (isset($_SESSION['valid']) && $_SESSION['valid']);
}

//if the user has not logged in
if(!isLoggedIn())
{
    header('Location: index.php');
    die();
}
?>

<?php 
    if($_SESSION['valid'] == 1){
        #echo "<a href='../logout.php'>Logout</a>";
        require_once('buyer_profile.php');
    }else{
        echo "<a href='../index.php'>Login</a>";
    }
?>

Дело в том, что при вводе имени пользователя и пароля пользователь входит в систему и направляется на /buyer/index.php, в buyer часть этого сайта.Кажется, что каждый раз, когда я вхожу в систему с фиктивными учетными данными, которые я сделал для проверки, он просто выпадает: You may not view this page. Access denied.Но затем, если я вернусь назад, нажав стрелку назад в браузере, у меня будут logged in и showing a link to logout.

Я сделал несколько проблем со стрельбой: 1) Показано здесь, чтобы проверить мой sql query в порядкеэто действительно так.http://i.stack.imgur.com/n2b5z.png

2) Пробовал choing out echo 'the userid: ' . $userid;, прежде чем он ноет около You may not view.. и ничего не печатает.

Как мне получить это userID?Я дважды проверил имена полей в базе данных, и все в порядке ..

1 Ответ

0 голосов
/ 24 ноября 2011

После быстрой проверки кажется, что вы устанавливаете $_SESSION['uUserType'] = $userType в validateUser(), но, похоже, не передаете $userType самой функции этой функции. Так что $_SESSION['uUserType'] не будет 1, но $_SESSION['valid'] будет, потому что вы устанавливаете его в validateUser().

Я подозреваю, что вы должны передавать действительные данные в validateUser, чтобы установить их в сеансе.

, например

validateUser($ifUserExists['uID'], $ifUserExists['uUserType']);

function validateUser($uID, $uUserType) {
    $_SESSION['valid'] = 1;
    $_SESSION['uID'] = $uID;
    $_SESSION['uUserType'] = $uUserType; // 1 for buyer - 2 for merchant
}
...