2016-05-22 15 views
0

我目前正在研究一個學校項目,在那裏我應該從我選擇的應用程序(在這種情況下,網頁帶有PHP)訪問數據庫,並且遇到了問題。在我的函數NewUser()中,一旦創建賬戶,就會在登錄窗口彈出一條消息(它在瑞典語中,所以不用擔心這個),但問題是這樣的: 考慮到我使用會話時,消息將始終存在,並且在以某種方式重新啓動會話之前(在這種情況下,重新啓動服務器)將永遠不會被刪除,這並不是最佳選擇。如何最有效地取消會話變量的簽名?

例如,如果這是可能的,我希望在每次頁面重新加載時都刪除該消息?

你可以給的任何幫助是有幫助的,我只是想知道關閉會話的最佳方法,當頁面重新加載時是什麼?

最好的問候, 維克多

<?php 
session_start(); 

ini_set("display_errors", true); 
error_reporting(E_ALL); 

include('connect.php'); 

function NewUser() 
{ 
    global $email; 
    $firstname = $_POST['firstname']; 
    $lastname = $_POST['lastname']; 
    $pnumber = $_POST['pnumber']; 
    $age = $_POST['age']; 
    $email = $_POST['email']; 
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT); 

    global $mysqli; 
    $stmt = $mysqli->prepare("INSERT INTO persons (firstname, lastname, pnumber, age, email, pwd) 
          VALUES (?,?,?,?,?,?)"); 
    $stmt->bind_param('ssssss', $firstname, $lastname, $pnumber, $age, $email, $password); 
    $stmt->execute(); 
    if ($mysqli) 
    { 
    $_SESSION['accountCreated'] = "Ditt konto har skapats, du kan nu logga in!"; 
    header("Location:index.php"); 
    exit(); 
    } 
    else 
    { 
     echo ("<script type='text/javascript'> 
     window.alert('Oj, det blev något fel i registreringen! Försök igen'); 
     window.location = 'index.php'; 
     </script>"); 
     exit(); 
    } 
} 

function SignUp() 
    { 
    if(!empty($_POST['email'])) 
    { 
    global $mysqli; 
    $query = ("SELECT * FROM persons WHERE email = ?"); 
    if ($stmt = $mysqli->prepare($query)) 
    { 
     $stmt->bind_param('s', $_POST['email']); 
     $stmt->execute(); 
     $stmt->store_result(); 
     $countRows = $stmt->num_rows; 
     $stmt->close(); 
    } 

    if($countRows < 1) 
    { 
    $_SESSION['emailExistsError'] = ""; 
    $_SESSION['message'] = "success"; 
    NewUser(); 
    } 
    else 
    { 
    $_SESSION['accountCreated'] = ""; 
    $_SESSION['emailExistsError'] = "Denna mejladdressen har redan använts!"; 
    $_SESSION['message'] = "error"; 
    header("Location:index.php"); 
    exit(); 
    } 

} 
} 
    if(isset($_POST['submit'])) 
    { 
    $close = false; 

    if(empty($_POST["firstname"])) 
    { 
     $_SESSION['fnameError'] = "Du måste fylla i ditt förnamn!"; 
     $close = true; 
    } else { 
     $_SESSION['fnameError'] = ""; 
    } 
    if(empty($_POST["lastname"])) 
    { 
     $_SESSION['lnameError'] = "Du måste fylla i ditt efternamn!"; 
     $close = true; 
    } else { 
     $_SESSION['lnameError'] = ""; 
    } 
    if(empty($_POST["email"])) 
    { 
     $_SESSION['emailError'] = "Du måste fylla i din e-mail!"; 
     $close = true; 
    } else { 
     $_SESSION['emailError'] = ""; 
    } 
    if(empty($_POST["password"])) 
    { 
     $_SESSION['passwordError'] = "Du måste fylla i ett lösenord!"; 
     $close = true; 
    } else { 
     $_SESSION['passwordError'] = ""; 
    } 
    if(empty($_POST["pnumber"])) 
    { 
     $_SESSION['pnumberError'] = "Du måste fylla i ditt personnummer!"; 
     $close = true; 
    } else { 
     $_SESSION['pnumberError'] = ""; 
    } 
    if(empty($_POST["age"])) 
    { 
     $_SESSION['ageError'] = "Du måste fylla i din ålder!"; 
     $close = true; 
    } else { 
     $_SESSION['ageError'] = ""; 
    } 

    if($close == true) { 
     header("Location:index.php"); 
     exit(); 
    } else { 
     SignUp(); 
    } 
    } 
$mysqli->close(); 
?> 

回答

4

是,只需使用unset

unset($_SESSION['message']);

如果您要刪除所有會話數據(我不認爲你想要的),您可以根據您的意圖使用session_destroy()session_unset()

+0

好吧,看起來很簡單。 Okey,有沒有一種方法可以在每次頁面刷新或以其他方式執行時實現該功能? – Marante

+0

您可能不需要它的功能。打印出您的信息後,您可以立即取消設置。 – rjdown

+0

但是,如果我以後立即使用未設置的消息將永遠不會顯示? – Marante