• $_POST принимает NULL при AJAX запросе и мешает использовать PDO, как исправить?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если Вы НЕ отметили ни одного чек-бокса, то Вам ничего и не прилетит.
    Т.е. если отправить форму из моего примера, в $_POST будет:
    array(2) {
      ["a"]=>
      string(1) "0"
      ["b"]=>
      string(1) "5"
    }

    Т.е. никакого day у Вас и нет.
    Я так понимаю, Вы делаете вывод данных на основе значения этого day. А значит ничего не и должно вывестись.

    То есть, Ваш код сведется к:
    $result = [];
    
    $a = (int) $_POST['a'];
    $b = (int) $_POST['b'];
    
    $c = array_filter( (array) $_POST['day'] );
    
    if ( !empty($c) )
    {
    	$c = implode(',', $_POST['day']);
    	$in = str_repeat('?,', count($c) - 1) . '?';
    	$sql = "SELECT * FROM table WHERE day IN ($in) ASC LIMIT :a, :b";
    	$stmt = $pdo->prepare($sql);
    	$stmt->execute($с, [$a, $b]);
    	$data = $stmt->fetchAll();
    
    	$result = $data;
    }
    
    echo json_encode($result);


    P.S. А так ли Вам нужна именно ручная сборка значений? Почему бы не вынести в саму форму?

    <form id="filter">
    	<input type='hidden' name='a' value='0' />
    	<input type='hidden' name='b' value='5' />
    	<input type="checkbox" name="day[]" value="1"> 
    	<input type="checkbox" name="day[]" value="2">
    	<input type="checkbox" name="day[]" value="3"> 
    </form>


    $.ajax({
        url: 'index.php',
        method: 'POST',
        data: $("#filter").serialize()
    });
    Ответ написан
    1 комментарий