관리 메뉴

나만을 위한 블로그

[PHP] Undefined index 에러 본문

PHP

[PHP] Undefined index 에러

참깨빵위에참깨빵 2020. 1. 2. 02:39
728x90
반응형

Undefined index는 구글링 결과 정의되지 않은 색인이라고 한다.

스택 오버플로우에 이 에러와 관련한 질문과 댓글이 있으니 참고할거면 참고하자.

 

https://stackoverflow.com/questions/4261133/notice-undefined-variable-notice-undefined-index-and-notice-undefined

 

"Notice: Undefined variable", "Notice: Undefined index", and "Notice: Undefined offset" using PHP

I'm running a PHP script and continue to receive errors like: Notice: Undefined variable: my_variable_name in C:\wamp\www\mypath\index.php on line 10 Notice: Undefined index: my_index C:\wa...

stackoverflow.com

해당 에러는 PHP에서 발생하는 에러다.

내 경우는 회원가입 시 입력한 사용자 정보를 처리하는 php 파일에서 이 에러가 났었다.

문제가 발생한 코드는 이 부분이었다. 수정 전 코드는 복사해두지 않아서 없기 때문에, 수정한 후의 코드를 올린다.

$id=$_GET["id"];
$pw=$_GET["pw"];
$email=$_GET["email"];

SQL문을 날릴 때 쓸 변수를 구하기 위해, 사용자가 입력한 id, pw, email을 GET으로 가져와서 $id, $pw, $email 변수에 각각 넣는다.

물론 회원가입 페이지에서 폼 태그의 메서드도 get으로 맞춰줘야 한다.

난 위에 써진 $_GET["id"];를 원래 $_GET[id]; 라고 썼었는데, 이렇게 하면 안되고 큰따옴표를 id 양 옆에 붙여줘야 제대로 동작했다.

 

하지만 코드블럭 안의 내용대로 선언했는데도 회원가입이 이뤄지지 않았다.

그래서 내가 다음으로 본 곳은 SQL문을 담은 $query 변수였다.

$query = "INSERT INTO member (id, pw, mail, date, permit) VALUES ('$id', '$pw', '$email', '$date', 0)";

member DB의 각 5개 컬럼에 VALUES() 안에 있는 변수값들을 넣으라는(INSERT INTO) SQL문이었다.

뚫어지게 쳐다보며 아이, 엔, 에스 식으로 한 글자씩 확인하다가 미심쩍은 곳을 발견했다. 바로 mail이라는 컬럼명이었다.

그리고 하이디 SQL로 내 MySQL DB로 들어가 내가 mail 컬럼을 만들었는지 확인했다.

 

없었다. 그럼 이 컬럼만 추가해주면 정상적으로 될 거라 생각해서, pw와 date 컬럼 사이에 mail 컬럼을 만들어주고 새로고침해서 다시 회원가입을 시도했다.

그러자 정상적으로 회원가입이 이뤄졌고, 로그인도 되고 하이디 SQL에서 SELECT * FROM 문을 날렸을 때도 정상적으로 내가 입력한 값들이 쿼리 결과화면에 나오는 걸 확인했다.

 

Undefined index 에러는 MySQL에서 DB 컬럼을 빼먹고 냅다 <?php ?> 안에 변수 선언해도 생긴다는 걸 확인했다.

이 실수 때문에 1시간 반 정도 삽질했지만 이것도 나중에는 경험이 될 거라 믿는다.

반응형
Comments