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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

解決済

適切な条件分岐がわからない

hitonoko
hitonoko

総合スコア42

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

2回答

0リアクション

0クリップ

262閲覧

投稿2022/09/22 02:20

編集2022/09/22 02:36

前提

phpとデータベースをphpmyadmin5.1.1で簡易的なカレンダーアプリを作っています。
選択した日付の横のtdに送信したテキストを表示させる機能を実装中に以下のが発生しました。

実現したいこと

登録を押した時の年($year)と月($month)と日にち($d)が、DB内のyearとmonthとdayとと同じだった場合に処理が実行されるようにしたい

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

全ての日付の横のtdにテキストが表示されてしまう。

該当のソースコード

php

<?php $year = date("Y"); $month = date("m"); $answer = ""; $datehide = ""; $data = ""; $text =""; $redday=""; $redmonth =""; $redyear = ""; $redtext = ""; if(isset($_GET['open'])){ $year = $_GET['year']; $month = $_GET['month']; if($year >= 2031 || $year <= 1999){ $answer = "無効な年 "; $redyear = "borderred"; $year = date("Y"); $datehide = "datehide"; } if($month >= 13 || $month <= 0){ $answer .= "無効な月 "; $redmonth = "borderred"; $month = date("m"); $datehide = "datehide"; } } if(isset($_POST['add'])){ $answer = ""; $redmonth =""; $redyear = ""; $day = $_POST['day']; $text = $_POST['text']; $date = date('d',strtotime("$year-$month last day of this month")); if($day > $date || $day <= 0){ $answer .= "無効な日付 "; $redday = "borderred"; $datehide = "datehide"; }elseif($text == "" || ctype_space($text)||mb_ereg_match(' ',$text)){ $answer .= "空欄 "; $redtext = "borderred"; }else{ $dsn = 'mysql:dbname=schedule;host=localhost'; $user = 'root'; $pass = ''; try{ $dbh = new PDO($dsn, $user, $pass); $dbh->query('SET NAMES utf8'); $sql = 'insert into schedule (year, month,day,content) values (?, ?, ?, ?)'; $stmt = $dbh->prepare($sql); $flag = $stmt->execute(array($year, $month,$day,$text)); }catch (PDOException $e){ print('Error:'.$e->getMessage()); die(); } $dbh = null; header("Location:calendar2.php?year=$year&month=$month&open=表示"); exit; } } ?> <html> <style> tbody{ display:flex; } tr{ display:flex; border:1px solid black; } td{ border:1px solid black; display:flex; } .datehide{ display:none; } .borderred{ border:3px solid red; } </style> <form action="" method="get"> <select name="year" class="<?php echo $redyear ?>"> <?php if($year == ""){ $year = date("Y"); }else{ $year = $year; } for($y= 2000; $y <=2030; $y++){ if($year == $y){ $selected = "selected"; }else{ $selected = ""; } echo "<option $selected>$y</option>"; } ?> </select> <select name="month" id="" class="<?php echo $redmonth ?>"> <?php if($month == ""){ $month = date("m"); }else{ $month = $month; } for($m= 1; $m <=12; $m++){ if($month == $m){ $selected = "selected"; }else{ $selected = ""; } echo "<option $selected>$m</option>"; } ?> </select> <input type="submit" name="open" value="表示" ></input> </form> <br></br> <div class="<?php echo $datehide ?>"><?php echo $year?><?php echo $month ?></div> <?php echo $answer?> <form action="" method="post"> <select name="day" id="" class="<?php echo $redday ?>"> <?php $date = date('d',strtotime("$year-$month last day of this month")); for($d= 1; $d <=$date; $d++){ echo "<option>$d</option>"; } ?> </select> <input type="text" name="text" class="<?php echo $redtext ?>"> <input type="submit" name="add" value="登録"> <?php for($d= 1; $d <=$date; $d++){ ?> <table> <tbody> <tr> <?php echo "<td>$d</td>"; ?> <td> <?php $txt =""; $dsn = 'mysql:dbname=schedule;host=localhost'; $user = 'root'; $pass = ''; $dbh = new PDO($dsn, $user, $pass); // SQLを実行する $sql = 'SELECT * FROM schedule'; $stmt = $dbh->query($sql); // SQLの実行結果を取り出す while($schedule = $stmt->fetch(PDO::FETCH_ASSOC)){ /*selectで値を抽出してwhereで登録した年($year)と月($month)と日にち($d)が DB内のyearとmonthとdayとと同じだった場合に処理が実行されるように記述した つもりだが全てのtdに$textが表示されてしまう。*/ if("SELECT year, month, day FROM schedule WHERE year = $year AND month = $month AND day = $d"){ if($txt == ""){ $txt = htmlspecialchars($schedule["content"], ENT_QUOTES, "UTF-8"); }else{ $txt .= htmlspecialchars(",".$schedule["content"], ENT_QUOTES, "UTF-8"); } } } echo $txt; // 接続を閉じる $dbh = null; ?> </td> </tr> </tbody> </table> <?php } ?> </form> </html>

試したこと

条件を

if("SELECT year, month, day FROM schedule WHERE year IN($year) AND month IN($month) AND day IN($d"))

にしてみたが動かない

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m.ts10806

2022/09/22 02:24

>phpmyadminを使って あくまでMySQLもしくはMariaDBを操作するためのツールでしかないので、 表現としては正しくないです。 「データベースを〇〇で」としたほうが良いでしょう。 ※〇〇は自身のDBとバージョンを記載してください。
m.ts10806

2022/09/22 02:26 編集

あと >if("SELECT year, month, day FROM schedule WHERE year = $year AND month = $month AND day = $d"){ SQL「文」であってSQLの実行結果ではないので、これは全く意味不明なコードになっていると思います。 SQL文はPHPにとってはただの文字列です。

まだ回答がついていません

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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