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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL

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

PHP

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

Q&A

解決済

1回答

405閲覧

PHP HTML/CSS フォーム

Chandler_Bing

総合スコア673

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL

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

PHP

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

1グッド

0クリップ

投稿2018/12/25 12:38

編集2018/12/25 12:55

HTML

1<?php 2 3require_once("model.php"); 4session_start(); 5$error = false; 6$errormessage = ''; 7 8if ($_SERVER['REQUEST_METHOD'] == 'POST') { 9 echo 0; 10 if (isset($_POST['login'])) { 11 echo 0.5; 12 $studentId = postvalue('studentid'); 13 $pass = postvalue('pass'); 14 var_dump($studentId); 15 var_dump($pass); 16 17 try { 18 $db = connectdb($errors); 19 echo 1; 20 $stmt = $db ->prepare("SELECT * FROM students WHERE `student_id` = ? AND pass = ?"); 21 echo 2; 22 $stmt ->bindParam(1, $studentId, PDO::PARAM_STR); 23 $stmt ->bindParam(2, $pass, PDO::PARAM_STR); 24 $stmt ->execute(); 25 $result = $stmt ->fetch(); 26 27 if ($result == 0) { 28 echo 3; 29 $errormessage = "IDかPASSが違います"; 30 $error = true; 31 } else { 32 echo 4; 33 $studentId = $result['student_id']; 34 $studentName = $result['name']; 35 } 36 } catch (PDOException $e) { 37 echo "エラー:" . $e ->getMessage(); 38 } 39 } 40 41 if ($error == false) { 42 echo 5; 43 $_SESSION['studentId'] = $studentId; 44 $_SESSION['studentName'] = $studentName; 45 header("Location: applyclasses.php"); 46 exit(); 47 } 48} 49 50?> 51 52<html lang="1" dir="ltr"> 53 54<head> 55 <meta charset="utf-8"> 56 <title>MainPage</title> 57</head> 58 59<body> 60 61 <div class="main"> 62 <h2>ログイン</h2> 63 <p>IDとPASSを入力して下さい</p> 64 </div> 65 66 <div class="formwrap"> 67 <form method="POST"> 68 <p>ID <input name="studentid" type="text"></p> 69 <p>PASS<input name="pass" type="password"></p> 70 <p><input name="login" type="submit" value="ログイン"></p> 71 </form> 72 </div> 73<?php echo var_dump($_SESSION);?> 74 <div class="errorwrap"> 75 <p style="color:#f08080;"><?php echo $errormessage; ?></p> 76 </div> 77 78</body> 79 80</html>

SQL

1CREATE TABLE `students` ( 2 `student_id` varchar(6) NOT NULL, 3 `name` varchar(100) NOT NULL, 4 `pass` varchar(100) NOT NULL, 5 `major` enum('AD01','EC01','ED01','EL01','EL02','IS01','LA01') DEFAULT NULL 6) ENGINE=InnoDB DEFAULT CHARSET=utf8; 7 8-- 9-- テーブルのデータのダンプ `students` 10-- 11 12INSERT INTO `students` (`student_id`, `name`, `pass`, `major`) VALUES 13('AD0001', 'Frank', 'temp', 'AD01'), 14('AD0002', 'Fox', 'temp', 'AD01'), 15('AD0003', 'Ross', 'temp', 'AD01'), 16('AD0004', '井上建', 'temp', 'AD01'), 17('AD0005', 'Bob', 'temp', 'AD01'), 18('ED0001', 'Emilly', 'temp', 'ED01'), 19('ED0002', 'Fan', 'temp', 'ED01'), 20('ED0003', 'Hanks', 'temp', 'ED01'), 21('ED0004', 'Ellen', 'temp', 'ED01'), 22('ED0005', 'Tom', 'temp', 'ED01'), 23('EL0001', '浜田省吾', 'temp', 'EL01'), 24('EL0002', 'David', 'temp', 'EL01'), 25('EL0003', 'Rora', 'temp', 'EL01'), 26('EL0004', 'Tim', 'temp', 'EL01'), 27('EL0005', 'Ron', 'temp', 'EL01'), 28('EL2001', '野村祐輔', 'temp', 'EL02'), 29('EL2002', 'Tobby', 'temp', 'EL02'), 30('EL2003', 'Nancy', 'temp', 'EL02'), 31('EL2004', 'Lisa', 'temp', 'EL02'), 32('EL2005', 'Serena', 'temp', 'EL02'), 33('IS0001', 'Chandler', 'temp', 'IS01'), 34('IS0002', '中井悠太', 'temp', 'IS01'), 35('IS0003', 'Mike', 'temp', 'IS01'), 36('IS0004', '王建民\r\n', 'temp', 'IS01'), 37('IS0005', 'Monica', 'temp', 'IS01'), 38('LA0001', 'Joye', 'temp', 'LA01'), 39('LA0002', 'Rachel', 'temp', 'LA01'), 40('LA0003', 'Ken', 'temp', 'LA01'), 41('LA0004', 'Tag', 'temp', 'LA01'), 42('LA0005', 'Carol', 'temp', 'LA01'); 43 44-- 45-- Indexes for dumped tables 46-- 47 48-- 49-- Indexes for table `students` 50-- 51ALTER TABLE `students` 52 ADD PRIMARY KEY (`student_id`); 53

