구매하기 클릭시 cartupdate.php에서 에러가 납니다..

구매하기 클릭시 cartupdate.php에서 에러가 납니다..

QA

구매하기 클릭시 cartupdate.php에서 에러가 납니다..

본문

회사 홈페이지에서 오류가 나서요..

 //--------------------------------------------------------
    //  변조 검사
    //--------------------------------------------------------
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    $opt_amount = 0;
    $sql = " select * from $g4[yc4_item_table] where it_id = '$_POST[it_id]' ";
    $it = sql_fetch($sql);
    for ($i=1; $i<=8; $i++) {
        //$dst_opt = $_POST["it_opt".$i];
        echo ""
        $dst_opt = trim($_POST["it_opt".$i]);
        if ($dst_opt) {
            $org_opt = $it["it_opt".$i];
            $exp_opt = explode("\n", trim($org_opt));
            $exists = false;
            for ($k=0; $k<count($exp_opt); $k++) {
                $opt = trim($exp_opt[$k]);
                if ($dst_opt == $opt) {
                    $exists = true;
                    $exp_option = explode(";", $opt);
                    $opt_amount += (int)$exp_option[1];
                    break;
                }
            }
            if ($exists == false) {
                // 옵션이 다름
                die("Error.");
            }
        }
    }

에러 메시지를 출력해보면

 

Notice: Undefined index: it_opt1 in /home/hosting_users/shimro0/www/shop/cartupdate.php on line 172

Error.

 

이렇게 나옵니다ㅠㅠ

it_opt1가 정의 되지 않았다는거 같은데..

제가 코딩 초보라 어디를 봐야할지 모르겠네요...

다른 상품들은 괜찮은데 유독 한 종류의 상품에서만 동일한 오류가 발생합니다.

정보가 부족하다면 말씀해주세요ㅠㅠ

도와주십쇼ㅠㅠ

이 질문에 댓글 쓰기 :

답변 4

echo ""  <-세미콜론 없는데 이건 오류랑 상관 없는 것 같고요.

 


if(!isset($_POST["it_opt".$i])
  continue;
$dst_opt = trim($_POST["it_opt".$i]);

 

이와 같이 해당 변수가 있는지 확인하고 없으면 패스 하는 코드를 추가해주세요.

 

Notice: Undefined index 는 해당 에러는 배열변수에 해당 인덱스가 없으면 뿜는 에러인데 정상적인 동작에는 지장을 주지 않습니다.

영카트 기본은 Notice 에러는 뿜지 않도록 설정되어 있는데 common.php 중 error_reporting()을 수정하신 것으로 보입니다.

echo는 $i값을 찍어보려고 하다가 중간에 복사해서 들어 간것 같습니다;;;

말씀해주신 코드를 제가 올린 코드 기준으로 11번 줄에 추가 했더니

Parse error: syntax error, unexpected T_CONTINUE in /home/hosting_users/shimro0/www/shop/cartupdate.php on line 174
위와 같이 에러가 났습니다..;

혹시나 해서 중괄호를

if(!isset($_POST["it_opt".$i]){
            continue;
        }

        $dst_opt = trim($_POST["it_opt".$i]);

이렇게 삽입하거나
if(!isset($_POST["it_opt".$i]){
            continue;
        $dst_opt = trim($_POST["it_opt".$i]);
        }


이렇게 감싸는 형태로 해봤지만

그러면 또
Parse error: syntax error, unexpected '{' in /home/hosting_users/shimro0/www/shop/cartupdate.php on line 173

이런식으로 싱텍스 에러가 납니다..ㅠㅠ

초보라서 제가 맞게 수정한건지 모르겠네요...ㅠㅠ

헉..저도 제대로 못봤네요...ㅠㅠ감사합니다.

해당 코드 삽입해서

if(!isset($_POST["it_opt".$i])){
            continue;

        $dst_opt = trim($_POST["it_opt".$i]);
        
        }


아래까지 감싸보니 오류없이 넘어갑니다ㅠㅠ
정말 감사합니다!!!

아 한가지만 더 여쭤보자면 반복문이 두바퀴를 돌때 에러가 나던데 해당하는 두번째 변수가 없어서 에러가 난건가요?
db상에는 it_opt2가 셀렉트 박스로 되어있거든요...
아니면 값을 3번째 값을 검색하는데 없어서 에러가 났을까요??

헉..
중괄호를 빼야하나요???

if(!isset($_POST["it_opt".$i]))
            continue;
        $dst_opt = trim($_POST["it_opt".$i]);


이렇게 넣으니
28번줄에 있는 Error. 문자만 찍히고
그전처럼 에러 메시지는 안찍힙니다.

그래서 감쌋더니 작동이 되더라구요;;

중괄호를 제거 하고 사용할 다른 방법이 있을까요?

172 라인이 정확히 파악이 어렵지만

 

$dst_opt = trim($_POST["it_opt".$i]); 이 라인에서 $i 값으로 1값을 제대로 인식되어 가져오지 못하는 오류로 보여집니다.

echo 로 찍어 보면 1값은 제대로 찍힙니다..ㅠㅠ

1
Notice: Undefined index: it_opt1 in /home/hosting_users/shimro0/www/shop/cartupdate.php on line 174
2Error.

이렇게 두바퀴째 돌면 에러가 발생합니다..ㅠㅠㅠ

컬럼의 속성이 문제 일까요???

그러면 다른 부분이 문제가 있는겁니다.

저 중괄호가 저렇게 들어가면 옵션값이 한개도 저장이 안될겁니다.


for ($i=1; $i<=8; $i++) {
        //$dst_opt = $_POST["it_opt".$i];
        
        echo "i = "+$i;
        if(!isset($_POST["it_opt".$i])){
            continue;

        $dst_opt = trim($_POST["it_opt".$i]);
        
        
            if ($dst_opt) {
                $org_opt = $it["it_opt".$i];
                $exp_opt = explode("\n", trim($org_opt));
                $exists = false;
                for ($k=0; $k<count($exp_opt); $k++) {
                    $opt = trim($exp_opt[$k]);
                    if ($dst_opt == $opt) {
                        $exists = true;
                        $exp_option = explode(";", $opt);
                        $opt_amount += (int)$exp_option[1];
                        break;
                    }
                }
                if ($exists == false) {
                    // 옵션이 다름
                    die("Error.");
                }
            }
        }
    }



이런식으로 반복문 바로 아래 부터 전체를 감싸는 형태로 하면 괜찮을까요?
해당변수가 없으면 지나가는? 이런 형식으로 하면 될까요?

test해보니 실제로 주문까지 되고 주문관리하는 부분에서 주문된 정보가 넘어오는것으로 확인됩니다

그렇게 하시면 안됩니다.
에러는 저 괄호가 아니라 다른 곳에서 발생하는거고요.
저 괄호로 묶는 바람에 해당 에러가 나는 부분이 실행이 되지 않아서 발생하지 않는 것 처럼 보일 뿐입니다.

저렇게 괄호로 묶을실꺼면 그냥 포문을 지워버리세요.
지금 상태라면 아무것도 동작하지 않는 것과 동일합니다.

답변 감사합니다.
문제는 it_opt2 컬럼에있는 값에 문자열로 큰따옴표(")가 들어가있는데 이를 읽지 못하는것 같습니다.
큰따옴표를 문자열로 바꿔서 시도했더니 해결되었습니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 314
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT