2016-11-08 16 views
0

私はここで似たような質問を見つけましたが、ほとんどのソリューションは私にとってはうまくいきません。私は「jquery UI date picker」というフォームを持っており、与えられた日付に検索結果を得たいと思っています。私は日付形式を変更しようとしましたが、結果は返されません。クエリに選択した日付の値を渡す

検索フォーム -

<div class="form-group row"> 
    <label for="duration" class="col-sm-4 col-form-label"> 
    <input type="checkbox" name="search2" value="checkbox" id="duration" class="search2"> Duration</label> 
    <div class="col-sm-4"> 
    <input type="date" class="form-control input-sm data2" name="data1" id="startdate" placeholder="Start Date" disabled="disabled"> 
    </div> 
    <div class="col-sm-4"> 
    <input type="date" class="form-control input-sm data2" name="data2" id="enddate" placeholder="End Date" disabled="disabled"> 
    </div> 
    </div> 

検索Query-

$sql = "SELECT * FROM reservation 
    INNER JOIN package ON reservation.tid = package.tid 
    INNER JOIN reservation_type ON reservation.type = reservation_type.id 
    INNER JOIN customer ON reservation.cid = customer.cid 
    INNER JOIN reservation_status ON reservation.status = reservation_status.id  
    WHERE " ; 
    if(isset($_POST['search2'])){ $start_date = date('Y-m-d', strtotime($_POST['data1'])); $sql .= " start_date = $start_date AND" ; } 
    if(isset($_POST['search2'])){ $end_date = date('Y-m-d', strtotime($_POST['data2'])); $sql .= " end_date = $end_date AND" ; } 
    if(isset($_POST['search'])){ $rid = mysqli_real_escape_string($db, $_POST['data']); $sql .= " rid = $rid AND" ; } 
    if(isset($_POST['search3'])){ $cid = mysqli_real_escape_string($db, $_POST['data3']); $sql .= " reservation.cid = $cid AND" ; } 
    if(isset($_POST['search5'])){ $tid = mysqli_real_escape_string($db, $_POST['data5']); $sql .= " reservation.tid = $tid AND" ; } 
    if(isset($_POST['search6'])){ $type = mysqli_real_escape_string($db, $_POST['data6']); $sql .= " reservation.type = $type AND" ; } 
    if(isset($_POST['search4'])){ $status = mysqli_real_escape_string($db, $_POST['data4']); $sql .= " status = $status AND" ; }  

    $sql = rtrim($sql, "AND") ; 


    $result = mysqli_query($db, $sql)or die("Error: ".mysqli_error($db)); 
    $num_rows = mysqli_num_rows($result); 
    if($num_rows >0){ 
    while ($row = mysqli_fetch_assoc($result)) { 
    ?> 
<tr align="center"> 
<td><?php echo $row["start_date"]; ?></td> 
<td><?php echo $row["end_date"]; ?></td> 

チェックボックスセレクション

$(".search2").on('click', function() { 
if($(this).is(':checked')){ 
    $(".data2").prop('disabled',false); 
} else { 
    $(".data2").prop('disabled',true); 
} 
}) 

JqueryUI-

$(function() { 
          var dateFormat = "yy-mm-dd", 
           startdate = $("#startdate") 
           .datepicker({defaultDate: "+1w",changeMonth: true, numberOfMonths: 1}) 
           .on("change", function() {enddate.datepicker("option", "minDate", getDate(this));}), 
           enddate = $("#enddate") 
           .datepicker({defaultDate: "+1w",changeMonth: true,numberOfMonths: 1}) 
           .on("change", function() {startdate.datepicker("option", "maxDate", getDate(this));}); 

          function getDate(element) { 
           var date; 
           try { 
           date = $.datepicker.parseDate(dateFormat, element.value); 
           } catch(error) { 
           date = null; 
           } 
           return date; 
          } 
          }); 

       $('#startdate').datepicker({dateFormat: 'yy-mm-dd'}); 
       $('#enddate').datepicker({dateFormat: 'yy-mm-dd'}); 

クエリ(下の画像のような)他のckeckingsと正常に動作し、日付の Search Result 1

でもない、 Search Result 2

私は学生やコーディングに新しいです。どんな助けもありがとう!ありがとうございました。クエリで

+0

コードの改善だけに留意してください。具体的には、最後の 'isset()'コマンドに 'AND'を追加して、次の行で 'rtrim'関数で削除します。 'implode'を使って配列を文字列に変換する方法を見てみましょう。それはあなたの人生を楽にします。 – RST

+0

あなたが言ったことに取り組んでいます..ありがとう、本当にあなたのアドバイスに感謝します。 –

答えて

0

、値のための単一引用符を置く: 例:Rijinはすでに答えとして

$sql .= " start_date = '$start_date' AND" ;

+0

ああ私は愚かな私はそれが働いた。どうもありがとう。 –

0

、あなたは日付の引用符が欠落しています。しかし、コーディングに慣れていないことを示したので、SQLクエリを作成するのではなく、準備済みのステートメントの使用に慣れておくことを強くお勧めします。それはこのようにあなたのコードをビルドすると良いでしょう:

$sql = "SELECT * FROM reservation 
    INNER JOIN package ON reservation.tid = package.tid 
    INNER JOIN reservation_type ON reservation.type = reservation_type.id 
    INNER JOIN customer ON reservation.cid = customer.cid 
    INNER JOIN reservation_status ON reservation.status = reservation_status.id"; 

$where = []; 

if(isset($_POST['search2'])){ 
    $start_date = date('Y-m-d', strtotime($_POST['data1'])); 
    $where["start_date = ?"] = $start_date; 

    $end_date = date('Y-m-d', strtotime($_POST['data2'])); 
    $where["end_date = ?"] = $end_date; 
} 
if(isset($_POST['search'])){ 
    $rid = mysqli_real_escape_string($db, $_POST['data']); 
    $where["rid = ?"] = $rid; 
} 

if(!empty($where)) { 
    $sql .= ' WHERE ' . implode(' AND ',array_keys($where)); 
} 


$stmt = $db->prepare($sql); 
if(!$stmt) { 
    trigger_error('An error occured: (' . $db->errno . ', ' . $db->error . '), sql: ' . $sql, E_USER_ERROR); 
} 

foreach($where as $value) { 
    /* Bind parameters. Types: s = string, i = integer, d = double, b = blob */ 
    $stmt->bind_param('s', $value); 
} 

$stmt->execute(); 

を使用する必要がありますなぜ、どのように準備された文の詳細については、How can I prevent SQL injection in PHP?を参照してください。

+0

ありがとうございました。私は本当にあなたの助言に感謝します。 –

関連する問題