PHPで表示期間の指定がしたい

このQ&Aのポイント
  • PHPで表示期間の指定がしたいという質問に対して、PostgreSQLのデータベースの情報を表示するためのSQL文を修正する必要があります。現在のSQL文では、日付の演算が正しく行われていないためエラーが発生しています。具体的には、日付の加算を行う際に、データ型が一致していないためエラーが発生しています。これを解決するためには、適切なデータ型のキャストを行う必要があります。
  • 修正後のSQL文は、日付の範囲指定を正確に行うために、TO_DATE関数を使用して日付のフォーマットを統一し、データ型をキャストします。具体的には、指定した年月を日付型に変換し、1か月後の日付を計算するために、TO_DATE関数と演算子を使用します。また、カテゴリー名を指定してデータを取得するために、WHERE句にカテゴリー名の条件を追加します。
  • 修正後のSQL文では、指定したカテゴリー名のデータの中から、指定した年月の範囲に該当するデータを取得することができます。修正後のSQL文を実行する際には、データベースに接続してからSQL文を実行する必要があります。また、エラーチェックや結果の処理を行うために、適切な関数を使用することも重要です。修正後のSQL文を実行して正しくデータが取得できるか確認してみてください。
回答を見る
  • ベストアンサー

PHPで表示期間の指定がしたい

PHPで表示期間の指定がしたい こんにちは、いつもお世話になっております。 数日間、PHPカテゴリでPHPの表示期間指定についてやり取りをさせていただいてました。 http://okwave.jp/qa/q6102388.html 質問の概要は、PostgreSQLのデータベースの情報を表示するPHPを今日以降の1ヶ月間分だけを表示したいというものです。 何度も回答をいただいてPHPを修正していたのですが、エラーが出てしまいます。 PostgreSQLのカテゴリで聞いたほうが良いのではないかと回答者様にアドバイスをいただき、こちらに伺いに参りました。 情報は以下の通りです。 (1)テーブルの構造と入ってるデータ ------------------------------------------------------------ ee 年月日(「20100811」の形式) ti 記事タイトル na 記事内容 ca カテゴリー ------------------------------------------------------------ (2)回答者様に修正していただいたソース =================================================== $sql = "SELECT ee,ti,na,ca FROM テーブル名 WHERE ca = 'カテゴリー名'"; if($ym != "")$sql .= " and TO_DATE(ee, 'YYYYMMDD') BETWEEN TO_DATE('{$ym}', 'YYYYMMDD') AND TO_DATE('{$ym}', 'YYYYMMDD') + '1 months' + '-1 days'"; $sql .= " ORDER BY ee ASC"; =================================================== (3)2で表示されたエラー =================================================== Warning: pg_exec(): Query failed: ERROR: operator is not unique: date + "unknown" HINT: Could not choose a best candidate operator. You may need to add explicit type casts. in PHPのアドレス on line 102 ------------------------------------------------ ▼101行目の内容 $result = pg_exec($sql); ------------------------------------------------ Warning: pg_numrows(): supplied argument is not a valid PostgreSQL result resource in in PHPのアドレス on line 103 ------------------------------------------------ ▼102行目の内容 $rows = pg_numrows($result); ------------------------------------------------ Warning: pg_freeresult(): supplied argument is not a valid PostgreSQL result resource in in PHPのアドレス on line 147 ------------------------------------------------ ▼146行目の内容 pg_freeresult($result); ------------------------------------------------ この後に、何も情報がなかった場合の規定のメッセージが表示されます=================================================== 以上です。 PHPもデータベースも恥ずかしながら無知のため、お力をお貸しいただけると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • koba-yu
  • ベストアンサー率40% (4/10)
回答No.3

PHP4用 $from = date('Ymd'); //今日の文字列 //1ヵ月後の文字列 $time = getdate(); $time['mon']++; if($time['mon'] > 12){ $time['year']++; $time['>mon'] = 1; } $to = sprintf('%04d%02d%02d', $time['year'], $time['mon'], $time['mday']); //SQL文の作成 $sql = "select ee,ti,na,ca from テーブル名 where ca = 'カテゴリー名'"; $sql .= " and ee>='$from' and ee<='$to'"; $sql .= " order by ee asc"; 月末日の考慮はしていないので1月30日の時、2月30日になってしまうけど一応このような感じで。

