| 제목 | 안녕하세요, 이해가 안되는 현상이 있어 문의 드립니다. | ||
|---|---|---|---|
| 카테고리 | 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번줄 위주로 다시 살펴보세요.