前提・実現したいこと
掲示板作成の課題で
($_SESSION['COLOR']が空
AND
COLOR_MASTER.COLOR_IDが3)
OR
($_SESSION['COLOR']とCOLOR_MASTER.COLOR_IDが一致)
の際にcheckedを入れたいです。
発生している問題・エラーメッセージ
上記の条件式に合う、コードを記述していると思うのですが、最初にページを開いた際(初期状態)に、ラジオボタンのID3にcheckedがつかないです。
エラー表記に関して
error_reporting(E_ALL & ~E_NOTICE);の設定をするらしく、noticeのエラーが出ないようになっているとのことです。
該当のソースコード
PHP
1<?php 2 3error_reporting(E_ALL & ~E_NOTICE); 4 5//セッションスタート 6session_start(); 7 8//DB接続クラス読み込み 9include 'DBConnect.php'; 10 11//共通関数読み込み 12include 'function.php'; 13 14//セッションIDを再作成する 15session_regenerate_id(true); 16 17//エスケープ 18function h($s) { 19return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); 20} 21 22//ログインしているか判断 23if(empty($_SESSION['USER_ID'])){ 24 header( "Location: ./login.php" ); 25 exit(); 26} 27 28//確認ボタンを押した 29if(!empty($_POST['Submit'])){ 30 31 //処理 32 if($_POST['token'] !== $_SESSION['token']){ 33 //セッションの内容を削除する処理を後ほど記述 34 header( "Location: ./login.php" ); 35 exit(); 36 }else{ 37 //POSTされた値を$_SESSION['XXX']に代入 38 $_SESSION['USER_NAME'] = $_POST['username']; 39 $_SESSION['EMAIL'] = $_POST['email']; 40 $_SESSION['TITLE'] = $_POST['title']; 41 $_SESSION['TEXT'] = $_POST['text']; 42 $_SESSION['COLOR'] = $_POST['color']; 43 44 //エラー変数を空にする 45 $err = ""; 46 47 48 //EmailCheck 49 $checkEmail = new CheckFunction(); 50 $return = $checkEmail->checkEmail($_SESSION['EMAIL']); 51 if($return === false){ 52 $err = "E-mailは’半角英数字@test.co.jp’の形式で入力してください<br />"; 53 } 54 55 //文字数Check 56 $checklen = new CheckFunction(); 57 $param2 = 50; 58 $return = $checklen->checkLen($_SESSION['TITLE'],$param2); 59 if($return === false){ 60 $err .= "タイトルは50文字以下で入力してください<br />"; 61 } 62 63 //空文字Check(TEXT) 64 $checkBlank = new CheckFunction(); 65 $return = $checkBlank->checkBlank($_SESSION['TEXT']); 66 if($return === false){ 67 $err .= "「本文」を入力してください<br />"; 68 } 69 70 if(empty($err)){ 71 $_SESSION['ACTION_NAME'] = "inout_confirm"; 72 header( "Location: ./confirm.php" ); 73 exit(); 74 } 75 76 } 77} 78 79if(!empty($_POST['clear'])){ 80 //$_SESSION['XXX']の情報を削除 81 82 unset($_SESSION['USER_NAME']); 83 unset($_SESSION['EMAIL']); 84 unset($_SESSION['TITLE']); 85 unset($_SESSION['TEXT']); 86 unset($_SESSION['COLOR']); 87 88 $_SESSION['ACTION_NAME'] = "input_clear"; 89} 90 91//$_SESSION['ACTION_NAME'] に "input_display"を代入 92$_SESSION['ACTION_NAME'] = "input_display"; 93 94?> 95<!-- HTML出力 --> 96<!-- $err変数を表示 --> 97<!DOCTYPE html> 98<html lang="ja"> 99<head> 100 <meta charset="UTF-8"> 101 <link rel="stylesheet" href="./css/master.css" type="text/css"> 102 <title>掲示板</title> 103</head> 104<body> 105<header> 106 掲示板 107</header> 108 <?php echo $_SESSION['COLOR']; //ここで送信を押した際に$_SESSION['COLOR']に値が入るか確認をしていました。 109 if(isset($err)){ 110 echo "<span style='color:#ff0000'>".$err ."</span>"; 111 } 112 ?> 113<main> 114 <div> 115 <form action="input.php" method="POST"> 116 <div> 117 <table class="inputArticle"> 118 <tr> 119 <td class="itemName"><div>名前</div></td> 120 <td><div> 121 <input type="text" name="username" value="<?php echo h($_SESSION['USER_NAME']) ;?>"> 122 </div></td> 123 </tr> 124 <tr> 125 <td class="itemName"><div>E-mail</div></td> 126 <td><div> 127 <input type="text" name="email" value="<?php echo h($_SESSION['EMAIL']) ;?>"> 128 </div></td> 129 </tr> 130 <tr> 131 <td class="itemName"><div>タイトル</div></td> 132 <td><div> 133 <input type="text" name="title" value="<?php echo h($_SESSION['TITLE']) ;?>"> 134 </div></td> 135 </tr> 136 <tr> 137 <td class="itemName"><div>本文</div></td> 138 <td><div> 139 <textarea name="text" cols="35" rows="5"><?php echo h($_SESSION['TEXT']) ;?></textarea> 140 </div></td> 141 </tr> 142 <?php 143 144 //DB,COLOR_MASTERからデータを全件取得 145 $dbh = new DBgetDBH(); 146 $stmt = $dbh->getDBconnect()->prepare('select * from COLOR_MASTER'); 147 148 $stmt->execute(); 149 $rows = $stmt->fetchAll(); 150 ?> 151 <tr> 152 <td class="itemName"><div>文字色</div></td> 153 <td><div> 154 <!-- 後で直す --> 155 <?php foreach($rows as $row) : ?> 156 <input class="radio" type="radio" name="color" value="<?php echo h($row['COLOR_ID']) ; ?>" id="<?php echo h($row['COLOR_ID']) ; ?>" 157 <?php if($_SESSION['COLOR'] === "" AND h($row['COLOR_ID']) === 3 OR $_SESSION['COLOR'] === h($row['COLOR_ID'])){ echo 'checked' ;} ;?>> 158 <label for="<?php echo h($row['COLOR_ID']) ; ?>" style="color:#<?php echo h($row['COLOR_CODE']) ; ?>"><?php echo h($row['COLOR_NAME']) ; ?></label> 159 <?php endforeach ; ?> 160 </div></td> 161 </tr> 162 </table> 163 </div> 164 <div> 165 <?php 166 167 //セッションIDを$_SESSIONに格納 168 $_SESSION['SESSION_ID'] = session_id(); 169 170 //$_SESSION_IDをハッシュ化してトークンを生成 171 $token = hash("sha256", $_SESSION['SESSION_ID']); 172 173 $_SESSION['token'] = $token; 174 175 ?> 176 <input type="submit" name="clear" value="クリア"> 177 <input type="submit" name="Submit" value="確認"> 178 <input type="hidden" name="token" value="<?php echo $token ; ?>"> 179 </div> 180 </form> 181 <hr> 182 <?php 183 184 //DBから過去記事を取得 185 $dbh = new DBgetDBH(); 186 $stmt = $dbh->getDBconnect()->prepare('SELECT * FROM ARTICLE RIGHT JOIN COLOR_MASTER ON ARTICLE.COLOR_ID = COLOR_MASTER.COLOR_ID ORDER BY CREATE_DATE DESC;'); 187 $stmt->execute(); 188 $rows = $stmt->fetchAll(); 189 190 ?> 191 <div> 192 <?php foreach($rows as $row) : ?> 193 <table class="postedArticle" style="color:#<?php echo h($row['COLOR_CODE']); ?>"> 194 <tr> 195 <td class="articleId"><div><?php echo h($row['ARTICLE_ID']) ; ?></div></td> 196 <td class="articleTitle"><div> 197 <?php 198 199 $checkBlank = new CheckFunction(); 200 $return = $checkBlank->checkBlank(h($row['TITLE'])); 201 if($return === false){ 202 echo "no title"; 203 }else{ 204 echo h($row['TITLE']); 205 } 206 ?> 207 </div></td> 208 </tr> 209 <tr> 210 <!-- 211 colspanタグ…表(テーブル)にて、水平方向のセルの結合数(セルがまたがる列数)を指定する。 212 --> 213 <td class="articleText" colspan="2"><div> 214 <?php echo h($row['TEXT']) ?> 215 </div></td> 216 </tr> 217 <tr> 218 <td class="articleDate" colspan="2"><div> 219 <?php 220 $date = h($row['CREATE_DATE']); 221 echo date('Y年m月d日 H時i分',strtotime($date)); 222 223 $checkBlank = new CheckFunction(); 224 $return = $checkBlank->checkBlank(h($row['NAME'])); 225 226 if($return === false){ 227 $name = "nobody"; 228 }else{ 229 $name = h($row['NAME']); 230 } 231 232 $checkBlank = new CheckFunction(); 233 $return = $checkBlank->checkBlank(h($row['EMAIL'])); 234 235 if($return === false){ 236 echo " ".h($name); 237 }else{ 238 echo " ".'<a href="mailto:'.h($row['EMAIL']).'">'.h($name).'</a>'; 239 } 240 ?> 241 </div></td> 242 </tr> 243 </table> 244 <?php endforeach ; ?> 245 </div> 246 </div> 247</main> 248</body> 249</html>
試したこと
上記のコードを記述し、ラジオボタン選択時に、どの値を持っているかを確認しました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。