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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

HTML

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

Q&A

1回答

1546閲覧

html部文が出力されません

YATO810

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

HTML

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

0グッド

1クリップ

投稿2020/08/21 17:19

前提・実現したいこと

このコードを使いたいのですが、出力されません。
何が原因なのか教えてください。

<?php /* データベース情報を取り込み */ require_once('common.php'); /* セッション開始 */ session_start(); /* POSTで送信されている */ if ($_SERVER['REQUEST_METHOD'] === 'POST') { /* usernameとpasswordが定義されて、かつ空白ではない */ if (isset($_POST['username'], $_POST['password']) && $_POST['username'] !== '' && $_POST['password'] !== '') { /* データベース接続 */ try { $dsn = 'mysql:dbname=' . DB_NAME . ';host=' . DB_HOST . ';charset=utf8mb4;port=8889'; $pdo = new PDO($dsn, DB_USER, DB_PASS); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); // エラーを出力できるように設定 } catch (PDOException $e) { //echo $e->getMessage(); $_SESSION['register_message'] = 'データベース接続に失敗しました'; header('Location:'.$_SERVER['PHP_SELF']); exit; } /* 重複チェック */ $stmt = $pdo->prepare('SELECT * FROM users WHERE username=?'); $stmt->bindValue(1, $_POST['username']); $stmt->execute(); if (count($stmt->fetchAll())) { $_SESSION['register_message'] = 'このユーザーネームはすでに使われています'; header('Location:'.$_SERVER['PHP_SELF']); exit; } /* データ挿入 */ $stmt = $pdo->prepare('INSERT INTO users (username, password) VALUES (?, ?)'); $stmt->bindValue(1, $_POST['username']); $stmt->bindValue(2, $_POST['password']); $stmt->execute(); $_SESSION['register_message'] = '会員登録が完了しました'; $_SESSION['username'] = $_POST['username']; header('Location: ./list.php'); exit; } else { $_SESSION['register_message'] = '送信データが正しくありません'; header('Location:'.$_SERVER['PHP_SELF']); exit; } } ?> <!DOCTYPE html> <html lang="ja"> <head> <title>新規会員登録</title> <meta charset="utf-8"> </head> <body> <h1>新規会員登録</h1> <form action="./" method="POST"> <?php echo($_SESSION['register_message']); ?> <p> ユーザーネーム: <input type="text" name="username"> </p>
<p> パスワード: <input type="password" name="password"> </p> <input type="submit" value="送信"> </form> <p><a href="/">トップに戻る</a></p>
</body> </html> <?php /* セッションの初期化 */ $_SESSION['register_message'] = ''; ?>

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/08/21 21:44

「このコードを使いたいのですが、出力されません。」具体的に、何をどうすると、どうなるのですか? webブラウザに何も表示されないのだとすると。php.iniでエラー表示するようにすることで表示されるようになるかもしれませんし、例えばApache httpdが出力するerror_logにエラー情報が出力されていることもありますので、そちらを確認して質問文に添えてください。
guest

回答1

0

出力されないとのことですが、
そもそもこのコードのエラー発生時の意図を質問者さんはどう理解しているのでしょうか。

なにかエラーが発生すると、
セッション変数に手がかりを残して、
即header()関数にてリダイレクト。
これじゃリダイレクトされたあと、
新規会員登録、ユーザー、パスワードの入力画面になるはず。
だけど、肝心のセッション変数の中身をチェックする箇所がどこにもないので、
どうやってデバッグするんでしょうね。

やっていただきたいことを列挙します。

1)
PHPのエラー表示設定について - Qiita
を参考に、display_errors=On と error_reporting=E_ALL を設定。

2)
そもそもデータベース接続が成功しているのかすら試していないのでは?

php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>データベース接続</title> 6</head> 7<body> 8<?php 9 /* データベース接続 */ 10 try { 11 $dsn = 'mysql:dbname=' . DB_NAME . ';host=' . DB_HOST . ';charset=utf8mb4;port=8889'; 12 $pdo = new PDO($dsn, DB_USER, DB_PASS); 13 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // SILENTじゃなく例外をスローできるようにしないと意味がない 14 echo "成功."; 15 } catch (PDOException $e) { 16 echo $e->getMessage(); 17 //$_SESSION['register_message'] = 'データベース接続に失敗しました'; 18 //header('Location:'.$_SERVER['PHP_SELF']); 19 //exit; 20 }

みたいなサンプルコードを実行して、成功.って表示されるかどうか。

PDO::ATTR_ERRMODE の指定は PDO::ERRMODE_EXCEPTION にして、
データベース処理は常にtry~catchで括ってください。
もしもなにかのコードのコピペだとすると、
このコードは大変粗悪です。
データベース処理で例外を捕まえられないということはデバッグすることを困難にします。

また、仮に自分のパソコンで動かしているとして、
実行環境でmysqlが動いているのでしょうか。
初期データベースの構築は終わっているのでしょうか。
動作環境についての説明が一切ないので、
サポートにつながるアドバイスもコレ以上できません。
(WindowsでXAMPP、MacでMAMPを使っている、などの具体的な実行環境の話を聞きたい。)

3)
POST送信があることの確認をしたあと、usernameやpasswordの存在チェックをしていない。
html出力しているフォームの通りに常にデータ受信できると思わず、
不正なデータが送り込まれる前提で設計してください。
なので、面倒でも if(!isset($_POST['username'])) { ~ } などとして
データが送られてこない場合を想定したコードを書きます。

投稿2020/08/21 22:01

編集2020/08/21 22:04
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問