2016-07-30 3 views
-1

У меня есть такой способ, который является моим вариантом выбора, не работает должным образом. Первый вариант выбора, который я создал, не может функционировать должным образом. Только опция «jabatan» не работала, пока другие могут. Когда я пытаюсь найти «jabatan» и нажимаю кнопку «cari», это не сработало.Как выбрать вариант с помощью PHP AJAX

function listAset($PK_lokasiaset,$jbtn,$bhgn,$pnmptn,$naset){ 
$where = ""; 
if($PK_lokasiaset == "") $where = ""; 
else $where = "WHERE PK_lokasiaset = '".$PK_lokasiaset."'"; 

if($jbtn != ''){ 
    if($jbtn == '99'){} 
    else if($where == ""){ $where = "WHERE loak.FK_jabatan = '".$jbtn."'";} 
    else $jbtn .= " AND loak.FK_jabatan = '".$jbtn."' "; 
} 
if($bhgn != '99'){ 
    if($where == ""){ $where = "WHERE loak.FK_bahagian = '".$bhgn."'";} 
    else $where .= " AND loak.FK_bahagian = '".$bhgn."' "; 
} 
if($pnmptn != '99'){ 
    if($where == ""){ $where = "WHERE loak.FK_penempatan = '".$pnmptn."'";} 
    else $where .= " AND loak.FK_penempatan = '".$pnmptn."' "; 
} 
if($naset != '99'){ 
    if($where == ""){ $where = "WHERE loak.FK_aset = '".$naset."'";} 
    else $where .= " AND loak.FK_aset = '".$naset."' "; 
} 

$sql = "SELECT PK_lokasiaset,loak.nosiri,loak.FK_jabatan,loak.FK_bahagian,loak.FK_penempatan,loak.FK_aset,jab.namajabatan AS jabatan,bah.namabahagian AS bahagian,pen.butiran AS penempatan,kat.namaaset AS kategori,klas.namaaset AS klasifikasi,aset.namaaset AS naset 
FROM lokasiaset loak 
LEFT JOIN jabatan jab ON jab.PK_jabatan = loak.FK_jabatan 
LEFT JOIN bahagian bah ON bah.PK_bahagian = loak.FK_bahagian 
LEFT JOIN penempatan pen ON pen.PK_penempatan = loak.FK_penempatan 
LEFT JOIN aset ON aset.PK_aset = loak.FK_aset 
LEFT JOIN klasifikasiaset klas ON klas.PK_klasifikasiaset = aset.FK_klasifikasiaset 
LEFT JOIN kategoriaset kat ON kat.PK_kategoriaset = aset.FK_kategoriaset ".$where." ORDER BY nosiri ASC"; 

$_SESSION['sqlaset'] = $sql; 
//echo $sql; 
$query = mysql_query($sql); 
if($query) return $query; 
else return mysql_error(); } 

Мой HTML выглядит этот код

