2017-08-26 76 views
0

我想使用PHP和ajax調用函數從我的數據庫中選擇數據。 在select函數中,我使用了textbox中的$ _POST。我在我的頁面上創建了一個PHP和ajax調用函數,但有些錯誤。我使用isset[]來檢查我從textbox獲得的$_POST數據。我在那裏使用if條件 - 當$_POST爲空時,它將選擇所有沒有where子句的數據,並且當特定的$_POST有值時,它將選擇數據a where子句。

這裏的問題是,當我使用我的textbox中的數據將字符串呈現給我的PHP $_POST時,我的PHP中的else條件無法運行。

這是我的代碼,我使用:

的JavaScript/jQuery的

$(document).ready(function(e) { 
    var data = $("#report_all").serialize(); 

    $('#all_report thead').empty(); 
    $('#all_report tbody').empty(); 
    $.ajax({ 
     data: data, 
     type: "Post", 
     url: "../php/report/report_all_wjm.php", 
     success: function(data){ 
      var list = JSON.parse(data); 
      var th = ""; 

      th += "<th>"+"<center>"+'No'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'Storage Location'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'Kode Material'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'Nama Material'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'No.Polisi'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'Id Identifier'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'Date'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'Netto'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'Uses'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'Unit'+"</center>"+"</th>"; 
      th += "<th>"+"<center>"+'Payroll'+"</center>"+"</th>"; 

      th += "</th>"; 

      $("#all_report thead").append(th); 
      for(var i = 0; i < list.length; i++){ 

       var tr = "<tr>"; 

       tr += "<td>" +(i+1)+"</td>"; 
       tr += "<td>" +list[i]['sloc']+"</td>"; 
       tr += "<td>" +list[i]['kode']+"</td>"; 
       tr += "<td>" +list[i]['nama']+"</td>"; 
       tr += "<td>" +list[i]['no_pol']+"</td>"; 
       tr += "<td>" +list[i]['id']+"</td>"; 
       tr += "<td>" +list[i]['date']+"</td>"; 
       tr += "<td>" +list[i]['netto']+"</td>"; 
       tr += "<td>" +list[i]['uses']+"</td>"; 
       tr += "<td>" +list[i]['unit']+"</td>"; 
       tr += "<td>" +list[i]['payroll']+"</td>"; 

       tr += "</tr>"; 

       $("#all_report tbody").append(tr); 
       $("#all_report").show(); 
      } 
      return false; 
     } 

    }); 
}); 

PHP

<?php 
include("../../Connections/koneksi.php"); 

$date_awal=$_POST['date_start']; 
$date_akhir=$_POST['date_end']; 
$kode=$_POST['kode_mat']; 
$kode1=$_POST['kode_mat1']; 
$sloc=$_POST['s_loc']; 
$sloc1=$_POST['s_loc1']; 
$type=$_POST['get_type']; 
//Display all data 
if (isset($date_awal) == "" || isset($date_akhir) == "" || isset($sloc)== "" || isset($sloc1)== "" || isset($kode)== "" || isset($kode1)== "" || isset($type)== ""){ 
    $sql = "SELECT * FROM wjm ORDER by no asc"; 
    $query = mysqli_query($db,$sql); 
    $rows = array(); 

    while($tmp= mysqli_fetch_assoc($query)) { 
     $rows[] = $tmp; 
    } 
} 
//Display all data by one date 
else { 
    // Data for Titik1 
    $sql = "SELECT * FROM wjm WHERE date='$date_awal' order by kode asc "; 
    $query = mysqli_query($db,$sql); 
    $rows = array(); 

    while($tmp= mysqli_fetch_assoc($query)) { 
     $rows[] = $tmp; 
    } 

    echo json_encode($rows); 
} 

mysqli_close($db); 
?> 
+1

您的代碼易受[** SQL注入**](https://en.wikipedia.org/wiki/SQL_injection)攻擊。您應該通過[** mysqli **](https://secure.php.net/manual/en/mysqli.prepare.php)或[** PDO **](https ://secure.php.net/manual/en/pdo.prepared-statements.php)驅動程序。 [**這篇文章**](https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php)有一些很好的例子。 –

+0

@AlexHowansky嗯..讓我問一些問題。是類似於'$ stmt-> execute'的任何語法,我不知道如何使用' - >'這個語法。我試着用' - >'來使用語法,並且在那裏出現錯誤 –

+0

我發現初學者被掛在PHP對象或PHP OOP上真的很奇怪,但他們很樂意在JavaScript中整天使用它。 –

回答

0

如果要添加WHERE子句時,纔會有變量$ date_awal一定的價值(即$ _POST ['date_start'])然後我會說要檢查它是否條件&其他部分應該在其他部分去.. 也可以保留mysqli_query &在循環條件之外循環,因爲在這兩種情況下這些部分是相同的。

$rows = array(); 

if(date_awal != ''){ 
$sql = "SELECT * FROM wjm WHERE date='$date_awal' order by kode asc "; 
}else{ 
$sql = "SELECT * FROM wjm ORDER by no asc"; 
} 

$query = mysqli_query($db,$sql); 

while($tmp= mysqli_fetch_assoc($query)) { 
    $rows[] = $tmp; 
} 

echo json_encode($rows); 
+0

不錯,這是我想要的。 thx AJM 順便說一句你能解釋給我嗎? 'date_awal!='''含義的值是'$ date_awal'吧? –

+0

我已經嘗試類似Anil說的答案,但我仍然得到所有選擇的價值 –

+0

我想知道'date_awal!='''函數。 ,因爲我想再嵌入一個條件。我試過它,但我不能捕捉這個'else if'中的函數。 –

0

變量,您不能檢查isset。而不是做這樣的

if ($date_awal == "" || $date_akhir == "" || $sloc == "" || $sloc1 == "" || $kode == "" || $kode1 == "" || $type == ""){ 

}else{ 

} 
+0

我已嘗試您的代碼。和我的其他功能中的代碼不起作用。 –

+0

然後你的一個變量是空的 –

+0

我認爲你想要做&&而不是|| –

0

isset()返回一個布爾值,但你比較它與一個字符串,因此這並沒有太大的意義:

if (isset($date_awal) == "") { ... } 

應該像這樣使用:

if (isset($date_awal)) { ... } 

但是,您可能要使用empty()而不是isset()。如果一個變量存在並且包含一個空字符串,則isset()仍然會返回true,這可能不是您想要的。你可能希望這樣的:

if (!empty($date_awal) || !empty(...) || !empty(...) ...) { 
} 

注:

$foo = ''; 
var_dump(isset($foo)); 
var_dump(empty($foo)); 

輸出:

bool(true) 
bool(true)