yako_k
質問者

お礼

koba-yu様 ご回答ありがとうございました。 エラーも出ることなく、無事に表示できました! 情報足らずのわかりにくい質問だったにも関わらず、繰り返し最後まで教えてくださり、本当にありがとうございました。

その他の回答 (2)

  • koba-yu
  • ベストアンサー率40% (4/10)
回答No.2

エラーについて、PHP5.2.Xではエラーにはなりません。 PHPのバージョンはいくつですか? 一ヶ月後にする $old->modify('- 1 month');   ↓ $old->modify('+ 1 month'); 10日後だったら $old->modify('+ 10 day');

yako_k
質問者

お礼

koba-yu様、ご回答ありがとうございます。 一ヵ月後への変更の件、ありがとうございます。 今日「+」1ヶ月ということなんですね。 とても助かりました!本当にありがとうございます。 PHP5ではエラーが出ないとのこと、検証までしていただきありがとうございました。 PHPのバージョンは4.4.2です。 何度も申し訳ありませんが、よろしくお願いします。

  • koba-yu
  • ベストアンサー率40% (4/10)
回答No.1

eeが「20100811」の形式との事なので文字列型として$sqlの作成まで $now = new DateTime("now"); //今日 $old = new DateTime("now"); $old->modify('- 1 month'); //1ヶ月前 $sql = "select ee,ti,na,ca from テーブル名 where ca = 'カテゴリー名'"; $sql .= " and ee>='{$now->format('Ymd')}' and ee<='{$old->format('Ymd')}'"; $sql .= " order by ee asc"; 以上の感じで。

yako_k
質問者

お礼

koba-yu様、こんにちは。 ご回答ありがとうございました。 御礼が遅くなり、申し訳ありませんでした。 さっそく修正をいたしましたところ、以下の1件のエラーが出てしまいました。 --------------------------------------------------------------- ▼表示されたエラー Parse error: syntax error, unexpected '(', expecting '}' in PHPのアドレス on line 105 ▼PHPの105行目の内容 $sql .= " and ee>='{$now->format('Ymd')}' and ee<='{$old->format('Ymd')}'"; --------------------------------------------------------------- 以上です。 お力添えをいただけましたら助かります。 また、1ヶ月前~今日が表示されるようにしてくださったと思うのですが、実は今回表示したいのは今日~1ヶ月後になります。 我侭を申し上げますが、できましたらそちらもご教示ください。 重ね重ねお願いばかりで申し訳ありません。 よろしくお願いいたします。

