检查用户是否已登录,然后检查用户是否已通过选中的单选按钮登录

时间:2017-07-15 12:03:40

标签: php

这是我在这里发表的第一篇文章,所以请温和一下。

我有一个我正在玩的网站。它有一个基本的登录页面/注册页面。如果用户未登录,则他可以访问所有页面,但无法查看价格。当用户登录时,价格变得可用。我的问题是我是如何做到的,所以当用户在登录页面上时,他可以选择选择两个单选按钮中的一个,并且所选用户将被登录,并且将显示特定于任一单选按钮的内容。 。即:登录并点击高价(一旦登录,我可以看到高价格)退出并点击登录低价格检查然后我只看到低价格。

这是我的login.php代码

<?php
require('db.php');
// If form submitted, insert values into the database.
if (isset($_POST['username'])){

    $username = stripslashes($_REQUEST['username']); // removes backslashes
    $username = mysqli_real_escape_string($con,$username); //escapes special characters in a string
    $password = stripslashes($_REQUEST['password']);
    $password = mysqli_real_escape_string($con,$password);

//Checking is user existing in the database or not
    $query = "SELECT * FROM `users` WHERE username='$username' and password='".md5($password)."'";
    $result = mysqli_query($con,$query) or die(mysql_error());
    $rows = mysqli_num_rows($result);
    if($rows==1){
        $_SESSION['username'] = $username;
        header("Location: index.php"); // Redirect user to index.php
        }else{
            echo "<div class='form'><h3>Username/password is incorrect.</h3><br/>Click here to <a href='login_page.php'>Login</a></div>";
            }
}else{?>

<!-- header ends here -->
<!-- ****************************************** -->
<!-- enquiry / newsletter / login / register goes here -->
<div class="container">
</div>
<div class="clear"></div>
<!-- Main page content goes here -->
<div class="content_landing">
<p><div class="form">
<h2>Log In to view Prices and Specials</h2>
<form action="" method="post" name="login">
<input type="radio" name="radio" value="birthday" checked> Birthday Prices<br>
 <input type="radio" name="radio" value="corporate"> Corporate Prices<br>
<input type="text" name="username" placeholder="Username" required /><br>
<input type="password" name="password" placeholder="Password" required /><br>
<input name="submit" type="submit" value="Login" />
</form>
<p>Not registered yet? <a href='registration.php'>Register Here</a></p>
</div></p>
<?php } ?>
</div>
</div>

一旦用户登录,他就会看到这个内容(在products.php上:(应该去看看)

<p><b>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>

<?php if(isset($_SESSION['username'])){ ?>
<p>Pricing below:</p>
<p><a class="link" href="logout.php" style="text-decoration:none">Logout</a></p>
<?php }else{ ?>
  <a class="link" href="login_page.php" style="text-decoration:none">login</a> or <a class="link" href="registration_page.php" style="text-decoration:none">Register</a>
<?php } ?>

我仍然是网页设计的超级菜鸟,所以请原谅我的缩进和方法等。

1 个答案:

答案 0 :(得分:0)

您只需指定在显示定价时检查的新会话变量:

<?php
require('db.php');
if (isset($_POST['username'])){
    $username = stripslashes($_REQUEST['username']);
    $username = mysqli_real_escape_string($con,$username);
    $password = stripslashes($_REQUEST['password']);
    $password = mysqli_real_escape_string($con,$password);
    $query = "SELECT * FROM `users` WHERE username='$username' and password='".md5($password)."'";
    $result = mysqli_query($con,$query) or die(mysql_error());
    $rows = mysqli_num_rows($result);
    if($rows==1){
        $_SESSION['username'] = $username;
        $_SESSION['view_type'] = (!empty($_POST['corporate']))? 'c' : 'b';
        header("Location: index.php");
        exit;
    }else{
        echo "<div class='form'><h3>Username/password is incorrect.</h3><br/>Click here to <a href='login_page.php'>Login</a></div>";
    }
} else { ?>...etc.

要使用变量,最好制作一个或两个函数,这样你就不会一遍又一遍地重复一遍if/else

# Checks if user is corporate
function isCorporate()
    {
        return (isset($_SESSION['view_type']) && $_SESSION['view_type'] == 'c');
    }
# Checks if user is birthday
function isBirthday()
    {
        return (isset($_SESSION['view_type']) && $_SESSION['view_type'] == 'b');
    }
# Checks if user is logged in at all
function isLoggedIn()
    {
        return (!empty($_SESSION['username']));
    }

所以你会做类似的事情:

# Logged In?
if(isLoggedIn()) {
    # What kind of login?
    echo (isCorporate())? 'Higher value' : 'Lower value';
}
else
    # Not logged in...
    echo 'Log in to see price!';

在决定价格视图时,请与$_SESSION['view_type']核对。

要仅使用视图类型,您可以使用相同的表单和复选框,如果选中该复选框,将允许您的逻辑忽略用户名和密码字段,您可以使用单独的表单,您可以使用样式<a>链接看起来像单选按钮等。有很多方法可以使会话创建视图而无需完全登录用户。

情侣边注意,你不应该逃避用户提交,你应该是绑定参数。通过绑定参数,这意味着您不会像现在这样将变量直接放入sql语句中。其次,您应该使用password_hash() / password_verify()来存储和检索密码哈希。 md5()不足以保证安全。最后在使用exit重定向后添加header(),它将停止进一步执行脚本,即使之后没有任何内容,这样做也是好习惯。

关于这些功能的一个注意事项,您只需将它们存储在一个可包含的文件中,然后使用require_once('myfunctions.php');将它们包含在页面顶部。

编辑:

因此,请根据评论中的代码段进行操作:

<?php
if(isset($_SESSION['username'])){ ?>
    <p>Pricing below:</p>
    <?php if(isCorporate()) { ?>
    <h1>$100</h1>
    <?php } elseif(isBirthday()) { ?>
    <h3>$50</h3>
    <?php } else { ?>
    <p><em>NOT SET YET</em></p>
    <?php } ?>
    <p><a class="link" href="logout.php" style="text-decoration:none">Logout</a></p>
<?php } else { ?>
    <a class="link" href="login_page.php" style="text-decoration:none">login</a> or <a class="link" href="registration_page.php" style="text-decoration:none">Register</a>
<?php } ?>