<form class="form-horizontal form-label-left input_mask" action="senaraiaset.php" enctype="multipart/form-data" method="post" > 
        <div class="form-group"> 
       <div class="row"> 
        <div class="col-md-6 col-sm-6 col-xs-12"> 
         <div class="form-group"> 

         <label class="control-label col-md-3 col-sm-3 col-xs-12">Jabatan</label> 
         <div class="col-md-9 col-sm-9 col-xs-12"> 
         <select name="jabatan" class="form-control" onChange="showbhgn(this.value)"> 
         <option value="99">-- Pilih --</option> 
         <?php 
         $sjab = "SELECT * FROM jabatan ORDER BY kodjabatan ASC"; 
         $qjab = mysql_query($sjab); 
         while($rjab = mysql_fetch_array($qjab)){ 
         ?> 
         <option value="<?php echo $rjab['PK_jabatan']; ?>"><?php echo $rjab['namajabatan']; ?></option> 
         <?php } ?> 
         </select> 
         </div> 
         </div> 
         <div class="form-group"> 
         <label class="control-label col-md-3 col-sm-3 col-xs-12">Bahagian </label> 
         <div class="col-md-9 col-sm-9 col-xs-12" id="bahagian"> 
         <select name="bahagian" class="form-control"> 
         <option value="99">-- Pilih --</option> 
         <?php 
         $sjab = "SELECT * FROM bahagian ORDER BY kodbahagian ASC"; 
         $qjab = mysql_query($sjab); 
         while($rjab = mysql_fetch_array($qjab)){ 
         ?> 
         <option value="<?php echo $rjab['PK_bahagian']; ?>"><?php echo $rjab['namabahagian']; ?></option> 
         <?php } ?> 
         </select> 
         </div> 
         </div> 
         <div class="form-group"> 
         <label class="control-label col-md-3 col-sm-3 col-xs-12">Penempatan </label> 
         <div class="col-md-9 col-sm-9 col-xs-12"> 
         <select name="penempatan" class="form-control"> 
         <option value="99">-- Pilih --</option> 
         <?php 
         $spen = "SELECT * FROM penempatan ORDER BY PK_penempatan ASC"; 
         $qpen = mysql_query($spen); 
         while($rpen = mysql_fetch_array($qpen)){ 
         ?> 
         <option value="<?php echo $rpen['PK_penempatan']; ?>"><?php echo $rpen['butiran']; ?></option> 
         <?php } ?> 
         </select> 
         </div> 
         </div> 
        </div> 

        <div class="col-md-6 col-sm-6 col-xs-12"> 
         <div class="form-group"> 
         <label class="control-label col-md-3 col-sm-3 col-xs-12">Kategori Aset</label> 
         <div class="col-md-9 col-sm-9 col-xs-12"> 
         <select name="kategoriaset" class="form-control" onChange="showkat(this.value)"> 
         <option value="99">-- Pilih --</option> 
         <?php 
         $sjab = "SELECT * FROM kategoriaset ORDER BY PK_kategoriaset ASC"; 
         $qjab = mysql_query($sjab); 
         while($rjab = mysql_fetch_array($qjab)){ 
         ?> 
         <option value="<?php echo $rjab['PK_kategoriaset']; ?>"><?php echo $rjab['namaaset']; ?></option> 
         <?php } ?> 
         </select> 
         </div> 
         </div> 
         <div class="form-group"> 
         <label class="control-label col-md-3 col-sm-3 col-xs-12">Klasifikasi Aset </label> 
         <div class="col-md-9 col-sm-9 col-xs-12" id="kategoriaset"> 
          <select name="kategoriaset" class="form-control" onChange="showaset(this.value)"> 
         <option value="99">-- Pilih --</option> 
         <?php 
         $sjab = "SELECT * FROM klasifikasiaset ORDER BY PK_klasifikasiaset ASC"; 
         $qjab = mysql_query($sjab); 
         while($rjab = mysql_fetch_array($qjab)){ 
         ?> 
         <option value="<?php echo $rjab['PK_klasifikasiaset']; ?>"><?php echo $rjab['namaaset']; ?></option> 
         <?php } ?> 
         </select> 
         </div> 
         </div> 
         <div class="form-group"> 
         <label class="control-label col-md-3 col-sm-3 col-xs-12">Nama Aset </label> 
         <div class="col-md-9 col-sm-9 col-xs-12" id="namaasets" > 
          <select name="namaaset" class="form-control" > 
         <option value="99">-- Pilih --</option> 
         <?php 
         $sjab = "SELECT * FROM aset ORDER BY PK_aset ASC"; 
         $qjab = mysql_query($sjab); 
         while($rjab = mysql_fetch_array($qjab)){ 
         ?> 
         <option value="<?php echo $rjab['PK_aset']; ?>"><?php echo $rjab['namaaset']; ?></option> 
         <?php } ?> 
         </select> 
         </div> 
         </div> 
        </div> 
       </div> 

        </div> 
        </div> 
        <div class="ln_solid"></div> 
        <div class="form-group"> 
        <div class="col-md-12 col-sm-12 col-xs-12"> 
         <input type="submit" name="cari" value="Cari" class="btn btn-primary" /> 
         <input type="button" name="reset" value="Semula" class="btn btn-default" /> 
        </div> 
        </div> 

       </form> 
       </div> 

       <br> 

       <div class="row"> 
       <table id="datatable-fixed-header" class="table table-striped table-bordered"> 
        <thead> 
        <tr> 
         <th>Bil</th> 
         <th>Kod Aset</th> 
         <th>Kategori Aset</th> 
         <th>Klasifikasi Aset</th> 
         <th>Penempatan</th> 
         <th>Jabatan</th> 
         <th>Bahagian</th> 
         <th>Nama Aset</th> 
        </tr> 
        </thead> 
        <tbody> 
        <?php 
        //$jbtn = ''; 
        //$bhgn = ''; 
        //$pnmptn = ''; 
        /*$kat = ''; 
        $klas = ''; 
        $naset = '';*/ 
        if(isset($_POST['cari'])){ 
         $jbtn = $_POST['jabatan']; 
         $bhgn = $_POST['bahagian']; 
         $pnmptn = $_POST['penempatan']; 
         //$kat = $_POST['kategoriaset']; 
         //$klas = $_POST['klasifikasiaset']; 
         $naset = $_POST['namaaset']; 
        } 
        $query = listAset('',$jbtn,$bhgn,$pnmptn,$naset);//,$klas,$kat 
        //echo '-'.$query; 
        $bil = 0; 
        while($row = mysql_fetch_array($query)) 
        { 
         $bil++; 
        ?> 
        <tr> 
         <td><?php echo $bil; ?></td>    
         <td><a style="color:#6197d0;" class="" href="asetAct1.php?aset=<?php echo $row['PK_lokasiaset']; ?>"><?php echo $row['nosiri']; ?></a></td> 
         <td><?php echo $row['kategori']; ?></td> 
         <td><?php echo $row['klasifikasi']; ?></td>       
         <td><?php echo $row['penempatan']; ?></td> 
         <td><?php echo $row['jabatan']; ?></td> 
         <td><?php echo $row['bahagian']; ?></td> 
         <td><?php echo $row['naset']; ?></td>       
        </tr> 
        <?php } ?> 
        </tbody> 
       </table> 
       </div> 
