-1

我试图了解如何使用 PHP 和 MySQL 构建用户注册。

我已经建立了一个用户可以填写的表格,然后将信息存储在我的表格中。

error_reporting(E_ALL);
include_once ('connection.php');

// Required field names
$required = array('firstname', 'lastname', 'email', 'password', 'accounttype');

// Loop over field names, make sure each one exists and is not empty
$error = false;
foreach($required as $field) {
  if (empty($_POST[$field])) {
    $error = true;
  }
}

if ($error) {
  echo "All fields are required.";
} else {
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $email = $_POST['email'];
    $password = md5($_POST['password']);
    $accounttype = $_POST['accounttype'];

    $query = "INSERT INTO users(firstname,lastname,email,password,accounttype) VALUES (:firstname,:lastname,:email,:password,:accounttype)";
      $stmt = $dbh->prepare($query);
      $stmt->bindParam(':firstname', $firstname);
      $stmt->bindParam(':lastname', $lastname);
      $stmt->bindParam(':email', $email);
      $stmt->bindParam(':password', $password);
      $stmt->bindParam(':accounttype', $accounttype);
      $stmt->execute();

    if(!$query){
        echo 'Whoops, something went wrong!';
    } else {
        echo $accounttype;
        if($accounttype == '1'){
            header ('Location: /england/dashboard.php');
            exit;
        }; 
        if($accounttype == '2'){            
            header ('Location: /ireland/dashboard.php');
            exit;
        };
    };
};

当用户完成表单时,他们会根据他们的帐户类型被重定向到不同的页面。

在这些页面上,我需要以某种方式检查用户是否属于帐户类型“X”。所以如果他们登陆

header ('Location: /ireland/dashboard.php');

他们的帐户类型值将等于 2,因此只有帐户类型为 2 的人才能访问上述内容。

我已经阅读了有关会话变量的信息,但是我在哪里设置这些?

4

6 回答 6

2
 session_start(); // this at top of page
 if($accounttype == '1'){
        $_SESSION['accountType'] = 1; // or $accounttype
        header ('Location: /england/dashboard.php');
        exit();
    }; 
    if($accounttype == '2'){ 
        $_SESSION['accountType'] = 2; // or $accounttype         
        header ('Location: /ireland/dashboard.php');
        exit();
    };

在英国/dashboard.php

session_start();
if($_SESSION['accountType'] !== 1) header('location: login.php');

在爱尔兰/dashboard.php

session_start();    
if($_SESSION['accountType'] !== 2) header('location: login.php');
于 2013-01-20T18:35:05.537 回答
0

开始构建表单的会话,

session_start();
$_SESSION['account_type'] = 2;

并在dashboard.php刚刚获取您的会话变量中检查帐户类型。

if(($_SESSION['account_type'] == 2)) {
 header('`dashboard.php');
} else {
// someother page or restrict access
}
于 2013-01-20T18:30:42.093 回答
0

简单地开始你的 php 脚本session_start();

分配会话变量$_SESSION['whatever'] = "something";

session_start();不过,您必须在您希望使用会话变量的任何页面上开始您的脚本。

要销毁会话和所有关联的变量,只需使用session_destroy();

于 2013-01-20T18:31:06.850 回答
0

一种方法:

  • 使用您require_once()在每个页面上的“头/配置”文件
  • 在此文件中,将信息存储在会话变量中,如下所示:

    $_SESSION['myCustomValue'] = $accountType;
    
  • 然后根据存储在那里的内容,您可以重定向:

    if ($_SESSION['myCustomValue'] = 2):
        header ('Location: /ireland/dashboard.php'); // oh yea!
    endif;
    
于 2013-01-20T18:32:13.617 回答
0

首先至少 SHA1 散列密码。将结果而不是实际密码存储在数据库中。为了测试登录,你 SHA1 散列他们给你的内容并比较散列。您还应该在散列之前对密码进行加盐,但仅散列将是一个好的开始。

还要给您的用户记录一个可用作主键的 id。

你基本上在你的脚本中首先做一个 start_session() 。这将开始一个新的或附加到他们拥有的一个。

然后在他们登录/注册之后,您知道他们的用户 ID 是什么,并使用 $_SESSION['userid'] = $userid; 将其存储在会话中。

测试登录: isset($_SESSION['userid']) 将返回 true。

编辑

一旦您将表更改为将 id 作为自动递增的主键,您上面的插入不需要更改,但您可以通过调用 $dbh->lastInsertId() 获得该 ID

于 2013-01-20T18:32:48.290 回答
0

您需要决定要在会话数据中存储什么。当一个人完成表单、通过验证并保存在数据库中时,您可能希望这样做:

if(!$query) {
    echo 'Whoops, something went wrong!';
} else {
   session_start();
   $_SESSION['account_type'] = $accounttype;

   // Carry on functionality...
}

在脚本的开头,您可以阻止现有用户访问注册表单:

session_start();

if(isset($_SESSION['account_type'])) {
  header('Location: /ireland/dashboard.php');
}
于 2013-01-20T18:33:42.487 回答