日付型のデータを検索条件

このQ&Aのポイント
  • DATE型でINSERTした日付データが検索条件として効きません。検索フォームに入力した日付に関係なく全てのレコードが出てしまいます。
  • 検索フォームに設定された日付条件をPHPで処理していますが、条件を正しくSQL文に追加できているか確認しています。
  • 日付型データの検索条件が正しく効くようにする方法について相談しています。
回答を見る
  • ベストアンサー

日付型のデータを検索条件

DATE型でINSERTした日付データが検索条件として効きません。 検索フォームに入力した日付に関係なく全てのレコードが出てしまいます。 以下、原因につきご教示いだけると幸いです、 ◆検索フォームは、以下の通りです。 <html><body> <form method="post" action="list.php"> <input type="text" name="date_more">以降 <input type="text" name="date_less">以前 </form> </body></html> ◆PHPは、日付欄に2005-06-01のように値が入力された場合のみ SQLに追加するようにしています。 //試験日 (値が入力されている場合のみSQL文に追加) if (strlen($date_more) > 0) { $sql .= " and (testdate >= $date_more)"; } if (strlen($testdate_less) > 0) { $sql .= " and (testdate <= $date_less)"; } ◆ $sqlをprintすると select * from mytable where (memo like '%%') and (testdate >= 2005-06-01) のように、SQL文はきちんと発行されているように思います。 よろしくお願い致します。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

'でくくってあげたらどうだろう。それ(testdate >= 2005-06-01)だと、多分「testdate(に入っている日付のシリアル値)が2005引く6引く1、つまり1998よりも大きい」って条件になるんじゃないかな。 testdate >= '2005-06-01' 蛇足ながらSQL Injectionには気をつけて。

litton101
質問者

お礼

まったくご教示の通り、'でくくったら解決しました。 ありがとうございました。 「シリアル値として解釈される」という点をご指摘いただけた おかげで、今後同じ間違いをせずに済みそうです。 > 蛇足ながらSQL Injectionには気をつけて。 本件社内LANで共有するだけのデータベースなので 今回に限っては大丈夫だと思います。 とはいえ、これも言葉の意味すら知らず、調べて勉強になりました。

