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

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

ただいまの
回答率

90.48%

  • PHP

    24503questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • ログイン

    139questions

    ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

  • セッション

    105questions

    Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

PHP ログインできない ログイン機能

受付中

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,119

ZEKKEY

score 2

login.phpからindex.phpにログインできなくて困っております。
リンク先をindex.php以外のファイルにするとアクセスできるので、
index.phpに記述ミスがあるのではと考えております。

下記サイトにて、エラーチェックをかけましたが、
エラーは検出できませんでした。
http://jp.piliapp.com/php-syntax-check/

動作としては、下記を想定しています。
1.ログインしていない状態でindex.phpにアクセスするとlogin.phpに飛ぶ
2.login.phpでID・PWを入力し、認証に成功するとindex.phpに飛ぶ

大変勝手で恐縮ですが、お知恵をお貸しいただけると幸いです。

※ログインに関する記述でない所でログインのプログラムに
問題が出ている可能性があるため、全文載せさせていただいております。
お目汚し申し訳ございません・・・

▼index.php

<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', '1');

session_start();
require('dbconnect.php');

if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time ()) {
    // ログインしている
    $_SESSION['time'] = time();

    $sql = sprintf('SELECT * FROM members WHERE id=%d',
        mysqli_real_escape_string($db, $_SESSION['id'])
    );
    $record = mysqli_query($db, $sql) or die(mysqli_error($db));
    $member = mysqli_fetch_assoc($record);
} else {
    // ログインしていない
    header('Location: login.php');
    exit();
}

// 投稿を記録する
if (!empty($_POST)) {
    if ($_POST['message'] != '') {
        $sql = sprintf('INSERT INTO posts SET member_id=%d, message="%s", reply_post_id=%d, created=NOW()',
            mysqli_real_escape_string($db, $member['id']),
            mysqli_real_escape_string($db, $_POST['message']),
            mysqli_real_escape_string($db, $_POST['reply_post_id'])
        );
        mysqli_query($db, $sql) or die(mysqli_error($db));

        header('Location: index.php');
        exit();
    }
}

// 投稿を取得する
$sql = sprintf('SELECT m.name, m.picture, p.* FROM members m, posts p WHERE m.id=p.member_id ORDER BY p.created DESC');
$posts = mysqli_query($db, $sql) or die(mysqli_error($db));

// 返信の場合
if (isset($_REQUEST['res'])) {
    $sql = sprintf('SELECT m.name, m.picture, p.* FROM members m, posts p WHERE m.id=p.member_id AND p.id=%d ORDER BY p.created DESC',
        mysqli_real_escape_string($db, $_REQUEST['res'])
    );
    $record = mysqli_query($db, $sql) or die(mysqli_error($db));
    $table = mysqli_fetch_assoc($record);
    $message = '@' . $table['name'] . ' ' . $table['message'];
}

// htmlspecialcharsのショートカット
function h($value) {
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

// 本文内のURLにリンクを設置します
function makeLink($value) {
    return mb_ereg_replace("(https?)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)",'<a href="\1\2</a>' , $value);
}
?>

  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • afroscript.10

    2016/02/02 09:40

    Markdownでシンタックスハイライト(「```php」と「```」でコードを囲む)を使うと見やすくなります!参照→ https://teratail.com/help

    キャンセル

  • ao_love

    2016/02/02 16:15

    ログインができない、というのはどういう状況でしょうか?
    ログインチェックの部分だけコメントアウトして直接index.phpにアクセスした場合に何かエラーが出ますか?

    キャンセル

  • ZEKKEY

    2016/02/04 13:43

    お二方ともご助言いただきありがとうございます。
    コメントアウトを試しましたら、index.phpには問題なさそうでした。
    login.phpに問題ありそうなので、そちらを調べてみます!

    キャンセル

回答 2

+1

初心者のうちはソースコードのどこに問題があるのか判らない事が多いと思います。
統合開発環境でステップ実行できるように環境を整えてみてはいかがでしょうか。
(例:Eclipse と Xdebug など)
テキストエディタ派でしたら、printデバッグで1ステップづつ動作を追っていくのもありかと思います。
if文は慣れないうちは1つづつ分けた方が問題の切り分けが楽になります。

ベタ過ぎですが、こんな感じで。

print "[1]";
session_start();
print "[2]";
require('dbconnect.php');
print "[3]";

if( !empty( $_SESSION ) ) {
  print "_SESSION:";
  print_r( $_SESSION );
  print "<br>\n";
}

if( isset( $_SESSION['id'] ) ) {
  print "[4]";
  print "_SESSION[time]=" . $_SESSION['time'] . " now_time=" . $time() ."<br>\n";
  if( $_SESSION['time'] + 3600 > time () ) {
    print "[5]";


動作が確認出来たところまでprint文を//でコメントアウトしていきます。
問題が解決したらコメント行をツールなどで一括削除するとリリース版になります。
具体的にどの行が問題か判ったらまた質問してみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

-1

ごそっとコード全部載せられてもつらいというか、どれがlogin.phpでどれがindex.phpかもよくわからないし(たぶんこれがindex.php全部ってことだと思いますが)

ログインに関するところだけにコードを削って試されてはいかがですか?

これじゃ只の丸投げみたいです。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/02/01 22:39

    初投稿+PHPを勉強し始めたばっかで、勝手がわからず必要・不必要な部分もわからず全文載せてしまいました・・・。
    不快な思いをさせてしまいました。
    大変申し訳ございません。
    助言いただいた通り、PHP部分のみにしてみました。(index.phpのです)

    キャンセル

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

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

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

  • PHP

    24503questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • ログイン

    139questions

    ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

  • セッション

    105questions

    Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。