Значение не меняется после оператора if в цикле foreach - PullRequest
0 голосов
/ 21 декабря 2018

Привет, я хочу проверить, существует ли уже дата в моем БД, но мой код не меняет значение на ложное. Вот мой кодна 1.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы проверяете только первую дату в диапазоне.Цикл while() в первой итерации цикла for извлечет все строки из запроса.На других итерациях ничего не останется в результатах запроса, поэтому цикл while будет немедленно завершен.

Вы должны поместить результаты запроса в массив и выполнить цикл вместо этого.

Другая проблема заключается в том, что даты, возвращаемые БД, имеют формат Y-m-d, а не d-m-Y.

$query_results = $query_db->fetchAll(PDO::FETCH_ASSOC);
foreach ($daterange as $date) {
    foreach ($query_results as $datum) {
        if($datum['DatumVanaf'] == $date->format("Y-m-d")) 
        {//Change datescheck to false if date exists
            $datesCheck = false; 
            break 2;
        }
    }
}

Но циклически проходить по датам - глупый способ сделать это.Вы можете просто проверить, находится ли дата между $begin и $end:

$begin_str = $begin->format("Y-m-d");
$end_str = $end->format("Y-m-d");
while ($datum = $query_db->fetch(PDO::FETCH_ASSOC)) {
    if ($datum['DatumVanaf'] >= $begin_str && $datum['DatumVanaf'] <= $end_str) {
        $datesCheck = false;
        break;
    }
}

Еще лучше было бы поставить проверку в самом запросе.

$query_db = $conn->prepare('SELECT COUNT(*) AS count
                            FROM beschikbaarheid 
                            WHERE DID = :DID AND actief = 1
                            AND DatumVanaf BETWEEN :begin AND :end');
$query_db->bindParam(':DID', $did, PDO::PARAM_STR);
$query_db->bindValue(':begin', $begin->format("Y-m-d 0:0:0"));
$query_db->bindValue(':end', $end->format("Y-m-d 23:59:59"));
$query_db->execute();
$datum = $query_db->fetch(PDO::FETCH_ASSOC);
$datesCheck = $datum['count'] > 0;
0 голосов
/ 21 декабря 2018

Изменить формат даты при условии, как показано ниже

(if($datum['DatumVanaf'] == $date->format("d-m-Y")) )

на

if($datum['DatumVanaf'] == $date->format("**Y-m-d**"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...