-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

form を作成したセッションを開始し、

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

これを行う1つの方法:

  • require_once()すべてのページで作成した「Head/Config」ファイルを使用します
  • このファイルでは、次のようにセッション変数に情報を保存します。

    $_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

セッション データに何を保存するかを決める必要があります。人がフォームを完成させ、検証に合格し、DB に保存されたら、次のようにすることができます。

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 に答える