関連するQ&A

  • phpとpostgreの接続にエラー解決方法について

    始めまして、PHPの勉強始まったばかりのものです。以下のエラーを解決するにはどうすればよいでしょうか? Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: FATAL: database "touroku" does not exist in /home/k0410user/public_html/111/inc/include/init.inc on line 2 Warning: pg_query(): supplied argument is not a valid PostgreSQL link resource in /home/k0410user/public_html/111/inc/include/init.inc on line 6 Warning: pg_num_rows(): supplied argument is not a valid PostgreSQL result resource in /home/k0410user/public_html/111/inc/include/init.inc on line 8 Warning: pg_close(): supplied argument is not a valid PostgreSQL link resource in /home/k0410user/public_html/111/inc/include/init.inc on line 13

    • 締切済み
    • PHP
  • PHPとPostgreSQL接続 (スキーマ)

    いつもお世話になっております。 現在、PHP(5.3.1)とPostgreSQL(9.2)で開発をしております。 エラーが発生しており大変困っております。 こちらが発生するエラーです。 Warning: pg_exec() [function.pg-exec]: Query failed: ERROR: schema スキーマが見つからないとのことです。 そして、以下がコードとなります。 <?php // PostgreSQL Connect if (!($cn = pg_connect("host=*** port=*** user=*** password=*** dbname=***"))) { die; } // PostgreSQL Select $sql = "select * from t_test.na1"; if (!($rs = pg_exec($sql))) { die; } // PostgreSQL Get Records $ct = pg_numrows($rs); for ($i = 0; $i < $ct; $i++) { $item = pg_fetch_array($rs, $i); $txt = "${item[1]}"; } // PostgreSQL Disconnect pg_close($cn); ?> 現在のデータベースのスキーマについてですが「na1」と「public」の2つが存在しています。 試しに、na1とpublicのテーブルをまったく同じにして SQLの部分を「select * from t_test」に変更すると「public」側のテーブルが覗けます。 しかし、SQLの部分を「select * from t_test.na1」に変更すると「スキーマが見つかりません」 というエラーが発生してしまいます。 スキーマがあるにもかかわらずこのエラーがでてしまうため原因が分からず困っております。 もしお分かりになる方いらっしゃいましたら、教えていただければと思います。 何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • 表示期間を指定したい

    表示期間を指定したい こんにちは、いつもお世話になっております。 PHP初心者です。 PostgreSQLのデータベースの情報を表示する一覧(PHP)があるのですが、こちらを過去のデータはすべて非表示にして、今日から1ヶ月分だけを表示に変更したいです。 (現在は特定のカテゴリのものが全表示されています) 日付はeeのカラムに「20100811」の形式で入っています。 同じような質問のhttp://okwave.jp/qa/q4818455.htmlを見つけたのですが、理解が追いつかず、うまくできませんでした。 ご存知の方がいらっしゃいましたら、お力をお貸しください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpとpostgresでの条件処理

    phpでPostgresのデータベースに接続して3つのテーブルから以下のようにフォームでdata-1が あった時のリレーションを表示させたいと考えています。 $sql = "select data-1,data-2,data-3,data-4 from table1,table2 where data-1 = '$data-1' and data-2.table1 = data-4.table2"; $result = pg_exec($sql); $rows = pg_numrows($result); $columns = pg_numfields($result); この時、data-1が空欄の場合は、row0がないのでエラーになります。data-1が空欄の場合もあるので 空欄の場合は処理を分けるようなことができるのでしょうか。

    • ベストアンサー
    • PHP
  • php,postgreSQLについて

    こんにちわ。初めて投稿します。よろしくお願いします。 現在、postgreSQLで作ったテーブルのデータをつくり、検索フォームで指定した条件(この場合はお店のコード) を、指定先のページに表示させたいのです。 SQLに直接、表示させたいコード番号を入力すれば出るのですが、フォームに入力された値を変数として格納し、SQL文の中に自動にあてはめる方法がわかりません・・。 どうかよろしくお願いします。 phpは4.1です。inp_store_cdは検索フォ-ムでのinput名です。 *表示画面 <?php $conn = pg_connect ("host=localhost port= 5432 dbname=test ); if ($conn == false) { print("データベースに接続できませんでした。"); exit; } $sql = "select * from store_basic where store_cd=$_POST["inp_store_cd"]"; if (!empty($inp_store_cd)) { $sql = $sql. "and sotre_cd =" .$_POST["inp_store_cd"]; } $result = pg_exec($sql); // selectを実行 if ($result == false) { printf("SQL:\"$sql\"の実行に失敗しました。"); exit; } $rows = pg_numrows($result); // 行数を取得 $columns = pg_numfields($result); // 列数を取得 print("<table border>\n"); for ($j = 0;$j < $rows;$j++) { if ($j == 0) { print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_fieldname($result,$i); // 列名の取り出し print("<th>$str</th>"); } print("</tr>\n"); } print("<tr>"); for ($i = 0;$i < $columns;$i++) { $str = pg_result($result,$j,$i); // データの取り出し print("<td>$str</td>"); } print("</tr>\n"); } pg_freeresult($result); // 検索結果の解放 print("</table>\n"); ?>

    • 締切済み
    • PHP
  • セッションを使ったログインページでのエラー

    現在某サイトのサンプルを使用して、 セッションを使ってログインページを作っています。ソースは以下です。 ファイル名loginPage.php <? session_start(); ?> //一部省略 <form action="loginExe.php" method="POST"> ログインID:<input type="text" size="15" name="fLoginID"><br> パスワード:<input type="password" size="8" name="fPassword"><br> <input type="submit" value="ログイン"> //以下省略 ファイル名loginExe.php <?php session_start(); $sql = "select password from userLogin where uid='$fLoginID'"; $r = pg_exec($SessDBConn, $sql); if( pg_numrows($r) != 1 ) { print "アカウントが違う、もしくはユーザ登録されていません。"; print '<a href="regForm.php">こちらから登録してください。</a>'; session_destroy(); exit; } if( pg_result($r, 0, "password") != $fPassword ) { print "パスワードが違います。"; session_destroy(); exit; } session_register("sLoginID"); session_register("sPassword"); $sLoginID = $fLoginID; $sPassword = $fPassword; ?> //以下省略 これで実行してみたのですが Warning: pg_exec(): supplied argument is not a valid PostgreSQL link resource in C:\xampp\htdocs\loginExe.php on line 6 Warning: pg_numrows(): supplied argument is not a valid PostgreSQL result resource in C:\xampp\htdocs\loginExe.php on line 7 と 「$r = pg_exec($SessDBConn, $sql); if( pg_numrows($r) != 1 ) 」 エラーが出てしまいました。調べてみたところ、このプログラムはPostgreSQLを使用した際に使うものであって、私のようにMySQLを使うとエラーが出てしまいます。 今回質問したいのはではエラーの出た部分をどのようにかえればMySQLを使ったプログラムとして実行してくれるのかということです。 ご存知のかたがいらっしゃいましたら、アドバイスの方よろしくお願いいたします。 ちなみにいろいろサイトを調べて、エラーのところを $r = $db->getOneRow($sql); if( $r->password != $fPassword || !$r ) { に変えてみたのですが、 Fatal error: Call to a member function getOneRow() on a non-object in C:\xampp\htdocs\loginExe.php< on line 6と「$r = $db->getOneRow($sql);」 の部分がエラーになってしまいました。

    • ベストアンサー
    • PHP
  • フォームとPHPの連携

    こんにちは。今回、オプションメニューのフォームを作り、選択したオプションごとにデータを表示させるというものを作っているのですが、オプションを選択し、実行すると、 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in~ Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in~ と表示されてしまいます。 フォームを用いずに単にデータを表示させるだけならできたのですが・・・ フォームとPHPを連携させる場合、php.ini内のregister_globalsをOnにする必要があるとのことだったので、Onにはしているのですが・・・ 問題はほかにあるのでしょうか?よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PostgreSQLのデータ

    PHPにてデータの入っていないテーブルに対して”pg_result”の処理をすると ”Warning: 0 is not a PostgresSQL result index”という 警告文が出てしまいます。 これを何とか回避したいのです。 また、最悪警告文のみ(Error文ではなく)表示させないようにできればいいのですが方法が分かりません。 お分かりになられる方おりましたら、よろしくご教授ください。 環境: RedhatLinux6.2J apache-1.3.12-0jp1 php-3.0.15_i18n_ja-0vl2 postgresql-7.0.2-2.i386

  • PHPのデータベース(postgresql)への保存

    いま日記機能付カレンダーを作成しています。 データベース(postgresql)に接続までできているのですが、保存ができません。エラーが出ている部分は--- $sql = "INSERT INTO DIARY_MASTA       VALUES('".$DIARY_DATE."','".$DIARY_DATA."');"; $result = pg_query($sql); ---です。 エラーメッセージはWarning: pg_query() [function.pg-query]: Query failed: ERROR: invalid input syntax for type date: "" in ・・・・ 保存方法や確認しなければいけない個所を教えていただきたいので、よろしくお願い致します。 //保存ボタンを押すと保存 if($_POST['enter'] == "保存"){ //日記の記入がない日 if($data == null){ $data = $day; } //記入年月日・日記内容 $DIARY_DATE = $year."年".$month."月".$day1."日"; $DIARY_DATA = $_POST["DIARY"]; } //データベース接続開始! //(ホスト名・データベース名・ユーザー名・パスワード) $conn = "host = localhost dbname = **** user = ****      password = ****"; $link = pg_connect($conn); if($link){ echo "接続成功 .\n"; //日記の日付・日記の内容をDIARY_MASTAより取得 $sql = "INSERT INTO DIARY_MASTA       VALUES('".$DIARY_DATE."','".$DIARY_DATA."');"; $result = pg_query($sql); if(!$result_pg){ die("保存できません"); } } else { echo "接続できません"; } //データベース切断 $close = pg_close($link); if($close){ echo("切断できました"); }

    • ベストアンサー
    • PHP
  • Warning: 1 is not a MySQL result index in inc_setup.php3 on line 264

    教えてGOOを開いていると  Warning: 1 is not a MySQL result index in inc_setup.php3 on line 264   という表示がされるのですが、これってなんなんでしょうか? 警告文のようでとてもきになります。