phpとsqlを使って新規会員登録をするシステムは作ることができたんですが
ログインするシステムの作り方がよくわかりません
どのようにすればよいのでしょうか?
具体的にコードを貼っていただけると助かります
どたなかお願いします
php ログイン機能
Re: php ログイン機能
「PHP ログインシステム」とかで検索すればサンプルが出てきますよ。
Re: php ログイン機能
こんばんは
SQLの種類がわからないと返答できません
私はMYSQLを使用しています
MYSQLに限れば
[login.php]
[db.php]
で ログイン処理が可能です
わからない場所があれば聞いてください。
SQLの種類がわからないと返答できません
私はMYSQLを使用しています
MYSQLに限れば
[login.php]
<?php
session_start();
#データベース取得
require("db.php");
// エラーメッセージ
$errorMessage = "";
// 画面に表示するため特殊文字をエスケープする
$viewUserId = htmlspecialchars($_POST["userid"], ENT_QUOTES);
// ログインボタンが押された場合
if (isset($_POST["login"])) {
// 認証成功
$sql = "SELECT * FROM ****** "; //******は自分のデータべーズにあうように変更してください。
$sql.= "WHERE ID = '" . $_POST["userid"] . "'";
$sql.= "AND PASS ='" . $_POST["password"] . "'";
$result = executeQuery($sql);
$is_login = 0;
if( $row = mysql_fetch_array( $result ) )
{
// セッションIDを新規に発行する
session_regenerate_id(TRUE);
$_SESSION["USERID"] = $_POST["userid"]; //追記 ここの2行は消してもらっていいです ユーザーIDと
$_SESSION["USERNAME"] = $row["HANDLE"]; //データベースからHANDLEというテーブルからデータを取得しUSERNAMEに代入しています
header("Location: ../main.php"); // 転送先 ログインした後表示されるWEBページです
exit;
}
else {
$errorMessage = "ユーザIDあるいはパスワードに誤りがあります。";
}
mysql_free_result($result);
}
?>
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title>ログインフォーム</title>
</head>
<body>
<form id="loginForm" name="loginForm" action="<?php print($_SERVER['PHP_SELF']) ?>" method="POST">
<fieldset>
<legend>ログインフォーム</legend>
<div><?php echo $errorMessage ?></div>
<label for="userid">ユーザID</label><input type="text" id="userid" name="userid" value="<?php echo $viewUserId ?>">
<br>
<label for="password">パスワード</label><input type="password" id="password" name="password" value="">
<br>
<label></label><input type="submit" id="login" name="login" value="ログイン">
<a href=./index.html>ホームへ戻る</a>
</fieldset>
</form>
</body>
</html>
<?php
function executeQuery($sql){
#----- ↓変更して下さい↓ ------#
$url = "localhost"; #MySqlサーバー名
$user = "***********"; #Myqlユーザー名
$pass = "************"; #Mysqlパスワード
$db = "**************"; #データベース名
#------ ↑変更ここまで↑ -------#
# MySQLへ接続する
$link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。");
# データベースを選択する
$sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。");
#キャラクタセット
mysql_query("set names utf8");
# クエリを送信する
$result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql);
# MySQLへの接続を閉じる
mysql_close($link) or die("MySQL切断に失敗しました。");
#戻り値
return($result);
}
?>
わからない場所があれば聞いてください。
Re: php ログイン機能
とのことなので,認証とPHPとRDBMSが関わる基本的な部分について。2314 さんが書きました:サンプルが出てくるんですがPHPのみが多くすこしわかりにくいです
sqlのデータを読み取り、入力されたID・PASSと比較する方法がわかりません
まず,ユーザーテーブルの例。サンプルなので非常にシンプルな構成にしておきます。
CREATE TABLE user_table
(
user_id INT NOT NULL,
login_id VARCHAR(32) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
PRIMARY KEY ( user_id ),
UNIQUE ( login_id )
)
- user_id
内部で使うユーザーID。主キー。login_idだと外部キーとして参照する場合に効率が悪いので,代替キーとして用意している。
セッションに保存するIDはこのユーザーID。
AUTO_INCREMENTやIDENTITYを使って自動採番してもよい。 - login_id
ユーザーがログイン時に使うID。一意。 - password_hash
ユーザーのパスワードのハッシュ
DSNに関しては,PDOドライバの対応するRDBMSのページに記述があるので,それを参考にして書いてください。
function connect_database ()
{
/*
* localhostにあるMySQLのtestデータベースに文字コードUTF-8で接続する場合
*/
$dsn = 'mysql:host=localhost;dbname=test;charset=UTF8'; // DSN
$user = 'user'; // DBへのアクセスユーザー。適宜変更
$password = 'pass'; // DBへのアクセスパスワード。適宜変更
return new PDO($dsn, $uesr, $password, araray ( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION )); // エラーは例外で通知
}
PHP 5.4またはPHP 5.3.7以上の場合は,https://github.com/ircmaxell/password_compatにあるpassword.phpをインクルードするようにします (PHP 5.5でインクルードしても問題ないです)。
/**
* ユーザーを追加します。
*
* @param string $loginId 追加するユーザーのログインID
* @param string $password 追加するユーザーのパスワード
*/
function add_user ($loginId, $password)
{
// パスワードをハッシュ値に変換する
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
// DBに対してINSERT文を発行する
// PHPの変数をSQL文中に埋め込む場合はプレースホルダとPDOStatement::bindValueまたは類似機構を使うこと。
// (定数を代入しただけなどの) 問題のないことがわかっている変数を除いて,SQL文中に文字列連結や二重引用符の変数展開を使って埋め込んではいけません
$db = connect_database();
$statement = $db->prepare('INSERT INTO user_table ( user_id, login_id, password_hash ) SELECT COALESCE(MAX(user_id), 0) + 1, :login_id, :password_hash FROM user_table');
$statement->bindValue(':login_id', $loginId, PDO::PARAM_STR);
$statement->bindValue(':password_hash', $passwordHash, PDO::PARAM_STR);
$statement->execute();
}
/**
* パスワードを検証し,正しければユーザーIDを返します。
*
* @param string $loginId 検証するユーザーのログインID
* @param string $password 検証するユーザーのパスワード
* @return int|NULL 正しいログインIDとパスワードの組であればユーザーID,そうでなければNULL
*/
function get_user_id ($loginId, $password)
{
// DBからログインIDで指定された行の情報を取得する
$db = connect_database();
$statement = $db->prepare('SELECT user_id, password_hash FROM user_table WHERE login_id = :login_id');
$statement->bindValue(':login_id', $loginId, PDO::PARAM_STR);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
// 取得行数が1行でなければ失敗。0行は指定したログインIDが存在せず,2行以上はRDBMSの制約違反 (login_idはUNIQUE制約が付いている)
if (count($result) !== 1)
{
return null;
}
// パスワードの検証をする。
if (!password_verify($password, $result['password_hash']))
{
// 検証に失敗したので情報を返さない
return null;
}
// 検証に成功したのでユーザーIDを返す
return (int)$result['user_id'];
}