这是我在这里的第一篇文章,所以请对评论保持温和。
我有一个我正在玩的网站。它有一个基本的登录页面/注册页面。如果用户未登录,他可以访问所有页面,但无法查看价格。当用户登录时,价格变为可用。我的问题是如何做到这一点,以便当用户在登录页面上时,他可以选择两个单选按钮之一,并且该选定的用户将登录并显示特定于任一单选按钮的内容。 . 即:登录并点击高价(登录后我可以看到高价)注销并点击低价登录然后我只看到低价。
这是我的 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 } ?>
我仍然是网页设计的超级菜鸟,所以请原谅我的缩进和方法等。
您只需分配一个在显示定价时检查的新会话变量:
<?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 } ?>
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句