@mr_rakhimov

Почему супер глобальная переменная $_GET считается присвоенной?

У меня возник казус. Может он и легко решаем, но я никак не могу заметить проблему (мало спал).
Дело обстоит так. Есть 2 ключа массива $_GET: $_GET['centre'] (формирование) и $_GET['position'] (должности в этом формировании). Когда я устанавливаю значение для $_GET['centre'] с другого списка, значение $_GET['position'] почему-то устанавливается само в списке в другом списке, хотя там ещё мы ничего не выбирали (ВАЖНО: оно одно).

Где я допустил ошибку? Заранее спасибо за ответы.

<fieldset id="centre_position" class="<? if(!isset($_GET['centre'])){ echo "hidden"; } ?>">
											<select name="position" form="registration-form" id="select_this_centre_position">
												<option disabled selected>Должность</option>
												<?
												
												if (!empty($_GET['centre'])){
													$this_centre=$_GET['centre'];
				
													// НЕ ОБРАЩАЙИЕ ВНИМАНИЕ НА ВЫБОРКУ, ИСПОЛЬЗУЮ PDO БИБЛИОТЕКУ
													$view_centre=R::findOne('centres',  'id = ?', array($this_centre));
													$view_centre_positions=$view_centre->positions;
													$view_centre_status=$view_centre->status;

													if($view_centre_status == 1){
													$this_positions=unserialize($view_centre_positions);

													// НА ДАННЫЙ МОМЕНТ В БД ЕСТЬ ТОЛЬКО ОДНО POSITION
													foreach($this_positions as $key=>$value){
														if(isset($value)){
															if($_GET['position']==$key){
																// С ПОМОЩЬЮ ФУНКЦИИ на JQUERY УСТАНАВЛИВАЮ $_GET['position']
																echo '<option value="'.$i.'" data-url="http://employeedb.akd/registration?centre='.$this_centre.'&position='.$key.'" selected>'.$value.'</option>';
															}else{
																echo '<option value="'.$i.'" data-url="http://employeedb.akd/registration?centre='.$this_centre.'&position='.$key.'">'.$value.'</option>';
															}
														}

													}
													}
												}
												?>
											</select>
										</fieldset>
  • Вопрос задан
  • 100 просмотров
Решения вопроса 2
@mr_rakhimov Автор вопроса
Вопрос решён. Забыл установить проверку на существующее значение $_GET['position']

<fieldset id="centre_position" class="<? if(!isset($_GET['centre'])){ echo "hidden"; } ?>">
											<select name="position" form="registration-form" id="select_this_centre_position">
												<option disabled selected>Должность</option>
												<?
												
												if (!empty($_GET['centre'])){
													$this_centre=$_GET['centre'];
				
													// НЕ ОБРАЩАЙИЕ ВНИМАНИЕ НА ВЫБОРКУ, ИСПОЛЬЗУЮ PDO БИБЛИОТЕКУ
													$view_centre=R::findOne('centres',  'id = ?', array($this_centre));
													$view_centre_positions=$view_centre->positions;
													$view_centre_status=$view_centre->status;

													if($view_centre_status == 1){
													$this_positions=unserialize($view_centre_positions);

													// НА ДАННЫЙ МОМЕНТ В БД ЕСТЬ ТОЛЬКО ОДНО POSITION
													foreach($this_positions as $key=>$value){
														if(isset($value)){
															if(isset($_GET['position']) && $_GET['position']==$key){
																// С ПОМОЩЬЮ ФУНКЦИИ на JQUERY УСТАНАВЛИВАЮ $_GET['position']
																echo '<option value="'.$i.'" data-url="http://employeedb.akd/registration?centre='.$this_centre.'&position='.$key.'" selected>'.$value.'</option>';
															}else{
																echo '<option value="'.$i.'" data-url="http://employeedb.akd/registration?centre='.$this_centre.'&position='.$key.'">'.$value.'</option>';
															}
														}

													}
													}
												}
												?>
											</select>
										</fieldset>
Ответ написан
Комментировать
@xSaTaNxCreWx
Как я понимаю из этой части кода:
foreach($this_positions as $key=>$value){
    if(isset($value)){
        if($_GET['position']==$key){

Ты берешь ключ, а он, видимо, равен 0, тогда как переменной $_GET['position'] нет, значит она равна null.
Перепишем твою проверку $_GET['position']==$key, заменяя результат, получается:
null == 0
Null в данном случае преобразуется в тип bool (false), так же и 0 - false. То есть получается проверка false == false

Чтоб уйти от этой ошибки, тебе надо делать проверку с сравнением типов $_GET['position']===$key

Вот тут можешь почитать подробнее:
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы