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

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

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

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

274閲覧

php ログイン後のプログラムについて

NaaYU

総合スコア22

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/04/19 07:41

編集2019/04/19 08:15

phpでログイン画面を作成し、ログインに成功したら以下のソースコードのファイルに移る。というプログラムを作成しました。
このコードは、ログインしているかをチェックしログインしていればbanされていないか。ポイントは何ポイント所持しているかを取得し表示したいです。
ですが、500エラーになって何も表示されません。
デバッグも何も表示されませんでした。

main.php

1<?php 2ini_set("display_errors", 1); 3error_reporting(E_ALL); 4?> 5<?php 6 7 8// ログイン状態チェック 9if (!isset($_SESSION["NAME"])) { 10 header("Location: Logout.php"); 11 exit; 12} 13 14?> 15<?php 16session_start(); 17$db['host'] = "localhost:3306"; // DBサーバのURL 18$db['user'] = "db"; // ユーザー名 19$db['pass'] = "db"; // ユーザー名のパスワード 20$db['dbname'] = "db"; // データベース名 21 22 23$dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']); 24 25 // 3. エラー処理 26 try { 27 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); 28 29 $stmt = $pdo->prepare('SELECT * FROM userData WHERE name = ?'); 30 $stmt->execute(array($userid)); 31 32 33 if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 34 35 session_regenerate_id(true); 36 37 // 入力したIDのユーザー名を取得 38 $id = $row['id']; 39 $sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得 40 $stmt = $pdo->query($sql); 41 foreach ($stmt as $row) { 42 43$row['ban']; 44$row['point']; 45 // ユーザー名 46 } 47 $_SESSION["ban"] = $row['ban']; 48 $_SESSION["point"] = $row['point']; 49 // 処理終了 50 } else { 51 // 認証失敗 52 $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。'; 53 } 54 55 } catch (PDOException $e) { 56 57 //$errorMessage = $sql; 58 // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示) 59 echo $e->getMessage(); 60 } 61 ?> 62<!doctype html> 63<html> 64 <head> 65 <meta charset="UTF-8"> 66 <title>メインページ</title> 67 </head> 68 <body> 69 <h1>メインページ</h1> 70 <!-- ユーザーIDにHTMLタグが含まれても良いようにエスケープする --> 71 <p>ようこそ<u><?php echo htmlspecialchars($_SESSION["NAME"], ENT_QUOTES); ?></u>さん<br>あなたは<u><?php echo htmlspecialchars($_SESSION["point"], ENT_QUOTES); ?></u>ポイント所持しています。</p> <!-- ユーザー名をechoで表示 --> 72 <ul> 73 <li><a href="Logout.php">ログアウト</a></li> 74 </ul> 75 </body> 76</html>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/04/19 07:43

host指定はホスト名もしくはipアドレスのみとし、ポート番号は別途portにて指定しますよ
NaaYU

2019/04/19 07:44

portで指定したらエラーになります。 サーバーの仕様かもしれません
NaaYU

2019/04/19 07:46

また、ほかのファイルではこの書き方で動作しています。
NaaYU

2019/04/19 07:49

修正して試しましたが500のままです...
退会済みユーザー

退会済みユーザー

2019/04/19 07:50

エラー報告用の記述があるのにエラー表示にならないのは、このコードに至る前にエラーが発生していませんか?
NaaYU

2019/04/19 07:56

このファイルのソースコードはこれがすべてです。
guest

回答2

0

ベストアンサー

$row = $stmt->fetch(PDO::FETCH_ASSOC
がおかしいです。

$stmt は未定義です。

投稿2019/04/19 07:50

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

NaaYU

2019/04/19 07:57

定義しましたが500のままになります。。。
退会済みユーザー

退会済みユーザー

2019/04/19 08:08

間違っています。結果セットを入手した後でないと、$row 部分が意味を持ちません。*個人的にはこの $row の書き方はキライです。 PDO の使用方法を基礎から学ぶのが手っ取り早いかと。 雑な資料ですが、リンクを張っておきます。 https://qiita.com/te2ji/items/56c194b6cb9898d10f7f
NaaYU

2019/04/19 08:11

ありがとうございます。 ソースコードを大幅に見直しましたがまだ500です。 知恵を貸していただけますか?
退会済みユーザー

退会済みユーザー

2019/04/19 08:12

質問文に掲載されているコードが、モリモリ書き換わっていたりする?
NaaYU

2019/04/19 08:13

もりもり書き換わっています。
退会済みユーザー

退会済みユーザー

2019/04/19 08:14

コードはツギハギでは動きません。 基礎から学んでください。 ここは、デバッグを丸投げする場所ではないです。
退会済みユーザー

退会済みユーザー

2019/04/19 08:14

$stmt->execute(array($userid));の$useridが未定義。
退会済みユーザー

退会済みユーザー

2019/04/19 08:15

デバッグ依頼するところじゃないんだけどなぁ。
NaaYU

2019/04/19 08:18

te2jiさん、m6uさん。ありがとうございました。改善しました。
退会済みユーザー

退会済みユーザー

2019/04/19 08:35

ざっと流し読みしました。 おかしな箇所をメモしておきます。 ・session_start() の場所が変 ・$userid が未定義 ・結果セットの判定を $row = $stmt->fetch(PDO::FETCH_ASSOC) とするのは気に食わない ・session_regenerate_id(true) の場所が変 ・ban の処理が多分変 ・htmlspecialchars は第三引数まで記述するほうが安全 修正方法は記述しませんが、学習を進めた上で不明であれば、改めて質問を立ててください。
guest

0

2019/04/19 17:15編集時の
見直したファイルの }の数がおかしいです
session_start();
がログイン状態チェックの後なので機能してないです最初の
2019/04/19 16:41
時点ではちゃんとなってましたよ
また最初のとき
$sql = "SELECT * FROM userData WHERE name = $_SESSION['NAME']";
としていましたが、
$sql = "SELECT * FROM userData WHERE name = ".$_SESSION['NAME'];

投稿2019/04/19 08:20

date

総合スコア1820

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問