В чем проблема sql запроса?

Я достаю массив с данными из sql запроса, то есть хочу получить по нему данные определенных юзеров, foreachем создаю файлы excel с юзерами, помещаю их в архив, затем скачиваю его(архив c excel юезров). ..так вот.. Как я говорил ^ ранее, я достаю только некоторые учетные записи по WHERE, но почему-то вместо к примеру 6 таких найденых записей, он скачивает все 10.000 учеток

вот код:

   if(isset($_POST['EXCEL_DOWNLOAD'])) {
    

                require_once 'PHPExcel/Classes/PHPExcel.php';
                
function getUserses() {
    global $link;
    
$data = array();
 
if(!empty($_POST['phone'])) {
$data[] = "`phone`='".$_POST['phone']."'";
}
 
if(!empty($_POST['name'])) {
$data[] = "`name`='".$_POST['name']."'";
}
 
if(!empty($_POST['surname'])) {
$data[] = "`surname`='".$_POST['surname']."'";
}
 
if(!empty($_POST['region'])) {
$data[] = "`filial_id`='".$_POST['region']."'";
}

if(!empty($_POST['parent'])) {
$data[] = "`parent_id`='".$_POST['parent']."'";
}
 
if(count($data) > 0)
{
  $sql= "SELECT * FROM `users` WHERE ".implode(' AND ', $data);
}
 else {
 $sql= "SELECT * FROM `users`";
 }
 
    $res=mysqli_query($link, $sql);

$users=mysqli_fetch_all($res, MYSQLI_ASSOC);

return $users;
}
$users = getUserses();




$zip = new ZipArchive(); 
$zip->open("archive_excel/archive.zip", ZIPARCHIVE::CREATE); 

foreach($users as $user) {
$objExcel = new PHPExcel();
$objExcel
->setActiveSheetIndex(0)
->setCellValue('A1', 'ID')
->setCellValue('B1', $user['id'])
->setCellValue('A2', 'ФИО')
->setCellValue('B2', $user['surname'] . " " . $user['name'] . " " . $user['thirdname'])
->setCellValue('A3', 'ID-Пригласителя')
->setCellValue('B3', $user['parent_id'])
->setCellValue('A4', 'Номер')
->setCellValue('B4', $user['phone'])
->setCellValue('A5', 'Регион')
->setCellValue('B5', $user['name'])
->setCellValue('A6', 'Баланс')
->setCellValue('B6', $user['bonus_1'])
->getColumnDimension('B')->setWidth(50);

$objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
$objWriter->save('archive_excel/'.$user['id'].'.xls');

$retFile = $zip->addFile("archive_excel/".$user['id'].'.xls'); 

}
$zip->close(); 

foreach($users as $user) {
unlink('archive_excel/'.$profile['id'].'.xls');
}

$file_name= "archive_excel/archive.zip";
header("Content-Length: ".filesize($file_name));
header("Content-Disposition: attachment; filename=".$file_name);
header("Content-Type: application/x-force-download; name=\"".$file_name."\"");

readfile($file_name);

}

в чем проблема?


Ответы (1 шт):

Автор решения: delikates
$query = "SELECT * FROM `users`";
foreach( ['name' => 'name', 'surname' => 'surname', 'filial_id' => 'region', 'parent_id' => 'parent'] as $key => $value ) {
    if ( isset( $_POST[ $value ] ) && trim( $_POST[ $value ] ) != '' ) {
       $query .= ( !preg_match("/ WHERE/", $query) ? " WHERE" : "" );
       $query .= ( !preg_match("/ WHERE (\S+)/", $query) ? " AND" : "" );
       $query .= "`".$key."`='".$value."'";
    }
}

Немного упростил Ваш код.

→ Ссылка