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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

1回答

685閲覧

headerでの画面遷移でページが真っ白になってしまいます。

shaketaku

総合スコア3

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2023/04/12 16:41

実現したいこと

仕様としては、

①ユーザーにカレンダーのtextarea部分に情報を書き込み送信してもらう。
②同スクリプトにて受け取った情報をデータベースに入れる。
③書き込まれた情報をデータベースから取り出し各textareaに表示させる。

というものを考えています。

発生している問題・エラーメッセージ

自分は今上記の①の部分でつまずいています。

headerでのリダイレクトで画面が真っ白になってしまいます。

このような理由がわからず困っております。
お忙しいところ恐縮ですが、ご回答いただけましたら幸いです。

現在の画面表示状況

イメージ説明
上記が情報をpostにて送る前の状況です。

イメージ説明
上記が送った後の状況です。

このように画面が真っ白になってしまいます。ごくまれになぜかカレンダーが表示されることもあるのですが、いまいち理由はわかりません。

該当のソースコード

php

1<!-----------カレンダープログラム---------------> 2<?php 3var_dump($_POST); 4$ym = null; 5$timestamp = null; 6$today = null; 7$html_title = null; 8$prev = null; 9$next = null; 10$day_count = null; 11$youbi = null; 12$weeks = null; 13$week = null; 14$day = null; 15$day_count = null; 16$option = null; 17$pdo = null; 18$text_msg = array(); 19 20session_start(); 21//タイムゾーンを設定 22date_default_timezone_set('Asia/Tokyo'); 23 24 25//前月・次月リンクが選択された場合は、GETパラメーターから年月を取得 26if(isset($_GET['ym'])){ 27 $ym = $_GET['ym']; 28}else{ 29 //今月の年月を表示 30 $ym = date('Y-m'); 31} 32 33//タイムスタンプ(どの時刻を基準にするか)を作成し、フォーマットをチェックする 34//strtotime('Y-m-01') 35$timestamp = strtotime($ym . '-01'); 36if($timestamp === false){//エラー対策として形式チェックを追加 37 //falseが返ってきた時は、現在の年月・タイムスタンプを取得 38 $ym = date('Y-m'); 39 $timestamp = strtotime($ym . '-01'); 40} 41 42//今月の日付 フォーマット  43$today = date('Y-m-j'); 44 45//カレンダーのタイトルを作成 例)2020年10月 46$html_title = date('Y年n月', $timestamp);//date(表示する内容,基準) 47 48//前月・次月の年月を取得 49//strtotime(,基準) 50$prev = date('Y-m', strtotime('-1 month', $timestamp)); 51$next = date('Y-m', strtotime('+1 month', $timestamp)); 52 53 54//該当月の日数を取得 55$day_count = date('t', $timestamp); 56 57//1日が何曜日か 58$youbi = date('w', $timestamp); 59 60//カレンダー作成の準備 61$weeks = []; 62$week = ''; 63 64//第1週目:空のセルを追加 65//str_repeat(文字列, 反復回数) 66$week .= str_repeat('<td></td>', $youbi); 67 68for($day = 1; $day <= $day_count; $day++, $youbi++) { 69 70 $date = $ym . '-' . $day; 71 //それぞれの日付をY-m-d形式で表示例:2020-01-23 72 //$dayはfor関数のおかげで1日づつ増えていく 73 74 if($today == $date) { 75 //もしその日が今日なら 76 $week .= '<td class="today">' . $day . "<textarea name = 'text_msg[]'>" ; 77 } else { 78 //上2つ以外なら 79 $week .= '<td>' . $day . "<textarea name = 'text_msg[]'>"; 80 } 81 $week .= '</textarea>'.'</td>'; 82 83 if($youbi % 7 == 6 || $day == $day_count) {//週終わり、月終わりの場合 84 //%は余りを求める、||はまたは 85 //土曜日を取得 86 87 if($day == $day_count) {//月の最終日、空セルを追加 88 $week .= str_repeat('<td></td>', 6 - ($youbi % 7)); 89 } 90 91 $weeks[] = '<tr>' . $week . '</tr>'; //weeks配列にtrと$weekを追加 92 93 $week = '';//weekをリセット 94 } 95} 96?> 97<?php 98//データベースの接続情報 99define( 'DB_HOST', 'localhost'); 100define( 'DB_USER', 'root'); 101define( 'DB_PASS', 'growry1293'); 102define( 'DB_NAME' , 'calender'); 103 104 105try{ 106 $option = array( 107 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 108 PDO::MYSQL_ATTR_MULTI_STATEMENTS => false); 109 $pdo = new PDO('mysql:charset=UTF8;dbname='.DB_NAME.';host='.DB_HOST,DB_USER,DB_PASS, $option); 110}catch(PDOException $e){ 111 $error_msg[]= $e -> getMessage(); 112} 113 114if (isset(($_POST["update"]))){ 115 for($i = 1; $i<count($_POST["text_msg"]); $i++){ 116 if(!empty($_POST["text_msg"][$i])){ 117 $text_msg=preg_replace('/\A[\p{C}\p{Z}]++|[\p{C}\p{Z}]++\z/u', '', $_POST["text_msg"][$i]); 118 echo("データが送信されました"); 119 print_r($_POST["text_msg"][$i]); 120 break; 121 } 122 } 123 if(empty($text_msg)){ 124 $error_msg[] = '内容を入力してください。'; 125 }else{ 126 $_SESSION['text_msg'] = $text_msg; 127 } 128 129 if(empty($error_msg)){ 130 131 $pdo -> beginTransaction(); 132 133 try { 134 // SQL作成 135 $stmt = $pdo->prepare("INSERT INTO msg_box (text_msg) VALUES ( :text_msg)"); 136 137 // 値をセット 138 $stmt->bindParam(':text_msg', $text_msg, PDO::PARAM_STR); 139 140 //sqlクエリの実行 141 $res = $stmt->execute(); 142 143 //コミット 144 $res = $pdo->commit(); 145 } catch(Exception $e) { 146 $pdo -> rollBack(); 147 } 148 if($res) { 149 $_SESSION['success_msg'] = "書き込みに成功しました"; 150 } else { 151 $error_msg[] = "書き込みに失敗しました。"; 152 } 153 $stmt = null; 154 header('"Location:C:\Users\81806\Downloads\originalsite\ess_portal_site\php\calender_php\calender.php'); 155 exit; 156 } 157}else { 158 echo "データが送信されていない。"; 159} 160if(!empty($pdo)) { 161 162 //メッセージのデータを取得する 163 $sql = "SELECT text_msg FROM msg_box"; 164 $message_array = $pdo->query($sql); 165} 166?> 167 168<!-----------カレンダープログラム---------------> 169<!-----------データベースに接続--------> 170 171 172<!DOCTYPE html> 173<html lang="ja"> 174<head> 175 <meta charset="utf-8"> 176 <title>PHPカレンダー</title> 177 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 178 <link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet"> 179 <style> 180 .container { 181 font-family: 'Noto Sans', sans-serif; 182 margin-top: 80px; 183 width: 80vw; 184 margin: 0 auto; 185 } 186 h3 { 187 margin-bottom: 30px; 188 } 189 th { 190 height: 30px; 191 text-align: center; 192 } 193 td { 194 height: 100px; 195 } 196 textarea{ 197 height: 100px; 198 width: auto; 199 } 200 .today { 201 background: orange; 202 } 203 th:nth-of-type(1), td:nth-of-type(1) { 204 color: red; 205 } 206 th:nth-of-type(7), td:nth-of-type(7) { 207 color: blue; 208 } 209 .holiday{ 210 color: red; 211 } 212 .update_box{ 213 text-align: center; 214 } 215 .submit_box{ 216 width: 120px; 217 height: 50px; 218 margin: 50px auto; 219 } 220 </style> 221</head> 222 223<body id=""> 224 <div class="container"> 225 <h3><a href="?ym=<?php echo $prev; ?>">&lt;</a><?php echo $html_title; ?><a href="?ym=<?php echo $next; ?>">&gt;</a></h3> 226 <form action="<?=$_SERVER['SCRIPT_NAME']?>" method="POST"> 227 <table class="table table-bordered"> 228 <tr> 229 <th></th> 230 <th></th> 231 <th></th> 232 <th></th> 233 <th></th> 234 <th></th> 235 <th></th> 236 </tr> 237 <?php 238 foreach ($weeks as $week) { 239 echo $week; 240 } 241 ?> 242 </table> 243 <div class = "update_box"> 244 <input type="submit" class = "submit_box" value = "更新する" name = "update"></input> 245 </div> 246 </form> 247 </div> 248</body> 249</html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://www.php.net/manual/ja/function.header.php

覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の 出力の前にコールする必要があることです。

3行目でvar_dump()による出力が行われているので、そこではないかと。
エラー表示ONにして確認してみてください。出力処理を書いているにも関わらず「何も出てない」のは処理継続不可能なエラーが出たから、です。(もしくは何かしらエラー出ててもエラー表示をONにしていないとか。エラーログも確認してください)

あと、

C:\Users\81806\Downloads\

これはhttpリクエストではないので、PHPは実行されません。
同サーバー内であればドキュメントルート「からの」パスだけ書いてください。
ドキュメントルートはapacheのhttpd.confなど確認のこと。
( DocumentRootが C:/xxxx/apache/htdocs/であればその配下にC:/xxxx/apache/htdocs/hoge.phpがあるとしたら/hoge.php)

投稿2023/04/12 23:33

編集2023/04/12 23:43
m.ts10806

総合スコア80850

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

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

shaketaku

2023/04/14 14:56

返信が遅くなり申し訳ありません。 回答ありがとうございました。無事解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問