제목 | 안녕하세요, 이해가 안되는 현상이 있어 문의 드립니다. | ||
---|---|---|---|
카테고리 | PHP | ||
글쓴이 | 신일 | 작성시각 | 2019/09/17 21:32:30 |
|
|||
안녕하세요, 이해가 안되는 현상이 있어 문의 드립니다. 캡쳐 이미지를 보면, low_head_number 값이 0 이고, IF 문으로 0보다 크면 실행하라고 했는데실행이 되어 버리네요. 왜 그런걸까요? 0 과 같으니 IF문 안의 코드는 무시되어야 하는거 아닌가요???
var low_head_number = <?php if(isset($low_head_number)) { echo $low_head_number; } else { echo 0; } ?> ; var middle_head_number = <?php if(isset($middle_head_number)) { echo $middle_head_number; } else { echo 0; } ?> ; var high_head_number = <?php if(isset($high_head_number)) { echo $high_head_number; } else { echo 0; } ?> ; if( low_head_number > 0) { var low_head_number = '<?php echo $low_head_number; ?>' ; var low_work_start_yyyy = '<?php echo $low_work_start_yyyy; ?>' ; } if( middle_head_number > 0) { var middle_head_number = '<?php echo $middle_head_number; ?>' ; var middle_work_start_yyyy = '<?php echo $middle_work_start_yyyy; ?>' ; } if( high_head_number > 0) { var high_head_number = '<?php echo $high_head_number; ?>' ; var high_work_start_yyyy = '<?php echo $high_work_start_yyyy; ?>' ; }
|
|||
다음글 | 수정 페이지 셀렉트박스에서, 등록시 선택한 값 DB에서... (1) | ||
이전글 | ckeditor 의 You don't have perm... (4) | ||
엽토군
/
2019/09/17 22:25:42 /
추천
0
|
엽토군
/
2019/09/17 22:52:45 /
추천
0
참견: 원하시는 것은 대충 이런 것이 아닐지? <?php $levels = ['low', 'middle', 'high']; $definitions = []; $conditions = []; foreach ($levels as $level) { $head_number = $level.'_head_number'; $work_start = $level.'_work_start_yyyy'; if (!isset($$head_number)) $$head_number = 0; $definitions[] = "var $head_number = ".$$head_number.";"; if ($$head_number > 0) { $conditions[] = "var $head_number = '".$$head_number."'; var "$work_start." = '".$$work_start."';"; } } echo implode(" ", $definitions); echo implode(" ", $conditions); ?>
|
변종원(웅파)
/
2019/09/18 09:25:49 /
추천
0
에러인지 경고인지 구분을 좀 하셔야할 것 같네요. 미리 선언이 되지 않은 $low_head_number 변수를 사용해서 나오는 경고입니다. |
kaido
/
2019/09/18 09:36:43 /
추천
0
언어의 실행순서를 인지하는 기회이신것 같습니다. 페이지 랜더링 순서는 php가 먼저 실행되고 js 의 데이터영역이 담기고나서 js가 DOM 순서대로 실행되면서 페이지를 그려냅니다. 즉 스크립트가 실행하기도 전에 php 레벨에서 이미 exption 이 일어나고 있다는 증거입니다. 메모리 구조인 [데이터, 힙, 스택] 영역을 나눠서 언제 무엇이 들어가는지 그려보시면 답이 나옵니다. |
timothy
/
2019/09/18 13:56:20 /
추천
0
$low_head_number 변수를 사전에 초기화하시거나, https://sckim70.tistory.com/14 이 분꺼를 참고하시는 것이 어떨까요?
덧글: 질문에서 자바 스크립트 오류를 말씀하셨는데, 실질적으로는 PHP 에러입니다. 아시겠지만, PHP에서 파싱된 웹 소스에 PHP 에러 구문이 포함되어, 웹 브라우저에서 표시됩니다. PHP에서 생성된 웹 소스가 웹 브라우저에서 구동될 때, 자바 스크립트가 실행됩니다. |
신일
/
2019/09/20 10:59:55 /
추천
0
안녕하세요. 신일 입니다. 댓글 남겨주신 것 참고해서 해결 했습니다. 의견 주신 것처럼 자바스크립트 if문 처리 이전에 php가 먼저 실행되다보니 오류가 뜰수 밖에 없었던 것 같습니다. 감사합니다^^ |
원질문: 왜 저 구간이 실행이 되었는가?
원질문의 답: 실행이 된 게 아닙니다. 그냥 PHP가 출력을 쭉 한 거에요. if( low_head_number > 0) 는 자바스크립트 구문이고 PHP 스크립트가 아니기 때문에 단순 text/html 응답내용으로서 출력된 것뿐입니다. <?php 로 시작해서 ?> 로 끝나는 부분이 실행되는 거고요.
나의 의문: 왜 저 구간의 PHP 스크립트가 에러를 뱉는가?
나의 의문의 답: 에러문을 보면 애초에 $low_head_number 변수가 없다고 하네요. 변수가 없어서 if isset() 을 타지 않아서 0까지는 찍었는데 그 다음의 var low_head_number 구문에서는 isset 검사가 없어서 없는 변수를 출력하지 못한 상황 같습니다. 에러문이 알려주는 대로 my_recruit_edit_v2.php의 528번줄 위주로 다시 살펴보세요.