質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

ログイン時にlogtimeを登録したい

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 765

YukaSaku

score 43

二つあるDBのうち、テーブル名:loginはユーザーデータ、login_timeはログインした時の日時を保存します。
user nameとpasswordを入力してログインした時にloginテーブルにあるuserdataを見て、そのcust_IDとlogin_timeのcust_IDが合致したレコードのlogtimeにログイン時間を入れたいです。

なんとかSELECT文を書いたのですが、INSERTが無いのでlogtimeにログイン時間が書き込めません。
このSELECT文でSELECTされているのかもよくわかりません。

SELECTとINSERTを一緒に書きたい場合はどうしたらいいでしょうか?

テーブル名: login
cust_ID         INT(5)    AUTO_INCREMENT.Primary key.Unique.
username     VARCHAR(15)
email            VARCHAR(50)
password     VARCHAR(60)
date            datetime

テーブル名: login_time
login_no     INT(5)Primary key.
cust_ID            INT(5)Primary key.
logtime            TIMESTAMP

<?php
session_start();
ini_set("include_path","./includes");
include("dbinfo.inc");
if(!isset($_SESSION['username'])) {
  header("Location: login.php");
}

 $logtime = date("H:i:s");

// ユーザーIDからユーザー名を取り出す
$mysqli = new mysqli($host, $user, $passwd, $dbname);
$sql = "SELECT * FROM login WHERE username='".$_SESSION['username']."'";
//$result = $mysqli->query($query);

$result = $mysqli->query($sql);
if (!$result) {
  print('Cant execute query.' . $mysqli->error);
  $mysqli->close();
  exit();
}

// GET user info
while ($row = $result->fetch_assoc()) {
  $username = $row['username'];
  $email = $row['email'];
  $gen = $row['gen'];
  }

  "SELECT l.*, lt.*
  FROM login l INNER JOIN login_time lt ON l.cust_ID = lt.cust_ID
  WHERE l.username = '" . $_POST['username'] . "'";
//$sql =  "SELECT  FROM login_time join SELECT * FROM login WHERE username='".$_SESSION['username']."'
//IN(INSERT login_time SET logtime = NOW() WHERE username = '" . $_SESSION['username'] . "')";
//$sql = "UPDATE login SET logtime = '" . date("H:i:s") . "' WHERE username = '" . $_POST['username'] . "'";

$result = $mysqli->query($sql);
if (!$result) {
  print('Cant execute query.' . $mysqli->error);
  $mysqli->close();
  exit();
}
// Cut data base
//$result->close();


?>

<!DOCTYPE HTML>
<html>
<head>
<title>Exercise5</title>
</head>
</head>
<body>
<h1>You are logged in.</h1>
<ul>
  <li>Username:<?php echo $username; ?></li>
  <li>Email:<?php echo $email; ?></li>
  <li>Gender:<?php echo $gen; ?></li>
  <li>Logtime:<?php echo date("H:i:s"); ?></li>
</ul>
<a href="logout.php?logout">Logout</a>


</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

login_time テーブルの仕様がよくわかりません

login_noとcust_IDの複合主キーなのでしょうか?
そもそもlogin_noとはなんでしょうか?
たんにログのレコード特定用のIDであれば
login_noをauto_incrementした主キーにすればよいでしょう。
cust_IDはユニークである必要はありません。

普通ログというのは上書きせずに常に積み上げていくものです
cust_IDのユーザーがいつログインしたかを継続的に記録してください

その上で「SELECT * FROM login」したときに
cust_IDをセッションに放り込み、
login_timeテーブルにINSERTしてやればいいでしょう

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/25 14:46

    すみません、このlogin_noとはログインするたびにカウントする為のものです。
    cust_id1の人が3回ログインした場合、このlogin_noが3になります。これもどのようにカウントしたらいいのか悩み中だったのですが、login_noをauto_incrementした主キーですか。

    ”普通ログというのは上書きせずに常に積み上げていくものです”
    確かにそうですね。
    やってみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る