我该如何防止这种情况?我真的需要帮助

时间:2017-02-12 08:58:54

标签: javascript php jquery mysql

请有人帮助我吗?   我想知道如何阻止用户使用voting_status ='b'或访问者来访问具有voting_status ='a'的用户可以访问的位置。

这是登录页面,我使用voting_status ='a'和用户使用voting_status ='b'重定向用户。 当你进入你的浏览器并键入页面用户时,vote_status ='a'只允许访问,即使没有登录也会显示。我的问题是如何防止这种情况?请你的回答对我有很大的帮助。

var xval = '';
if (currentQuestionIndex == 2) {
  xval = currentScore;
}

这是我只希望用户使用voting_status ='a'来访问:

<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'university portal');
define('DB_USER','root');
define('DB_PASSWORD','password007');

$con=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysql_error());
$db=mysql_select_db(DB_NAME,$con) or die("Failed to connect to MySQL: " . mysql_error());
/*
$ID = $_POST['user'];
$Password = $_POST['pass'];
*/
function SignIn()
{
session_start();   //starting the session for user profile page
if(!empty($_POST['UserName']))   //checking the 'user' name which is from Sign-In.html, is it empty or have some text
{
    $query = mysql_query("SELECT Username, Password, voting_status FROM voters where Username = '$_POST[UserName]' AND Password = '$_POST[password]'") or die(mysql_error());
    $row = mysql_fetch_array($query) or die(mysql_error());
    if(!empty($row['Username']) AND !empty($row['Password']) AND $row['voting_status']=='a')
    {

        $_SESSION['Username'] = $row['Password'];
        header("location:Result.php");

    }
    elseif(!empty($row['Username']) AND !empty($row['Password']) AND $row['voting_status']=='b')
    {
        $_SESSION['Username'] = $row['Password'];
        header("location:Voted User.php");
    }
}
}
if(isset($_POST['submit']))
{
    SignIn();
}
          ?>

3 个答案:

答案 0 :(得分:0)

您正在使用empty()函数来检查是否输入了值,但我的想法是,用数据库表上的存储值重新验证所有输入值会很好。

注意:第一次执行脚本时会设置用户名和密码的会话。 O,后续脚本运行会看到会话并从那里继续。

答案 1 :(得分:0)

问题是您没有建立一个会话变量来标识具有a OR b的用户。同样,您没有为页面a或b指定方法来确定哪个用户正在查看页面。您需要让两个页面都检查哪个用户已登录并确定他们执行时会发生什么。

当用户登录时,您需要像这样设置会话。

$_SESSION['session_voting_status'] = $row['voting_status'];

然后使用页面a,你应该有这样的东西

<?
session_start();
if ($_SESSION['session_voting_status'] == 'a') {
?>
All your html goes here for user a
<?
} else {
// redirect user to another page
window.location.replace("http://www.example.com/user/a");
}
?>

然后使用页面b,你应该有这样的东西

<?
session_start();
if ($_SESSION['session_voting_status'] == 'b') {
?>
All your html goes here for user a
<?
} else {
// redirect user to another page
window.location.replace("http://www.example.com/user/b");
}
?>

答案 2 :(得分:-1)

我在页面顶部看看你的php,看来会话只会在你提交表单时运行。您需要确保会话始终处于启用状态,以便在用户登录后重定向工作,然后移动到不同页面而无需再次登录。

我将功能改为以下几行:

function SignIn()
{
    if(!empty($_POST['UserName']))   //checking the 'user' name which is from Sign-In.html, is it empty or have some text
    {
        $query = mysql_query("SELECT Username, Password, voting_status FROM voters where Username = '$_POST[UserName]' AND Password = '$_POST[password]'") or die(mysql_error());
        $row = mysql_fetch_array($query) or die(mysql_error());
        if(!empty($row['Username']) AND !empty($row['Password']))
        {
            $_SESSION['Username'] = $row['Username'];
            $_SESSION['Voting Status'] = $row['voting_status'];
        }
    }
}

然后在函数外部,以便在页面加载时运行代码,您需要包括会话开始和标题重定向。这将无需提交代码运行表单即可运行。请记住,在将任何html发送到客户端之前,需要调用头函数。

session_start();   //starting the session for user profile page
if($_SESSION['Voting Status'] == 'a'){
    header("location:Result.php");
}else{
    header("location:Voted User.php");
}