2016-06-11 4 views
0

Ich habe eine Rasteransicht auf meiner Seite. Das Gitter wird aus meiner Datenbank gefüllt. Ich habe eine Suche in meinem Skript erstellt, also wenn ich die number, name oder price eintippe, bekomme ich die korrekten Daten.Gridview Suche funktioniert nicht mehr nach dem Hinzufügen einer WHERE-Anweisung

My SQL-Abfrage Informationen zu erhalten, ist die folgende:

$sql = "SELECT id, name, price FROM employees"; 

Jetzt möchte ich mein Skript und die relevanten Informationen für einen bestimmten Benutzer erweitern. Aber wenn ich eine WHERE-Anweisung auf meine SQL-Abfrage hinzufügen, stoppt die Suchfunktion arbeitet

Dies ist die SQL-Abfrage Ich brauche:

$sql = "SELECT id, name, price FROM employees WHERE user_id='1'"; 

Ich weiß nicht, was mit diesem falsch ist. Diese Abfrage zeigt mir die richtigen Daten, aber die Suchfunktion funktioniert nicht mehr. Ich habe auch versucht, diese SQL-Abfrage in phpMyAdmin und nichts ist falsch damit.

Kann mir jemand bei diesem Problem helfen. Ich weiß wirklich nicht, was falsch ist:

Hier ist das Skript, das ich verwende, um Informationen aus meiner Datenbank zu erhalten. Die SQL-Abfrage ist auf der Linie 24: - response.php -

<?php 
include_once("connection.php"); 

$params = $columns = $totalRecords = $data = array(); 

$params = $_REQUEST; 

$columns = array( 
0 =>'id', 
1 =>'name', 
2 => 'price', 
3 => 'user_id' 
); 

$where = $sqlTot = $sqlRec = ""; 

if(!empty($params['search']['value'])) { 
    $where .=" WHERE "; 
    $where .=" (id LIKE '".$params['search']['value']."%' ";  
    $where .=" OR name LIKE '".$params['search']['value']."%' "; 
    $where .=" OR price LIKE '".$params['search']['value']."%')"; 
} 

$sql = "SELECT id, name, price FROM employees WHERE user_id='1'"; 
$sqlTot .= $sql; 
$sqlRec .= $sql; 
if(isset($where) && $where != '') { 
    $sqlTot .= $where; 
    $sqlRec .= $where; 
} 

$sqlRec .= " ORDER BY ". $columns[$params['order'][0]['column']]." ".$params['order'][0]['dir']." LIMIT ".$params['start']." ,".$params['length']." "; 

$queryTot = mysqli_query($conn, $sqlTot) or die("database error:". mysqli_error($conn)); 

$totalRecords = mysqli_num_rows($queryTot); 

$queryRecords = mysqli_query($conn, $sqlRec) or die("error to fetch employees data"); 

while($row = mysqli_fetch_row($queryRecords)) { 
    $data[] = $row; 
} 

$json_data = array(
"draw"   => intval($params['draw']), 
"recordsTotal" => intval($totalRecords), 
"recordsFiltered" => intval($totalRecords), 
"data"   => $data 
); 

echo json_encode($json_data); 
?> 

Edit 1:

Jetzt habe ich:

if(!empty($params['search']['value'])) { 
    $where .=" WHERE "; 
    $where .=" (id LIKE '".$params['search']['value']."%' ";  
    $where .=" OR name LIKE '".$params['search']['value']."%' "; 
    $where .=" OR price LIKE '".$params['search']['value']."%') AND user_id='1' 

$sql = "SELECT id,name,price FROM customers"; 

Als ich das laufen, bekomme ich eine Rasteransicht ohne user_id='1' und eine Suchfunktion mit user_id='1'. Ich brauche user_id='1' in beiden von ihnen.

+0

Einstellung verwenden http://php.net/manual/en /mysqli.error.php und var_dump diese Abfrage, Sie werden sehen, was hier vor sich geht. Wenn Sie sehen, dass Sie die Fehlerprüfung verwenden, was ist der Fehler, den Sie bekommen? –

+0

Muss ich einen 'var_dump' von' $ sql' erstellen? 'var_dump ($ sql);' – John

+0

@ Fred-ii- Ich bekomme keinen Fehler. – John

Antwort

0

wenn $ params ist zwei nicht leer, wo in SQL, das ist falsch

if(!empty($params['search']['value'])) { 
    $where .=" WHERE "; 
    $where .=" (id LIKE '".$params['search']['value']."%' ";  
    $where .=" OR name LIKE '".$params['search']['value']."%' "; 
    $where .=" OR price LIKE '".$params['search']['value']."%')"; 
} 

    $sql = "SELECT id, name, price FROM employees WHERE user_id='1'"; 

...... 
// here you assign the firts where by $sql 
$sqlTot .= $sql; 
// here you assign the second where by eval $param 
if(isset($where) && $where != '') { 
$sqlTot .= $where; 
$sqlRec .= $where; 
} 

I suggestio syou sollte diese

if(!empty($params['search']['value'])) { 
    $where .=" WHERE "; 
    $where .=" (id LIKE '".$params['search']['value']."%' ";  
    $where .=" OR name LIKE '".$params['search']['value']."%' "; 
    $where .=" OR price LIKE '".$params['search']['value']."%') "; 

} 
if (!empty($where)) { 

    $where .= "AND user_id='1' "; 
} else { 
    $where .= "WHERE user_id='1' "; 
} 


$sql = "SELECT id,name,price FROM customers"; 
+0

das sollte nicht wichtig sein. MySQL wird das kompensieren. –

+0

@ Fred-ii- Ich erfahre, dass nicht immer so passieren .. ich schlug vor .. expecialial in $ sql striing passing query – scaisEdge

+0

Meine Vermutung ist, dass sie 'WHERE user_id = '1'' insgesamt loswerden müssen und ist am meisten wahrscheinlich fehlgeschlagen. Ihre Abfrage ist ein wenig verwirrend. –

Verwandte Themen