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

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

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

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

セッション

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

ログイン

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

Q&A

2回答

4213閲覧

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

ZEKKEY

総合スコア8

PHP

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

セッション

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

ログイン

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

1グッド

0クリップ

投稿2016/02/01 10:20

編集2016/02/01 13:31

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); } ?>
ikuwow👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/02/01 12:06

こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました 「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。
Ken.sakanakana

2016/02/01 13:06

こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました 「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。
date

2016/02/02 00:10

こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました 「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。
afroscript

2016/02/02 00:40

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

2016/02/02 07:15

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

2016/02/04 04:43

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

回答2

0

初心者のうちはソースコードのどこに問題があるのか判らない事が多いと思います。
統合開発環境でステップ実行できるように環境を整えてみてはいかがでしょうか。
(例: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文を//でコメントアウトしていきます。
問題が解決したらコメント行をツールなどで一括削除するとリリース版になります。
具体的にどの行が問題か判ったらまた質問してみてください。

投稿2016/02/01 15:25

chinyato

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

投稿2016/02/01 12:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ZEKKEY

2016/02/01 13:39

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問