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

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

ただいまの
回答率

90.76%

  • PHP

    19196questions

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

  • SQLite

    580questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

検索結果ページのnullの場合の条件分岐について

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 562

mika160625

score 32

勤務地等何かを選択すると、
検索結果が表示されるのですが、全件表示がうまくいきません。

問題:何も選択せずに検索ボタンを押すと、
0件と表示される。

試した方法
●$_POSTが空の場合とそうじゃない場合のif文
if ( $_POST !=="" ){
●$_POSTがnullの場合とそうじゃない場合のif文
if ( $_POST ==null ){
●$_POSTがFALSEの場合とそうじゃない場合のif文
if ( $_POST ==FALSE ){

問題が発生しているソース:

if ( $_POST !=="" ){
 $sql = 'SELECT '.
' kyujin.id,   jikyu, work_type, gyoukai, keisai_start, keisai_end,  job_type.job_type, area.area'.
' FROM kyujin LEFT JOIN job_type '.
' ON kyujin.job_type=job_type.id '.
' LEFT JOIN area  '.
' ON  kyujin.area = area.id '.
' where kyujin.area = ? AND ( kyujin.job_type=? OR jikyu>=? OR work_type=? OR gyoukai=?)';
}
if ( $_POST =="" ){
$sql = 'select * from kyujin';
}

◆実現したいこと、
何も選択せずに、検索ボタンを押した際に、
全ての求人検索結果が表示されるようにしたい。

下記は、全文となります。

<html lang="ja">
<head>
<meta charset="utf-8">
</head>
<body>
<?php
require_once "../common_function.php";

try{

   $pdo = new PDO('sqlite:../haken.db'); 


$todofuken = $_POST["todofuken1"];

  //職種
$syokushu = $_POST["SHOKUSHU_CD"];

  //時給
$jikyu = $_POST["PAY_START"];

  //フリーキーワード
$keyword = $_POST["FREE_KEYWORD"];

  //働き方
$tokucyo = $_POST["TOKUCYO"];

  //業界
$gyoukai = $_POST["GYOUKAI"];


if ( $_POST !=="" ){
 $sql = 'SELECT '.
' kyujin.id,   jikyu, work_type, gyoukai, keisai_start, keisai_end,  job_type.job_type, area.area'.
' FROM kyujin LEFT JOIN job_type '.
' ON kyujin.job_type=job_type.id '.
' LEFT JOIN area  '.
' ON  kyujin.area = area.id '.
' where kyujin.area = ? AND ( kyujin.job_type=? OR jikyu>=? OR work_type=? OR gyoukai=?)';
}
if ( $_POST =="" ){
$sql = 'select * from kyujin';
}


  //  $sql= 'select * from kyujin where jikyu=?';
       // sqlの準備 
  $stmt = $pdo -> prepare($sql);
  //データを?に入れることをbindという bindは危険なコードを無害化する
  $stmt->bindParam(1, $todofuken , PDO::PARAM_INT);
  $stmt->bindParam(2, $syokushu[0] , PDO::PARAM_INT);
  $stmt->bindParam(3, $jikyu , PDO::PARAM_INT);
  $stmt->bindParam(4, $tokucyo , PDO::PARAM_STR);
  $stmt->bindParam(5, $gyoukai , PDO::PARAM_STR);
  $stmt->execute();
  $result = $stmt->fetchAll();


  // $resultは配列の配列
  // fetchallは


 echo '<html lang="ja">';
 echo '<head><meta charset="utf-8"></head>';    
 echo '<body><div class="kensaku table_block">';
 echo '<h2 class="center">検索結果は'.count($result).'件です。</h2>';
    // $valueは配列
  // $keyと$valueは空のものを使用する
     foreach ($result as $key => $value ) {
echo '<table>'; 
echo '<tr><th>職種</th><td>'; 
          hyouji( $value['job_type']);
echo '</td></tr>';
echo '<tr><th>時給</th><td>'; 
          hyouji($value['jikyu']);
 echo '</td></tr>';
       echo '<tr><th>業界</th><td>'; 
          hyouji( $value['gyoukai']);
echo '</td></tr>';
echo '<tr><th>勤務地</th><td>'; 
          hyouji( $value['area']);
echo '</td></tr>'; 
echo '</table>';
    }

echo '</div>';  
 echo '</body>';
 echo '</html>';
//     // 実際に入れたいデータを配列に格納する 
//   $bind = array('オフィスワーク','アパレル',1100);

//   $bind[1]; ➡アパレル

/*    $bind = array();
    $bind[0] = 'オフィスワーク';
    $bind[1] = 'アパレル';
    $bind[2] = '1200';*/

    // pdoのprepareメソッドに引数としてsqlを渡す
   /* $stmt = $pdo->prepare($sql);*/

    // $job_type = '電気';
    // $gyoukai = 'メーカー';
    // $jikyu = 2600;

    //   $jikyu = 1300;
    //   $id = 4;

   /* $stmt->bindParam(1, $jikyu, PDO::PARAM_INT); //文字列型PDO::PARAM_STR
    $stmt->bindParam(2, $id, PDO::PARAM_INT);*/
    // $stmt->bindParam(3, $jikyu, PDO::PARAM_INT);

    // stmtオブジェクトにデータを渡す execueは実行という意味
/*    $stmt->execute();
    $result = $stmt->fetchAll();

    // 
      foreach ($result as $key => $value ) {
          hyouji( $value['id'] . "職種:". $value['job_type']  . "時給:". $value['jikyu']
            . "業界:". $value['gyouka']);
    }


   hyouji('データを表示する');*/

} catch(Exception $e){
    // エラーが発生したら即座にこのブロックに移る
    echo $e->getMessage() . "<br>\n";
    // 'ただの文字列' "改行とか/n 変数とか解釈される"
}





?>

</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Kosuke_Shibuya

    2017/10/15 23:10

    SQLだけ見せられても回答できません。テーブルの定義や、サンプルデータを提示してください。

    キャンセル

  • mts10806

    2017/10/20 06:50

    回答者の回答をヒントに自分できちんと考えてやっていかないといつまでたっても解決しないように思います。

    キャンセル

回答 2

checkベストアンサー

+3

ANDとORが複雑にからむ検索は条件をよく考えて設計して下さい
ざっと見てみましたがこんな感じになるかと思います。

$todofuken1=filter_input(INPUT_POST,"todofuken1");
$job_type=filter_input(INPUT_POST,"SHOKUSHU_CD",FILTER_DEFAULT,["options"=>["default"=>[]],"flags"=>FILTER_REQUIRE_ARRAY]);
$jikyu=filter_input(INPUT_POST,"PAY_START",FILTER_VALIDATE_INT);
$work_type=filter_input(INPUT_POST,"TOKUCYO",FILTER_DEFAULT,["options"=>["default"=>[]],"flags"=>FILTER_REQUIRE_ARRAY]);
$gyoukai=filter_input(INPUT_POST,"GYOUKAI",FILTER_DEFAULT,["options"=>["default"=>[]],"flags"=>FILTER_REQUIRE_ARRAY]);

$data=[];


$sql ="SELECT * ";
$sql.=" FROM kyujin ";
$sql.="LEFT JOIN job_type ";
$sql.=" ON kyujin.job_type=job_type.id ";
$sql.=" LEFT JOIN area  ";
$sql.=" ON  kyujin.area = area.id ";
$sql.=" where 1 ";

$flg[0]=(!is_null($todofuken1) and $todofuken1!=="");
$flg[1]=count($job_type)>0;
$flg[2]=$jikyu>0;
$flg[3]=count($work_type)>0;
$flg[4]=count($gyoukai)>0;

if($flg[0]){
  $sql.="AND kyujin.area = ? ";
  $data[]=$todofuken1;
}
if($flg[1] or $flg[2] or $flg[3] or $flg[4]){
  $sql.="AND ( 0 ";
  if($flg[1]){
    $sql.="OR kyujin.job_type IN (".implode(",",array_fill(0,count($job_type),"?")).") ";
    $data=array_merge($data,$job_type);
  }
  if($flg[2]){
    $sql.="OR jikyu>=? ";
    $data[]=$jikyu;
  }
  if($flg[3]){
    $sql.="OR work_type IN (".implode(",",array_fill(0,count($work_type),"?")).") ";
    $data=array_merge($data,$work_type); /*記載ミス訂正*/
  }
  if($flg[4]){
    $sql.="OR gyoukai IN (".implode(",",array_fill(0,count($gyoukai),"?")).") ";
    $data=array_merge($data,$gyoukai); /*記載ミス訂正*/
  }
  $sql.=") ";
}

if(!in_array(true,$flg)){
  $sql.="AND 0 ";
}

print $sql;
print "<hr>";
print_r($data);
/*
  $stmt = $pdo->prepare($sql);
  $stmt->execute([]);
*/
<form method="POST">
<table>
<tbody>
<tr>
<th>勤務地を指定</th>
<td>
<select name="todofuken1" id="todofuken1">
<option value="">都道府県を選択</option>
<option value="13">東京都</option>
<option value="14">神奈川県</option>
<option value="15">埼玉県</option>
<option value="16">千葉県</option>
</select>
</td>
</tr>
<tr><th>職種を指定</th>
<td>
<div class="three_line clear">
<input type="checkbox" name="SHOKUSHU_CD[]" value="1" id="shokushuLoop1">
<label for="shokushuLoop1">オフィスワーク・事務</label>
<input type="checkbox" name="SHOKUSHU_CD[]" value="2" id="shokushuLoop2">
<label for="shokushuLoop2">営業・販売・サービス</label>
<input type="checkbox" name="SHOKUSHU_CD[]" value="3" id="shokushuLoop3">
<label for="shokushuLoop3">Web・クリエイティブ</label>
</div>
</td>
</tr>
<tr><th>時給を指定</th>
<td>
<input type="text" class="text_input_s" name="PAY_START" maxlength="8" size="8" value="" style="ime-mode:disabled">&nbsp;円以上?
</td>
</tr>
<tr><th>キーワードを指定</th><td><input type="text" class="text_input_l" name="FREE_KEYWORD" maxlength="30" size="20" value="" style="ime-mode:active" placeholder="キーワードを入力してください。"></td></tr>
<tr>
<th>こだわり条件を指定</th>
<td>
<div class="accordion_block">
<h2 style="background-image: url(&quot;../../img/common/icon_arrow_up01.png&quot;);">働き方・特徴</h2>
<div class="accordion_box three_line clearfix" style="display: block;">
<input type="checkbox" name="TOKUCYO[]" value="紹介予定派遣" id="tokucyoLoop1101"><label for="tokucyoLoop1101">紹介予定派遣</label>
<input type="checkbox" name="TOKUCYO[]" value="1日7時間未満" id="tokucyoLoop1102"><label for="tokucyoLoop1102">1日7時間未満</label>
</div>
</div>
<div class="accordion_block">
<h2 style="background-image: url(&quot;../../img/common/icon_arrow_up01.png&quot;);">業界</h2>
<div class="accordion_box three_line clearfix" style="display: block;">
<input type="checkbox" name="GYOUKAI[]" value="マスコミ関連" id="tokucyoLoop3301"><label for="tokucyoLoop3301">マスコミ関連</label>
<input type="checkbox" name="GYOUKAI[]" value="金融関連" id="tokucyoLoop3302"><label for="tokucyoLoop3302">金融関連</label>
<input type="checkbox" name="GYOUKAI[]" value="流通・サービス関連" id="tokucyoLoop3303"><label for="tokucyoLoop3303">流通・サービス関連</label>
<input type="checkbox" name="GYOUKAI[]" value="IT・Web関連" id="tokucyoLoop3304"><label for="tokucyoLoop3304">IT・Web関連</label>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<p class="center"><input type="submit" value="この条件で検索する"></p>
</form>


※一部記載ミスを訂正しました

 より標準SQLらしく

1や0で処理していたものをvariantに変えました
またINをORの羅列に変えました

※テストのため、以下のソースを適当な名前のphpに保存して実行して下さい

<?PHP
$todofuken1=filter_input(INPUT_POST,"todofuken1");
$job_type=filter_input(INPUT_POST,"SHOKUSHU_CD",FILTER_DEFAULT,["options"=>["default"=>[]],"flags"=>FILTER_REQUIRE_ARRAY]);
$jikyu=filter_input(INPUT_POST,"PAY_START",FILTER_VALIDATE_INT);
$work_type=filter_input(INPUT_POST,"TOKUCYO",FILTER_DEFAULT,["options"=>["default"=>[]],"flags"=>FILTER_REQUIRE_ARRAY]);
$gyoukai=filter_input(INPUT_POST,"GYOUKAI",FILTER_DEFAULT,["options"=>["default"=>[]],"flags"=>FILTER_REQUIRE_ARRAY]);

$data=[];


$sql ="SELECT * ";
$sql.=" FROM kyujin ";
$sql.="LEFT JOIN job_type ";
$sql.=" ON kyujin.job_type=job_type.id ";
$sql.=" LEFT JOIN area  ";
$sql.=" ON  kyujin.area = area.id ";
$sql.=" where true ";

$flg[0]=(!is_null($todofuken1) and $todofuken1!=="");
$flg[1]=count($job_type)>0;
$flg[2]=$jikyu>0;
$flg[3]=count($work_type)>0;
$flg[4]=count($gyoukai)>0;

if($flg[0]){
  $sql.="AND kyujin.area = ? ";
  $data[]=$todofuken1;
}
if($flg[1] or $flg[2] or $flg[3] or $flg[4]){
  $sql.="AND ( false ";
  if($flg[1]){
    foreach($job_type as $val){
      $sql.="OR kyujin.job_type = ? ";
      $data[]=$val;
    }
  }
  if($flg[2]){
    $sql.="OR jikyu>=? ";
    $data[]=$jikyu;
  }
  if($flg[3]){
    foreach($work_type as $val){
      $sql.="OR work_type = ? ";
      $data[]=$val;
    }
  }
  if($flg[4]){
    foreach($gyoukai as $val){
      $sql.="OR gyoukai = ? ";
      $data[]=$val;
    }
  }
  $sql.=") ";
}

if(!in_array(true,$flg)){
  $sql.="AND false ";
}

print $sql;
print "<hr>";
print_r($data);
/*
  $stmt = $pdo->prepare($sql);
  $stmt->execute($data);
*/
?>
<form method="POST">
<table>
<tbody>
<tr>
<th>勤務地を指定</th>
<td>
<select name="todofuken1" id="todofuken1">
<option value="">都道府県を選択</option>
<option value="13">東京都</option>
<option value="14">神奈川県</option>
<option value="15">埼玉県</option>
<option value="16">千葉県</option>
</select>
</td>
</tr>
<tr><th>職種を指定</th>
<td>
<div class="three_line clear">
<input type="checkbox" name="SHOKUSHU_CD[]" value="1" id="shokushuLoop1">
<label for="shokushuLoop1">オフィスワーク・事務</label>
<input type="checkbox" name="SHOKUSHU_CD[]" value="2" id="shokushuLoop2">
<label for="shokushuLoop2">営業・販売・サービス</label>
<input type="checkbox" name="SHOKUSHU_CD[]" value="3" id="shokushuLoop3">
<label for="shokushuLoop3">Web・クリエイティブ</label>
</div>
</td>
</tr>
<tr><th>時給を指定</th>
<td>
<input type="text" class="text_input_s" name="PAY_START" maxlength="8" size="8" value="" style="ime-mode:disabled">&nbsp;円以上?
</td>
</tr>
<tr><th>キーワードを指定</th><td><input type="text" class="text_input_l" name="FREE_KEYWORD" maxlength="30" size="20" value="" style="ime-mode:active" placeholder="キーワードを入力してください。"></td></tr>
<tr>
<th>こだわり条件を指定</th>
<td>
<div class="accordion_block">
<h2 style="background-image: url(&quot;../../img/common/icon_arrow_up01.png&quot;);">働き方・特徴</h2>
<div class="accordion_box three_line clearfix" style="display: block;">
<input type="checkbox" name="TOKUCYO[]" value="紹介予定派遣" id="tokucyoLoop1101"><label for="tokucyoLoop1101">紹介予定派遣</label>
<input type="checkbox" name="TOKUCYO[]" value="1日7時間未満" id="tokucyoLoop1102"><label for="tokucyoLoop1102">1日7時間未満</label>
</div>
</div>
<div class="accordion_block">
<h2 style="background-image: url(&quot;../../img/common/icon_arrow_up01.png&quot;);">業界</h2>
<div class="accordion_box three_line clearfix" style="display: block;">
<input type="checkbox" name="GYOUKAI[]" value="マスコミ関連" id="tokucyoLoop3301"><label for="tokucyoLoop3301">マスコミ関連</label>
<input type="checkbox" name="GYOUKAI[]" value="金融関連" id="tokucyoLoop3302"><label for="tokucyoLoop3302">金融関連</label>
<input type="checkbox" name="GYOUKAI[]" value="流通・サービス関連" id="tokucyoLoop3303"><label for="tokucyoLoop3303">流通・サービス関連</label>
<input type="checkbox" name="GYOUKAI[]" value="IT・Web関連" id="tokucyoLoop3304"><label for="tokucyoLoop3304">IT・Web関連</label>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<p class="center"><input type="submit" value="この条件で検索する"></p>
</form>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/16 12:44

    ありがとうございます。
    こちら、オラクルで書かれていますか?
    すいませんSQLite3を使用しております。

    キャンセル

  • 2017/10/16 12:53

    > こちら、オラクルで書かれていますか?
    > すいませんSQLite3を使用しております。

    失礼しました。カテゴリをちゃんと見てませんでした。
    一応mysqlを前提にした回答でした
    sqliteで動作しませんか?
    1をtrue、0をfalseで書き換えないといけないかもしれません。
    またもしINが利用できないならORで列記する感じになります。
    追記しますので、ちょっとためしてみてください

    キャンセル

  • 2017/10/16 20:31

    ありがとうございます。

    $sql = 箇所に入れてみたところ、
    エラーが表示されました。


    SELECT * FROM kyujin LEFT JOIN job_type ON kyujin.job_type=job_type.id LEFT JOIN area ON kyujin.area = area.id where true AND kyujin.area = ?

    Warning: Invalid argument supplied for foreach() in /home/ubuntu/workspace/jobsearch/db_conect.php on line 165 Call Stack: 6.1029 237944 1. {main}() /home/ubuntu/workspace/jobsearch/db_conect.php:0

    キャンセル

  • 2017/10/16 20:48 編集

    おそらくちゃんとコピペしてないのでは?
    私のソースはとりあえずまだDBに接続するところまでいっていないので
    エラーになる要素がないのですが・・・
    ご自身のソースの一部を切り替えるのではなく私のソースだけで
    動くかどうかをまず確かめて下さい
    (追記部分もコピペするだけでいいように変更しておきます)

    キャンセル

  • 2017/10/16 22:14

    新しくphpファイルを作成し、動作を確認いたしましたが、
    「SELECT FROM kyujin LEFT JOIN job_type ON kyujin.job_type=job_type.id LEFT JOIN area ON kyujin.area = area.id where trueAND false」
    と表示され、検索結果も表示されません、

    https://test170701-mh0926.c9users.io/jobsearch/test.php

    キャンセル

  • 2017/10/16 22:38

    where true AND false
    これは、何も入力や選択しなかったときに何も表示しないための処理ですね
    セレクトボックスを適当に選んだり、チェックボックスを適当にチェックしてサブミットすると
    どうなりますか?

    キャンセル

  • 2017/10/16 23:18

    オフィスワークのチェックボックスを選択すると下記が表示されます。
    SELECT FROM kyujin LEFT JOIN job_type ON kyujin.job_type=job_type.id LEFT JOIN area ON kyujin.area = area.id where trueAND ( false OR kyujin.job_type = ? )

    キャンセル

  • 2017/10/16 23:30

    選択や入力によって想定したSQL文が作成されていることがわかりますか?
    これに対してPDOを利用して

    $stmt = $pdo->prepare($sql);
    $stmt->execute($data);

    のような処理をしてください

    キャンセル

  • 2017/10/17 08:41

    追加した箇所がエラーとなり、表示されました。

    Array ( ) Fatal error: Call to a member function prepare() on a non-object in /home/ubuntu/workspace/jobsearch/index.php on line 67 Call Stack: 5.1615 234208 1. {main}() /home/ubuntu/workspace/jobsearch/index.php:0

    キャンセル

  • 2017/10/17 12:49

    そもそもpdoでsqliteへ接続する設定はできているのでしょうか?

    キャンセル

  • 2017/10/17 20:17

    こちらででたデータベースへ接続しています。
    $pdo = new PDO('sqlite:../haken.db');

    キャンセル

+2

何も選択しない=何も入力してない=入力コントロールは初期値
ってことですよね。

今のソースコードのままでは、例えば
kyujin.area = ? は
kyujin.area = '' 
と変換され、「空文字となっている情報を検索」していることになります。
(他の検索条件も同様)
結果、空文字となっている情報がDB上に存在しないから「0件」という結果となっているのだと思います。

「何か入力・選択されていればwhere条件にセットする」という風に変更してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/16 07:33

    ありがとうございます。is not nullといれてみたのですが、全件表示も、選択した検索結果もされなくなりました、
    $sql = 'SELECT '.
    ' kyujin.id, jikyu, work_type, gyoukai, keisai_start, keisai_end, job_type.job_type, area.area'.
    ' FROM kyujin LEFT JOIN job_type '.
    ' ON kyujin.job_type=job_type.id '.
    ' LEFT JOIN area '.
    ' ON kyujin.area = area.id '.
    ' where kyujin.area is not null AND ( kyujin.job_type is not null OR jikyu>=? OR work_type is not null OR gyoukai is not null )';

    キャンセル

  • 2017/10/16 07:46

    そうじゃないです。。。
    例えば、

    $where = [];
    $todofuken = null;
    if(($_POST["todofuken1"]) != "" ){
    $where[] = " kyujin.area = ? ";
    $todofuken = $_POST["todofuken1"];
    }

    ・・・・
    if(count($where) > 0){
    $sql.= " where ".implode(" and ",$where);
    }

    if(!is_null($todofuken)){
    $stmt->bindParam(1, $todofuken , PDO::PARAM_INT);
    }
    ・・・

    のようにしてSQL文とbindParam自体を動的にする必要があるということです。
    「入力されている情報のみwhere条件としてSQLにセットする」ということです。
    もちろん、todofuken1・kyujin.areaに限らず全ての条件で同様に対応してください。
    bindParamの番号は固定では対応できないのでそこは動的になるように調整してみてください。

    キャンセル

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

  • ただいまの回答率 90.76%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • PHP

    19196questions

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

  • SQLite

    580questions

    SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。