2017-08-26 2 views
0

Je veux sélectionner les données de ma base de données en utilisant la fonction d'appel PHP et ajax. Dans la fonction select, j'utilise $ _POST à ​​partir d'un textbox. J'ai fait une fonction d'appel PHP et ajax sur ma page mais quelque chose ne va pas. J'utilise isset[] pour vérifier les données $_POST que je reçois de mon textbox. J'utilise une condition if là - lorsque le $_POST est vide, il sélectionne toutes les données sans une clause where, et quand un $_POST a une valeur, il va sélectionner les données avec une clause where.

Le problème ici est que lorsque j'utilise des données dans mon textbox pour rendre une chaîne à mon PHP $_POST, la condition else sur mon PHP ne s'exécute pas.

Ceci est mon code que j'utilise:

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

Votre code est vulnérable aux attaques [** injection SQL **] (https://en.wikipedia.org/wiki/SQL_injection). Vous devez utiliser des instructions préparées avec des paramètres liés, via [** mysqli **] (https://secure.php.net/manual/fr/mysqli.prepare.php) ou [** PDO **] (https : //secure.php.net/manual/fr/pdo.prepared-statements.php) pilotes. [** Cet article **] (https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) a de bons exemples. –

+0

@AlexHowansky hmmm .. laissez-moi demander quelque chose. est une syntaxe similaire à ce '$ stmt-> execute' je ne sais pas comment utiliser' -> 'cette syntaxe.et j'ai essayé d'utiliser une syntaxe avec '->' et j'y ai trouvé une erreur –

+0

Je trouve vraiment étrange que les débutants se bloque sur les objets PHP ou PHP OOP, mais ils sont heureux de l'utiliser toute la journée en javascript. –

Répondre

0

Si vous voulez ajouter la clause where seulement quand il y a une certaine valeur dans la variable date_awal de $ (soit $ _POST ['date_start']) alors je dirais de le vérifier si la condition & l'autre partie devrait aller dans une autre partie .. Aussi, vous pouvez garder le mysqli_query & while boucle en dehors de la condition ifelse car ces parties sont identiques dans les deux cas.

$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

sympa c'est ce que je veux. thx AJM btw pouvez-vous me l'expliquer? 'date_awal! = ''' Signification a une valeur de $ date_awal' droite? –

+0

J'ai essayé quelque chose comme Anil dit dans la réponse, mais je reçois toujours la valeur de tout sélectionner –

+0

je veux savoir la fonction 'date_awal! = '''. parce que je veux intégrer une condition à nouveau ici. avec 'else if (date_awal! = '' && kode! = '')' Je l'essaie mais je ne peux pas attraper la fonction dans ce 'sinon if' –

0

vous ne pouvez pas vérifier isset dans la variable. au lieu de faire comme ce

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

}else{ 

} 
+0

J'ai essayé votre code. et le code de ma fonction else ne fonctionne pas. –

+0

alors votre variable est vide –

+0

Je pense que vous voulez faire && au lieu de || –

0

isset() retourne un booléen, mais vous vous comparez à une chaîne, donc cela ne fait pas beaucoup de sens:

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

Il devrait être utilisé comme ceci:

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

Cependant, vous voulez probablement utiliser empty() au lieu de isset(). Si une variable existe et contient une chaîne vide, isset() retournera toujours vrai, ce qui n'est probablement pas ce que vous voulez. Vous voulez sans doute ceci:

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

Note:

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

Sorties:

bool(true) 
bool(true)