フォームからデータを取り出しているのはこのSQLです。
適用なデータを打ち込むと散りばめたechoがエラーの動き通り動きます。
しかし、このSQLの存在する実際の値(例、('IS0001','temp'))をうつとechoはどこも通らないですが、

<?php echo var_dump($_SESSION);?>の中にはデータベースの値がきちんと入っています。

array(2) { ["studentId"]=> string(6) "IS0001" ["studentName"]=> string(8) "Chandler" }

解決法をよろしくお願いします。

【追記❶】

$studentId = postvalue('studentid');
$pass = postvalue('pass');

は独自メソッドです。やっていることはissetの確認と同じです。
現在の挙動でおかしいのが

header("Location: applyclasses.php");
exit();

をコメントアウトするとecho0,0.5,1,2,4,5が表示され動きとしては問題ありません。
しかしこれを復活させると、<?php echo var_dump($_SESSION);?>の中にはデータベースの値がきちんとあるのにも関わらず、
echoが何も表示されません。echo 5に通っていないと<?php echo var_dump($_SESSION);?>は出ないはずなのですが、

bochan2👍を押しています

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

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

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

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

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

m.ts10806

2018/12/25 12:48

この書き方だと実際のコードとの関連性が取りにくいです。コードブロックが複数あるため解説文とコードとの関連性が見づらくなっています。質問本文を調整してください。 postvalue()なりconnectdb()が何をやっているか分からないので再現確認がとれません。 また、解説文の中に「質問」が含まれていません。解決方法をよろしくと言われても何が問題なのかをきちんと書かれていないと何に対する解決方法を望んでいるかが分かりません。 「echoはどこも通らない」のであれば、if ($_SERVER['REQUEST_METHOD'] == 'POST') {を通っていないことになりますね。どこまでデバッグができているのでしょうか。正確に記載してください。
m.ts10806

2018/12/25 13:36

もしかして何度か指摘受けているかもしれませんが、このタイトルには何も要件が含まれていません。 タイトルは回答者に起きている問題を訴える第1手段なので、きちんと要件を書いてください。
guest

回答1

0

ベストアンサー

header

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。 頻出するエラーとして、include または require 関数、他のファイルをアクセスする関数に 空白または空行があり、header() の前に出力が 行われてしまうというものがあります。同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。

PHPのエラー表示をOnにしたうえでPHPマニュアルを読めばすぐ分かることかと思います。

投稿2018/12/25 13:04

m.ts10806

総合スコア80852

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

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

m.ts10806

2018/12/25 13:06

ミニマムコードで試してもらうとわかりますが、header()の前で何が出力があると分かった時点でプログラムは停止し、その前の如何なる出力があったとしても省略してエラーだけを吐き出します。 例: a<?php echo 111; header("");
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問