関連するQ&A

  • 日付を操作したい

    フォームで入力された日付に 10日を足して表示させたいと思っています。 2007/12/20と入力すると 2007/12/2010と表示されます。 2007/12/30と表示されるのはどうしたらいいのでしょうか。 よろしくおねがいします。 ***********1.htm********** <form> <input name="hiduke" file" type="text"> </form> ***********2.asp********** hiduke = Request.Form("hiduke") hiduke2 = hiduke + "10" Response.Write ("<p>" & hiduke2 & "</p>") ***********結果*********** 2007/12/2010

  • 複数条件での検索について教えてください

    PHPとMySQLで構築するという内容の参考書2冊を読んだ程度の知識レベルです。しばらくPHPと離れていたので、さらに退化しているかもしれません。。。 環境はWindowsXP、PHP4.3.2.2です。 ぜひ、皆さんの知恵をお借りできればと思い、質問をさせていただきます。 DBには  発売日(outday) お菓子名(name) 発売店(shop) などが入っております。 発売日やお菓子名、発売店など1つ~3つの条件で検索することが目的です。 例えば、お菓子名のみの検索をしようとして、 HTMLフォーム <INPUT size="44" type="text" name="name" maxlength="100"> ↑に検索したいお菓子名を記入して、 $sql="select * from okashi where (name like '%$name%') order by outday; ↑でnameのデータを受けとって、欲しいお菓子データを取り出すことはできたのですが、 ↓のように <INPUT size="44" type="text" name="shop" maxlength="100">; <INPUT size="44" type="text" name="name" maxlength="100">; フォームを2つ作り $sql = "select * from okashi where (shop like '$%shop%') and (name like '%$name%')by outday; ↑のように2つ以上の検索条件が重なると、 「0件」みつかりました。と検索が出来なくなってしまいます。 検索条件は、検索項目が1つでも2つでも同じ同一です。   本に書いてあるまま、名前を換えて動かしているつもりなのですが、 どこが間違っているか本当に分かりません。 文字制限で全体を載せることができず、はしょってしまいましたが、 わからない点がありましたらおっしゃってください。 お忙しい中恐れ入りますが、ぜひ皆さんのお知恵をお借りしたいのです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • SQL 完全に一致したデータを検索抽出

    SQLのテーブルから完全に一致したデータを抽出するにはどうすればよいでしょうか。 仮に、dayとweatherの2つのカラムでテーブルを作成 <?php /* 検索フォーム */ ?> <form action = "index.php" method="post">           <table> <tbody> <tr> <th>月</th> <th>天気</th> </tr> <tr> <td><input type="text" name="day"></td> <td><input type="text" name="weather"></td> </tr> </tbody> </table> <input type="submit" name="submit" value="検索"> </form> <?php /* 検索 */ ?> <?php ~略~(SQLを呼び出す) $pdo = connect(); $st = $pdo->query("SELECT * FROM table WHERE day LIKE '%" . $_POST["day"] . "%' ); $word = $st->fetchAll(); ?> とします。 カラム「day」の中に「2」「12」「25」のデータが入っていたとします。 この場合、検索フォームで「2」と入力して検索すると 「2」「12」「25」全てのデータが抽出されます。 そうではなく、「2」のデータだけが抽出されるにはどうしたらよいでしょうか? 検索フォームを作る時は、上記のLIKEを使ったものしか知らないので、困っております。 何卒よろしくお願いします。

    • ベストアンサー
    • MySQL
  • phpの日付検索方法

    ざっくりとした書き方になりますが失礼します。 検索条件の項目に日付の検索をしたいと考えています。 開始日付と終了日付をinput typeのtextで用意し入力された日付 の範囲内にあるデータをSQLで抽出したいのですが。 日付自体のフォーマットはどのような形で統一した方が検索しやすいでしょうか? それに合わせてtextでも何か制限みたいなのをかけれたら良いのですが。 現在テーブルのその日付データもtextの入力される日付データもフォーマットが 決まっていないので日付検索が作りやすいフォーマットにしたいと思っています。 また、どちらかの日付だけ入力する場合も考えられると思うので両方入力していないと 使えないBETWEENとかは使わずに ANDの方が良いかなと思っています。 1.使いやすいフォーマット 2.1.に関連したtextエリアでの入力制限方法 3.それらを使った実際の参考例のSQL文 上記3つについて良い方法がございましたらご教授願いますでしょうか?

    • ベストアンサー
    • MySQL
  • phpとmysqlで「あいまい検索」をしたいです。

    phpとmysqlで「あいまい検索」をしようと思い、下記サイトを参考にしましたが、 http://d.hatena.ne.jp/akihito_sado/20120602/p1 PDOを使ってlikeデータを抜き出したい場合、bindParamを使うらしいですが、 http://rasukaru55.sitemix.jp/or_kensaku.php 下記の場合どう書き直すべきでしょうか? 打ち方が悪いのか、うまく作動しません。 教えてください。 ※bindParamを使えばSQLインジェクション対策になっていると言う事でしょうか? <html> <head></head> <body> <?php //POST送信されたデータを$text1へ $text1 =@$_POST["text1"]; //SQL(テーブルから列を抽出する $sql ="SELECT 列名 FROM 表名 "; //キーワードが入力されているときはwhere以下を組み立てる if (strlen($text1)>0){ //受け取ったキーワードの全角スペースを半角スペースに変換する $text2 = str_replace(" ", " ", $text1); //キーワードを空白で分割する $array = explode(" ",$text2); //分割された個々のキーワードをSQLの条件where句に反映する $where = "WHERE "; for($i = 0; $i <count($array);$i++){ $where .= "(列名 LIKE '%$array[$i]%')"; if ($i <count($array) -1){ $where .= " AND "; } } //別カラムも同じ検索したい $where2 = " OR "; for($i = 0; $i <count($array);$i++){ $where2 .= "(2列名 LIKE '%$array[$i]%')"; if ($i <count($array) -1){ $where2 .= " AND "; } } } ?> <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> <table> <tr> <td><input type="text" name="text1"></td> <td><input type="submit" value="検索" name="sub1"></td> </tr> </table> </form> <?php //組み立てたSQL分を表示する echo "<p>組み立てたSQL分: ".$sql.@$where.@$where2; ?> </body> </html>

    • ベストアンサー
    • PHP
  • 複数のフォームから送信

    複数のフォームからtextの値を送信したいのですができますか?〒番号を入力して検索ボタンをおすと住所がでてきて最後に登録をしたいです。検索だけのプログラムはできてますがフォームを二つにすると両方のsubmitが登録になります・・・ 一応自分でいろいろためしましたがだめでした。。。 html,php,javascriptです。 二つともだめでした。。。。 rei1.php ------------------------- <html> <body <form method="POST" action="1.php"> お名前:<input type="text" name="name"> <br> <br> <form method="POST" action="yubin.php"> 〒:<input type="text" name="yubin"> <input type="submit" value="検索"> <br> 住所:<input type="text" name="zyu"> <br> </form> メールアドレス:<input type="text" name="email"> <br> <input type="submit" value="登録する"> </form> </body> </html> -------------------------------------- rei2.php -------------------------------------- <html> <head> <script language="javascript"><!-- function send() { document.nform.submit(); document.nform2.submit(); document.nform3.submit(); } //--></script> </head> <body> <form name="nform" method="POST" action="1.php"> お名前:<input type="text" name="name"> <br> </form> <form name="nform2" method="POST" action="yubin.php"> 〒:<input type="text" name="yubin"> <input type="submit" value="検索"> <br> 住所:<input type="text" name="zyu"> <br> </form> <form name="nform3" method="POST" action="1.php"> メールアドレス:<input type="text" name="email"> <br> <input type="submit" value="登録する"> </form> </body> </html> ------------------------------------

  • phpでmysqlに接続してデータを登録

    入力フォームをhtmlに作って それをidとpassを入力して それをmysqlに登録したいのですが うまくできません <html> <head> <meta http-equiv="Content-Type"content="text/html;charset="utf-8"/> <title>登録</title> </head> <body> <form action="touroku.php"method="post"> 登録id :<br /> <input type="text"name="id"size="10"value="" /><br /> パス:<br /> <input type="text"name="pass"size="10"value="" /><br /> <br /> <input type="submit"value="登録する" /> </form> </body> </html> という感じに 入力フォームは作ったのですが それからそれをmysqlにどうやって登録をするのかわかりません 詳しく解説されてわかりやすいサイトなどを教えてください もしくは教えてください

  • 値の引渡し

    変数の受け渡しがうまくいかない・・ 助言お願いします。 【入力フォーム1】 <form action="confirm.php" method="post" target="_brank"> <input type="submit" name="which" value="A"> <input type="submit" name="which" value="B"> </form> 上の入力フォームから送信されてきたデータを 表示しながら次の入力フォームでデータを確認画面へとばす その際に【入力フォーム1】で入力された which と 日付関数 $now = date(Y) . date(m) . date(d). ":" . $count をCSVデータにおとしていく 【入力フォーム2】 // 日付関数 $now = date(Y) . date(m) . date(d). ":" . $count; // csvデータへ落とす値↓ $buf = "$now,$which\r\n"; import_request_variables("gP","" ); session_cache_limiter('private'); session_start(); $_SESSION['pageData'] = $_POST['which']; <html> <head> </head> <body> <form method="post" action="check.php"> <input type="hidden" name="submitflg" value="$submitflg"> <input type="hidden" name="name1" value="$name1"> //======================================================================== // ココ↓で次ページへ$nowの値を引き渡すことができなくて困ってます。 <input type="hidden" name="now" value="$now"> //======================================================================== <input type="hidden" name="which" value="<?=$_POST['which']?>"> ありがとうございます! ■さっき入力された値は:<br> <? echo $_SESSION['pageData'];?><br> ■ペンネーム <input type="text" name="name1"> </form> </body> </html>

    • ベストアンサー
    • PHP
  • 簡単な検索エンジンの作り方

    <form id="form1" name="form1" method="post" action="lab.php"> <label for="textfield">しょうゆ検索エンジン<br /> </label> <input type="text" name="lab" value=""/> <input type="submit" name="button" id="button" value="検索" /> </form><br> <form id="form1" name="form1" method="post" action="lab.php"> <label for="textfield">成分エンジン<br /> </label> <input type="text" name="lab" value="" /> <input type="submit" name="button" id="button" value="検索" /> </form> このようなフォーム内に、例えば醤油検索エンジンに「キッコーマン 山さ」と入力したらsyouカラムから該当するデータを取り出し表示するにはどうしたら良いでしょうか? フォームに「キッコーマン 山さ ヤマキ」 と入力したら ※3件あります 醤油:キッコーマン 成分:大豆、油 醤油:山さ 成分:大豆、塩 醤油:ヤマキ 成分:醤油 と表示したいです。簡単だろうと考えては見た物の、残念ながら解決に至らず質問した次第であります。よろしく願います。 あと、莫大な量を登録したいのでnum_rowsなどで syounum=array("キッコーマン","山さ","ヤマキ") 等とphpに記述するのは避けたいです。よろしく願います。

    • ベストアンサー
    • PHP
  • PHPでの検索

    初心者です。 ネットもさがしてみたのですが下記の意味がイマイアチわかりません。 <form name="form2" action="search.php" method="post"> <input type="text" name="keyword" size="25" value="<?= $keyword ?>"> <input type="submit" name="search" value="検索"><br /> <input type="radio" checked name="searchSelect" value="AND">AND  <input type="radio" <?= ($searchSelect == "OR")? "checked" : "" ?> name="searchSelect" value="OR">OR </form> (1)<form name="form2" action="search.php" method="post"> 検索ボタンを押すと「action="search.php"」が起動します。  どういう仕組みなのでしょうか。 (2) <input type="text" name="keyword" size="25" value="<?= $keyword ?>">  作者の説明で、  『前の画面でテキストボックスに入力した値を、デフォルトで表示しています。  <input type="text" name="keyword" size="25" value="<?= $keyword ?>">』  となっていますが、value="<?= $keyword ?>"でなぜそうなるのでしょうか。  また、<?= $keyword ?>の<?= ?>構文はどのような機能があるのでしょうか。 (3)<input type="radio" checked name="searchSelect" value="AND">AND  「value="AND">AND」の右側の「AND]はどういう意味でしょうか。 (4)<input type="radio" <?= ($searchSelect == "OR")? "checked" : "" ?> name="searchSelect" value="OR">OR  作者の説明で、  『(6)前の画面でORラジオボタンが選択されていた場合は、選択(checked)します。  <input type="radio" <?= ($searchSelect == "OR")? "checked" : "" ?> name="searchSelect"  value="OR">OR』  とありますが、<?= ($searchSelect == "OR")? "checked" : "" ?>でなぜそういうことができているのでしょうか。  また、『"checked" : 』の『:』は何の役目をしているのでしょうか。 上記4つの質問でどれでもいいですのでどなたかお教え願えないでしょうか。

    • 締切済み
    • PHP

専門家に質問してみよう