前提・実現したいこと
選択されたvalueと同じ名前のDBを作成しています.
選択が変わるごとに毎回DB接続するのが面倒だなと思い,
$query = "select * from $_POST["machine"] order by date desc, time desc";
として,選択ごとに表示されるテーブルを変えようと思ったのですが,エラーが出てしまいました.
これはあきらめてif文を4通り作成したほうがいいのでしょうか?
(12/24 8:46追記
ただ単に選択されたvalue値が変わるたびに //データベース接続 から </table> までの記述を繰り返すのが面倒だったからです.テーブルの中身を確認するだけのページなので,外からいじられないと思いこのような仕様にしました.)
ついでにログイン済みであるかのチェックも効かなくなってしまいました。(二日前までは正常に動いていた)
このままではurlを直接打ち込むと誰でも見れてしまって、、困っています.
発生している問題・エラーメッセージ
画面が表示されなくなりました HTTP ERROR 500
該当のソースコード
php
1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <meta charset="UTF-8"> 6 <link rel="stylesheet" href="../css/admin.css"> 7 <title>-ログイン-</title> 8</head> 9<body> 10 11 <input type="button" onclick="location.href='../login.php'" value="ログアウト"> 12 13 <!--ログインされているかの確認--> 14 <?php 15 session_start(); 16 17 if(!isset($_SESSION["user_name"])) { 18 $no_login_url = "login.php"; 19 header("Location: {$no_login_url}"); 20 exit; 21 } 22 ?> 23 24 <p>電源状況を見る</p> 25 26 <form action="login_success.php" method="POST"> 27 <select name="machine"> 28 <option value="null">選択してください</option> 29 <option value="log1">1号</option> 30 <option value="log2">2号</option> 31 <option value="log3">3号</option> 32 <option value="log4">4号</option> 33 </select> 34 <input type="submit" name="battery" value="見る"> 35 </form> 36 37 <?php 38 if(isset($_POST["battery"])) { 39 if($_POST["machine"] == "null"){ 40 echo "場所選んでへんで"; 41 }else if($_POST["machine"] == "log1"||$_POST["machine"] == "log2"){ 42 43 //データベース接続 44 $dsn = 'mysql:host=localhost;dbname=○○;charset=utf8'; 45 $db_user = '○○'; 46 $db_pass = '○○'; 47 48 try { 49 $pdo = new PDO($dsn, $db_user, $db_pass); 50 } catch (PDOException $e) { 51 exit('データベース接続失敗。' . $e->getMessage()); 52 } 53 54 $date = []; 55 $time = []; 56 $type = []; 57 $detail = []; 58 59 $query = "select * from $_POST["machine"] order by date desc, time desc"; 60 $stmt = $pdo->query($query); 61 $rec = $stmt->fetchAll(PDO::FETCH_ASSOC); 62 63 foreach ($rec as $row){ 64 $date[] = $row['date']; 65 $time[] = $row['time']; 66 $type[] = $row['type']; 67 $detail[] = $row['detail']; 68 } 69 70 ?> 71 72 <table border="1"> 73 <tr><th>日付</th><th>時間</th><th>種類</th><th>詳細</th></tr> 74 75 <?php 76 for($i = 0; $i<count($date); $i++){ 77 echo "<tr>"; 78 echo "<td>$date[$i]</td>"; 79 echo "<td>$time[$i]</td>"; 80 echo "<td>$type[$i]</td>"; 81 echo "<td>$detail[$i]</td>"; 82 echo "</tr>"; 83 } 84 ?> 85 </table> 86 87 <?php 88 89}else{ 90 echo "hogehoge"; 91 } 92 } 93 94 ?> 95 96</body> 97</html> 98
試したこと
$query = "select * from $_POST["machine"] order by date desc, time desc";
のテーブル名をlog1やlog2にしてもちゃんと表示されていました
回答2件
あなたの回答
tips
プレビュー