2017-07-15 241 views
0

這是我的第一篇文章,所以請對評論進行溫和處理。檢查用戶是否已登錄,然後檢查用戶是否使用單選按鈕進行了登錄

我有一個網站我正在玩。它有一個基本的登錄頁面/註冊頁面。如果用戶沒有登錄,他可以訪問所有頁面,但無法看到價格。當用戶登錄價格變得可用時。我的問題是我如何做到這一點,當用戶在登錄頁面上時,他有一個選項可以選擇兩個單選按鈕中的一個,並且選定的用戶將被登錄,並且將顯示特定於任一單選按鈕的內容。 。即:登錄和高價格點擊(一旦登錄,我可以看到價格高)註銷,點擊登錄與低價格檢查,然後我看到只有低價格。

這裏是我的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 } ?> 

我仍然是一個網頁設計的超級noobo,所以請原諒我的縮進和方法等

回答

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

所以,你會做這樣的事情:決定價格視圖時對$_SESSION['view_type']

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

檢查。

只有只有視圖類型,你可以使用相同的形式與複選框,如果選中,將允許你的邏輯忽略用戶名和密碼字段,你可以有一個單獨的形式與那些,你可以有一對夫婦風格<a>鏈接看起來像單選按鈕等。有很多方法可以讓會話創建視圖,而無需完全登錄用戶。

夫婦方面的注意事項,你不應該逃避用戶意見,你應該是綁定參數,而不是。通過綁定參數,這意味着您不會像現在這樣將變量放入sql語句中。其次,你應該使用password_hash()/password_verify()來存儲和檢索密碼哈希。 md5()不足以保證安全。在使用header()重定向後,最後添加exit,即使沒有任何內容,它也會停止腳本的任何進一步執行,這是很好的習慣。

有關這些功能的說明,您只需將它們存儲在包含文件中,然後使用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 } ?> 
+0

@verjas我基本上希望用戶無論登錄查看企業或生日聚會價格或如果他們沒有登錄只是爲了查看網頁內容。一旦他們登錄產品頁面將顯示企業價格或生日價格。我沒有使用數據庫來存儲價格......他們在每個產品說明下的產品頁面的ifset中。 –

+0

是的,那很好,那麼我所展示的你將會工作。 – Rasclatt

+0

如果您希望他們只需點擊一個按鈕,就可以創建單獨的表單,只需提交這兩個選項即可設置視圖類型。 – Rasclatt