使用数据表从 MySQL 中获取特定行
Fetch specific rows from MySQL with datatables
我正在尝试使用特定的“basket_id”获取 MySQL table 中的特定行,并将它们显示在 jQuery DataTables 插件中。
在 DataTables AJAX 请求的 PHP 服务器端脚本中,我在 MySQL..[=14= 的 WHERE 子句中指定了 $user->basketId()
]
让我来引导您完成它..
- 用户登录。
- USER class 存储用户会话数据。 (使用 public 方法检索数据)
- 在仪表板中,用户单击 ITEMS 并看到数据table。
问题是所有用户都看到了所有购物篮中的所有商品。
我已验证 $user->basketId()
方法 return 是用户的正确购物车 ID。
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.php";
header('Content-Type: application/json; charset=utf-8');
$con = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME);
$output= array();
$sql = "SELECT * FROM items WHERE basket = ".$user->basketId()."";
$totalQuery = mysqli_query($con,$sql);
$total_all_rows = mysqli_num_rows($totalQuery);
$columns = array(
0 => 'id',
1 => 'name',
2 => 'photo',
3 => 'quality',
4 => 'locations',
4 => 'suppliers',
);
if(isset($_GET['search']['value']))
{
$search_value = $_GET['search']['value'];
$sql .= " OR name like '%".$search_value."%'";
$sql .= " OR quality like '%".$search_value."%'";
$sql .= " OR locations like '%".$search_value."%'";
$sql .= " OR suppliers like '%".$search_value."%'";
}
if(isset($_GET['order']))
{
$column_name = $_GET['order'][0]['column'];
$order = $_GET['order'][0]['dir'];
$sql .= " ORDER BY ".$columns[$column_name]." ".$order."";
}
else
{
$sql .= " ORDER BY name desc";
}
if($_GET['length'] != -1)
{
$start = $_GET['start'];
$length = $_GET['length'];
$sql .= " LIMIT ".$start.", ".$length;
}
$query = mysqli_query($con,$sql);
$count_rows = mysqli_num_rows($query);
$data = array();
while($row = mysqli_fetch_assoc($query))
{
$sub_array = array();
$sub_array[] = $row['name'];
$sub_array[] = '<img src="'.$config['app_url'].'includes/assets/img/item_photos/'.substr($row['photo'], strrpos($row['photo'], '/') + 1).'" class="img-fluid rounded-circle dt-img" alt="Item Photo">';
$sub_array[] = $row['quality'];
$sub_array[] = $row['locations'];
$sub_array[] = $row['suppliers'];
$sub_array[] = '<button class="btn btn-outline-info btn-sm update-class-modal" data-toggle="modal" data-target="#update-class-modal" id="'.$row['id'].'" type="button"><span><i class="fad fa-pencil"></i></span></button> <button class="btn btn-outline-danger btn-sm" data-toggle="modal" data-target="#confirm-delete-class" id="'.$row['id'].'" type="button"><span><i class="fad fa-trash"></i></span></button>';
$data[] = $sub_array;
}
$output = array(
'draw'=> intval($_GET['draw']),
'recordsTotal' =>$count_rows ,
'recordsFiltered'=> $total_all_rows,
'data'=>$data,
);
echo json_encode($output, JSON_PRETTY_PRINT);
我不确定为什么,但无论我登录哪个用户以及使用哪个购物车 ID returned,datatables 总是获取项目 table.
因此,在使用我能想到的所有关键字进行一些研究后,我得出了一个答案。
DataTables 已经提供了一个 SSP.php
库,它是 PHP 的服务器端处理 Class。
使用 SSP::complex() 方法我们可以定义两个额外的条件:
SSP::complex( $request, $conn, $table, $primaryKey, $columns, $whereResult=null, $whereAll=null )
$whereResult=null
这是数据 AFTER 的 WHERE
子句,它已从数据库 table 中获取,因此这将过滤 [= 之后的结果48=] 结果是 returned.
$whereAll=null
这是数据 BEFORE 从数据库中获取数据的 WHERE
子句,因此这将在 [= 之前添加一个 WHERE
条件48=] 查询并且只会 return 匹配的结果。
完成所有操作后,我的最终 get_items.php
AJAX 文件看起来像
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.php";
header('Content-Type: application/json; charset=utf-8');
// Database connection info
$dbDetails = array(
'host' => 'redacted',
'user' => 'redacted',
'pass' => 'redacted',
'db' => 'redacted'
);
// DB table to use
$table = 'items';
// Table's primary key
$primaryKey = 'id';
// Array of database columns which should be read and sent back to DataTables.
// The `db` parameter represents the column name in the database.
// The `dt` parameter represents the DataTables column identifier.
$columns = array(
array( 'db' => 'id', 'dt' => 0 ),
array( 'db' => 'name', 'dt' => 1 ),
array( 'db' => 'photo', 'dt' => 2 ),
array( 'db' => 'quality', 'dt' => 3 ),
array( 'db' => 'locations', 'dt' => 4 ),
array( 'db' => 'suppliers', 'dt' => 5 )
);
// Output data as json format
echo json_encode(
SSP::complex( $_GET, $dbDetails, $table, $primaryKey, $columns, null, "school = {$user->basketId()}" )
);
我正在尝试使用特定的“basket_id”获取 MySQL table 中的特定行,并将它们显示在 jQuery DataTables 插件中。
在 DataTables AJAX 请求的 PHP 服务器端脚本中,我在 MySQL..[=14= 的 WHERE 子句中指定了 $user->basketId()
]
让我来引导您完成它..
- 用户登录。
- USER class 存储用户会话数据。 (使用 public 方法检索数据)
- 在仪表板中,用户单击 ITEMS 并看到数据table。
问题是所有用户都看到了所有购物篮中的所有商品。
我已验证 $user->basketId()
方法 return 是用户的正确购物车 ID。
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.php";
header('Content-Type: application/json; charset=utf-8');
$con = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME);
$output= array();
$sql = "SELECT * FROM items WHERE basket = ".$user->basketId()."";
$totalQuery = mysqli_query($con,$sql);
$total_all_rows = mysqli_num_rows($totalQuery);
$columns = array(
0 => 'id',
1 => 'name',
2 => 'photo',
3 => 'quality',
4 => 'locations',
4 => 'suppliers',
);
if(isset($_GET['search']['value']))
{
$search_value = $_GET['search']['value'];
$sql .= " OR name like '%".$search_value."%'";
$sql .= " OR quality like '%".$search_value."%'";
$sql .= " OR locations like '%".$search_value."%'";
$sql .= " OR suppliers like '%".$search_value."%'";
}
if(isset($_GET['order']))
{
$column_name = $_GET['order'][0]['column'];
$order = $_GET['order'][0]['dir'];
$sql .= " ORDER BY ".$columns[$column_name]." ".$order."";
}
else
{
$sql .= " ORDER BY name desc";
}
if($_GET['length'] != -1)
{
$start = $_GET['start'];
$length = $_GET['length'];
$sql .= " LIMIT ".$start.", ".$length;
}
$query = mysqli_query($con,$sql);
$count_rows = mysqli_num_rows($query);
$data = array();
while($row = mysqli_fetch_assoc($query))
{
$sub_array = array();
$sub_array[] = $row['name'];
$sub_array[] = '<img src="'.$config['app_url'].'includes/assets/img/item_photos/'.substr($row['photo'], strrpos($row['photo'], '/') + 1).'" class="img-fluid rounded-circle dt-img" alt="Item Photo">';
$sub_array[] = $row['quality'];
$sub_array[] = $row['locations'];
$sub_array[] = $row['suppliers'];
$sub_array[] = '<button class="btn btn-outline-info btn-sm update-class-modal" data-toggle="modal" data-target="#update-class-modal" id="'.$row['id'].'" type="button"><span><i class="fad fa-pencil"></i></span></button> <button class="btn btn-outline-danger btn-sm" data-toggle="modal" data-target="#confirm-delete-class" id="'.$row['id'].'" type="button"><span><i class="fad fa-trash"></i></span></button>';
$data[] = $sub_array;
}
$output = array(
'draw'=> intval($_GET['draw']),
'recordsTotal' =>$count_rows ,
'recordsFiltered'=> $total_all_rows,
'data'=>$data,
);
echo json_encode($output, JSON_PRETTY_PRINT);
我不确定为什么,但无论我登录哪个用户以及使用哪个购物车 ID returned,datatables 总是获取项目 table.
因此,在使用我能想到的所有关键字进行一些研究后,我得出了一个答案。
DataTables 已经提供了一个 SSP.php
库,它是 PHP 的服务器端处理 Class。
使用 SSP::complex() 方法我们可以定义两个额外的条件:
SSP::complex( $request, $conn, $table, $primaryKey, $columns, $whereResult=null, $whereAll=null )
$whereResult=null
这是数据 AFTER 的 WHERE
子句,它已从数据库 table 中获取,因此这将过滤 [= 之后的结果48=] 结果是 returned.
$whereAll=null
这是数据 BEFORE 从数据库中获取数据的 WHERE
子句,因此这将在 [= 之前添加一个 WHERE
条件48=] 查询并且只会 return 匹配的结果。
完成所有操作后,我的最终 get_items.php
AJAX 文件看起来像
<?php
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/init.php";
header('Content-Type: application/json; charset=utf-8');
// Database connection info
$dbDetails = array(
'host' => 'redacted',
'user' => 'redacted',
'pass' => 'redacted',
'db' => 'redacted'
);
// DB table to use
$table = 'items';
// Table's primary key
$primaryKey = 'id';
// Array of database columns which should be read and sent back to DataTables.
// The `db` parameter represents the column name in the database.
// The `dt` parameter represents the DataTables column identifier.
$columns = array(
array( 'db' => 'id', 'dt' => 0 ),
array( 'db' => 'name', 'dt' => 1 ),
array( 'db' => 'photo', 'dt' => 2 ),
array( 'db' => 'quality', 'dt' => 3 ),
array( 'db' => 'locations', 'dt' => 4 ),
array( 'db' => 'suppliers', 'dt' => 5 )
);
// Output data as json format
echo json_encode(
SSP::complex( $_GET, $dbDetails, $table, $primaryKey, $columns, null, "school = {$user->basketId()}" )
);