+0

Это выглядит ужасно, как будто вы закончите с несколькими предложениями 'WHERE' в последнем sql - как говорится в Highlander' 'Может быть только один! '' – RamRaider

+0

wow много левых Joins там тоже. если '$ PK_lokasiaset ==" "', то ваш запрос не удастся. Я использую массив для where, 'array (PK_lokasiaset = '". $ PK_lokasiaset. "'", ...) 'then do' WHERE '.implode (' AND ', $ where) ', также просматривайте PLaceHolders, SQL INJECTION – ArtisticPhoenix

ответ

0

Держу пари, что это ваш вопрос

if($PK_lokasiaset == ""){ 
    $where = ""; 
}else{ 
    $where = "WHERE PK_lokasiaset = '".$PK_lokasiaset."'"; 
} 

если пусто, то вы получите только

$where = ""; 

Если вы не получите

$where = "WHERE PK_lokasiaset = '".$PK_lokasiaset."'" 

Впоследствии вы получите

$where = "AND ..."; 

Без слова Where, когда он пуст, и ваш запрос будет завершаться

select * from table AND var = "something" 

Я хотел бы изменить этот беспорядок

if($PK_lokasiaset == "") $where = ""; 
else $where = "WHERE PK_lokasiaset = '".$PK_lokasiaset."'"; 

if($jbtn != ''){ 
    if($jbtn == '99'){} 
     else if($where == ""){ $where = "WHERE loak.FK_jabatan = '".$jbtn."'";} 
     else $jbtn .= " AND loak.FK_jabatan = '".$jbtn."' "; 
} 

Что-то вроде этого

$where = array(); 

if($PK_lokasiaset != "") 
    $where[] = "PK_lokasiaset = '{$PK_lokasiaset}'"; 

    ... 

if($naset != '99') 
    $where[] = "loak.FK_aset = '{$naset}'"; 

А потом просто сделать

'SELECT * FROM table WHERE '.implode(' AND ', $where); 

И я бы серьезно использовать заполнители и подготовленные заявления, чтобы избежать инъекции SQL. Что можно было бы легко сделать, как

$params = array(); 
$where = array(); 

if($PK_lokasiaset != "") { 
    $where[] = "PK_lokasiaset = :PK_lokasiaset"; 
    $params[':PK_lokasiaset'] = $PK_lokasiaset; 
} 

... 

if($naset != '99'){ 
    $where[] = "loak.FK_aset = :FK_aset"; 
    $params[':FK_aset'] = $PK_lokasiaset 
} 

Тогда с PDO вы просто делаете

$stmt = $PDO->prepare('SELECT * FROM table WHERE '.implode(' AND ', $where)); 
    $stmt->execute($params); 

Так намного чище, чтобы использовать массив и лопаются. Единственный раз, когда это не сработает, - это то, что вы смешиваете AND и OR в своем запросе.

Смежные вопросы