Я создаю в настоящий момент систему достижений, которая работает на основе флажков (с тех пор, как она не связана с сообщением). Однако я столкнулся с проблемой, и я, похоже, не склонял голову к ней, так как я не так удобен с циклами и массивы.
Итак, я сделал группу флажков, которые размещены на этой странице и заполнены соответствующим образом, так как см. Код ниже, который помогает мне заполнить эту часть страницы.
function MakeProfessionlist(){ $result = LoadListProffesion(); $i = 0; echo '<table class="Overview">'; while($row = mysqli_fetch_array($result)){ $i++; if(($i % 2) == 0){ echo "<td class='small'><td><input id='achievementHidden' type='hidden' value='0' name='IsChecked[]'>"; echo "<input type='checkbox' id='achievement' name='IsChecked[]' value = '1'>"; echo "<input name='AchievementId[]' type='hidden' value='".$row['AchievementId']."'></td>"; echo "<td class='big'>".$row["AchievementName"]."</td></tr>"; }else{ echo "<tr><td class='small'><input id='achievementHidden' type='hidden' value='0' name='IsChecked[]'>"; echo "<input type='checkbox'id='achievement' name='IsChecked[]' value = '1'>" ; echo "<input name='AchievementId[]' type='hidden' value='".$row['AchievementId']."'></td>"; echo "<td class='big'>".$row["AchievementName"]."</td>"; } } echo '</table>'; }
Как вы видите, я пытаюсь запустить две переменные, а именно значение AchievementId и IsChecked (может быть 0 или 1). Проблема возникает, когда я собираюсь сохранить эту информацию. Я создал таблицу в базе данных, которая действует как медиатор (The Achievement_User, всего 3 записи, которые являются UserId, AchievementId и IsChecked Value)
Мое начало состояло в том, что я снимаю все достижения, которые приходят сюда с помощью AchievementId, которые публикуются вместе с флажком через код ниже.
if(isset($_POST['AchievementSaveData'])) { // print_r($_POST); $checkbox = isset($_POST['IsChecked']) ? $_POST['IsChecked'] : array(); $Achievement = isset($_POST['AchievementId']) ? $_POST['AchievementId'] : array(); foreach (array_combine($checkbox, $Achievement) as $IsChecked => $AchievementId){ $sql="SELECT * FROM Achievement_User WHERE UserId='".$UserId."' AND AchievementId ='".$AchievementId."'" ; $result=mysqli_query($sql); $count=mysqli_num_rows($result); if ($count==1){ echo 'Update datarow with UserID '.$UserId.', AchievementId '. $AchievementId.' and with a value of '.$IsChecked;' <br>'; } else{ echo 'Create datarow with UserID '.$UserId.', AchievementId '. $AchievementId.' and with a value of '.$IsChecked.' <br>'; } } }
Теперь проблема заключается в том, что, когда я устанавливаю флажок, по-видимому, массив увеличивается. Вместо 40 подключений, которые он делает (это сколько отправленных объявлений AchievementId, и когда отмечено, что все отключено по умолчанию), он создает дополнительное пространство для каждого проверенного значения, что делает мое сравнение бесполезным, потому что я получаю сообщение об ошибке, массивы могут быть объединены.
Есть ли способ, с помощью которого я могу работать над этим, что бы сделать мой массив AchievementId совпадающим с моей IsChecked Value?
Изменить. Рядом с этим весь цикл foreach больше не работает, когда я пытался объединить массивы (даже если они соответствуют значениям). Итак, моя мысль здесь, возможно, есть способ опубликовать массив из IsChecked с уже привязанным к нему значением AchievementId. Если это так, как я могу это исправить?