개발 Q&A

제목 안녕하세요, 이해가 안되는 현상이 있어 문의 드립니다.
카테고리 PHP
글쓴이 신일 작성시각 2019/09/17 21:32:30
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 12436   RSS

안녕하세요, 이해가 안되는 현상이 있어 문의 드립니다.

캡쳐 이미지를 보면, 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

원질문: 왜 저 구간이 실행이 되었는가?

원질문의 답: 실행이 된 게 아닙니다. 그냥 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번줄 위주로 다시 살펴보세요.

엽토군 / 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가 먼저 실행되다보니 오류가 뜰수 밖에 없었던 것 같습니다.

감사합니다^^