Well, one thing I learned early on is if something is working in some browsers (and not others) the issue is never your PHP code. You can drive yourself THINKING that it is, but it's not...the issue you're having is how the browsers are handling malformed HTML, and that's solved easiest by validating your html!
At first glace, the thing that sticks out is
<input name=\"checkbox[]\" type=\"checkbox\" id=\"checkbox[]\" value=\"$ID\">
If that is how they are being sent to the browser, it's going to choke . I would do it like this
<?php foreach ($data as $row): ?>
<input name="checkbox[]" type="checkbox" value="<?= $row['ID'] ?>">
<?php endforeach; ?>
Make sure you don't have escaped quotes \" being sent to the browser, and ID's with html have to be UNIQUE. id="checkbox[]" means nothing to the browser, it's just going to start choking