php

[php] Undefined variable, Undefined index 에러 해결

php 에서 Undefined variable, Undefined index 에러메세지는 값(변수)이 제대로 정의되지 않아 발생하는 오류이다. 값이 없는 경우를 대비해서 아래처럼 미리 지정을 해주어야한다. [에러 해결방법] isset()를 사용한 변수 선언 에러메세지가 Undefined variable : XX in /web/home/, Undefined index : XX in /web/home/ 이런식으로 뒤에 어떤 변수에 대한 오류인지 뜰텐데, 해당 변수를 isset()함수를 사용하여 값을 정해줘야한다. 해당 변수에 대한 값이 있으면 해당값을 보여주고 아니면 공백으로 값을 전달할 수 있도록 해야한다. $value = isset($_POST['value']) ? $_POST['value'] : '';..

[php] 입력 필드 쪼개기 (체크박스 값 DB 저장)

체크박스 또는 여러개의 입력필드 내용을 한 필드안에 저장해서 사용해야하는 경우가 있다. 아래와 같이하면 필드 하나에 데이터를 저장해 관리할 수 있다. 글쓰기 페이지 코드 'wr_1'라는 필드를 쪼개서 사용할 것이다. 값을 받을 체크박스 name은 임의로 관리하기 편한 이름으로 지정하면 된다. (type1~type4) * wr_1 : 값을 저장할 필드 (type1~type4에서 받은 값을 wr_1에 한번에 저장한다) * type1~type4 : 임의로 값을 받을 필드 (DB에 해당 필드 없음) [코드 설명] - 상단의 $wr1 = explode("|", $write['wr_1']); 와 체크박스 태그 안의 checked 부분은 글쓰기 페이지를 수정 페이지로도 사용하는 경우에 필요하다. 해당 값이 있는 경우..

[Sql/php] rownum 결과 값에서 몇번째 행인지 구하기

SQL 쿼리를 통해 데이터를 가져와서 해당 데이터가 몇번째에 위치해 있는지 구할때 ROWNUM 기능을 활용해 불러올 수 있다. 나의 경우에는 해당 날짜의 주문건을 불러와 주문번호 순서대로 1부터 차례대로 번호를 매기는 작업이 필요하여 아래와 같이 쿼리문을 작성하였다. SELECT @ROWNUM: = @ROWNUM + 1 AS rownum, od_id FROM table as a, ( SELECT @ROWNUM: = 0 ) r WHERE od_invoice_time between '2023-05-31 00:00:00' and '2023-05-31 23:59:59' ORDER BY od_id ASC 그러면 이렇게 조건에 해당하는 데이터들이 순서대로 번호가 매겨지게 된다. 이 중에서도 특정 데이터가 몇번째에 ..

[php] mysql 결과 카운트 / 행 개수 구하기

테이블의 데이터 총개수를 구하고 싶을 때 아래와 같이 함수를 사용해 개수를 구할 수 있다. [방법1] sql_num_rows() 함수 사용 테이블 행 개수는 sql_num_rows 함수로 간편하게 구할 수 있다. 쿼리문으로 데이터도 가져오면서 개수도 세야 할 때 유용하게 사용이 가능하다. sql_num_rows 함수는 리절트 셋(result set)의 총 결과 값 개수를 숫자로 반환한다. php5 이상부터는 mysqli_num_rows로도 사용 가능하다. $sql = " SELECT * FROM table ----- "; $result = sql_query($sql); //sql_query($db_conn, $selSql); $count = sql_num_rows($result); echo $count;..

[php] csv 파일 다운 한글 깨짐 해결 방법

온라인상에서 csv파일로 데이터를 다운받게하면 종종 한글이 깨져보일 때가 있다. 메모장으로 열어서 EUC-KR로 변경한 뒤 저장한다음 엑셀로 여는 방법도 있지만, 일일히 변경해서 열려면 번거롭다. 한글이 깨져보이지 않고 csv 파일을 다운 받을 수 있도록 아래 코드들을 추가하여 해결이 가능하다. 1) charset을 UTF-8로 설정한다. header('Content-type: text/csv; charset=utf-8'); 2) header아래쪽에 echo "\xEF\xBB\xBF"; 한줄(엔티안이라고 부른다고 한다)을 추가한다. echo "\xEF\xBB\xBF"; * 참고로 \xEF\xBB\xBF 이 문자는 UTF-8을 16진수로 표기한 것인데, 특정 문구를 넣어서 문서가 제대로된 캐릭터셋 값을 가..

[php] 에러메시지 나타내기 / php 오류 찾기

php 코드작업을 하다가 제대로 작동안할 때, 일부러 에러메세지를 출력하여 어디서 오류가 났는지 확인 할 수가 있다. 아래 코드를 파일 안에 넣어준다. 그러면 아래처럼 코드를 추가한 페이지에 에러메세지가 뜨게 된다. 이 에러메세지를 확인한 후, 알맞게 코드를 수정하면 된다. 아래 메세지의 경우에는 변수들이 제대로 정확히 정의되지 않아서 발생한 에러이다. 반대로 에러메세지가 뜨는 경우, 뜨지 않게 하려면 아래 코드를 추가하면 된다.

[php] Warning: Illegal string offset 'file' 오류수정

파일을 수정한 적도 없는데, 어느 날 갑자기 게시판 글 수정 페이지에서 파일 에러 문구가 떴다. Warning: Illegal string offset 'file' in /web/home/xxx/html/skin/board/basic/write.skin.php on line 156 Warning: Illegal string offset 'source' in /web/home/xxx/html/skin/board/basic/write.skin.php on line 157 Warning: Illegal string offset 'size' in /web/home/mymoodae/html/skin/board/basic/write.skin.php on line 157 글 신규 등록시에는 뜨지 않는 에러인데, 첨부..

[php] PHPExcel 엑셀로 데이터 다운받기

1. PHPExcel 다운받기 PHPExcel은 데이터를 엑셀로 다운받을 수 있게 해주는 라이브러리이다. https://github.com/PHPOffice/PHPExcel 홈페이지에서 다운받거나 아래 파일을 다운 받는다. 2. 다운로드 파일 코드 별도의 php파일을 만든 후, 파일 상단에 include_once('/PHPExcel.php');를 넣어 PHPExcel.php을 불러온다. include_once('/PHPExcel.php'); 그 다음으로 SQL문 등 데이터를 가져오는 구문들을 넣어주고 $rows[] = array(1열데이터,2열데이터, 3열데이터, 4열데이터, 5열데이터); 이런식으로 array()안에 데이터를 콤마로 구분하여 넣어준다. 나는 세개의 시트로 나누어서 다운받게 할 예정이라 ..

fullcalendar 이벤트 표기 안되는 오류 (Fatal error: Cannot redeclare class Event)

FullCanlendar는 자바스크립트 기반으로 월별/주별/일별 다양한 포멧으로 달력 기능을 제공해주는 오픈소스이다. https://fullcalendar.io/ FullCalendar - JavaScript Event Calendar Open Source... With over 10 years of open source and over 120 contributors, FullCalendar will always have a free and open source core. Learn more fullcalendar.io 잘 잘동하던 fullcalendar가 갑자기 어느날 부터 이벤트를 달력에 표기하지 못하는 오류가 발생. 1. 오류 찾기 fullcalendar 파일 중 이벤트를 불러오는 get-event..

php + ajax return false 처리하기

php로 폼 내용을 전송하는 경우, 폼 스크립트 안에 ajax를 넣어 값을 체크한 뒤에 문제가 없는 경우 전송하는 스크립트를 짜는데, ajax success 안에 바로 return false를 쓰니 제대로 실행되지 않고 그냥 submit이 되어버렸다. 해결 방법은 ajax 구문안에 return false를 직접적으로 쓰기보다는 스크립트 상단 부분에 rtn=false;를 정의한뒤 ajax 구문안에서 실패한 경우 rtn = false; 성공한 경우 rtn = true 값을 넣어주고 스크립트 맨 마지막에 return rtn을 호출하면 된다. 이때 ajax 구문안에 async: false를 꼭 넣어줘야한다. function checkform() { var rtn = false; // 변수선언 $.ajax({ t..

[php] strpos(), strrpos(), in_array() 특정 문자열 검색하기

strpos()와 strrpos() 함수는 strstr()과 유사한 방식으로 동작한다. 하지만 strpos()의 실행 속도가 더 빠르기 때문에 strstr()대신 strpos()의 사용을 권장한다고 한다. 문장이나 특정 변수에서 특정 문자가 있는지 체크하려면 strpos(), strrpos() 함수를 사용하면 된다. strpos([대상 문자열], [조건 문자열]) strpos([대상 문자열], [조건 문자열], [검색시작위치(숫자)]) strrpos([대상 문자열], [조건 문자열]) strrpos([대상 문자열], [조건 문자열], [검색시작위치(숫자)]) 둘의 차이는 strpos 함수는 영문자의 대소문자를 구별하여 검색한다. 영문자 대소문자를 구별하지 않고 검색하려면 strrpos()함수를 사용하면 ..

[php] sql 구문으로 테이블 값 가져오는 방법

기본 sql 구문 $sql = " select * from 테이블명 where wr_is_comment = '0' and wr_id = '{$view['wr_id']}' "; $row = sql_query($sql); 이 기본 구문은 배열로 보여주기 때문에 보통 for 문과 함께 많이 사용한다. 아래와 같이 for문과 함께 사용하면 해당되는 값을 모두 불러온다. [for문과 함께 사용 예시] $sql = " select * from 테이블명 where wr_is_comment = '0' "; $result = sql_query($sql); for ($i=0; $row=sql_fetch_array($result); $i++) { echo $row['id']; } where 조건절에 해당하는 값이 딱 한개만..

[php] sql 쿼리 반복문으로 데이터를 불러오는 여러가지 방법 (for문, while문)

어떤 코드를 반복적으로 사용할 때 for문과 while문을 많이 사용한다. for문 vs. while문의 차이점은 for문은 반복 횟수가 정해져있을 때 주로 사용하고, while문은 반복 횟수가 정해져있지 않고, 값이 있는 만큼 계속 반복해서 보여줄 때 사용한다. for문 예시 sql문 + for문 보통 이 경우는 sql 조건문에 해당하는 자료 갯수 구해서 갯수만큼 뿌려오도록 하는데 아래 처럼 모두 나오게 할 수도 있다. while문 예시 sql문 + while문

[php] ajax를 활용하여 좋아요 버튼 만들기

각 상품별 상품 사용 리뷰마다 좋아요 버튼을 추가하는 작업을 하였다. 좋아요 버튼 클릭시 페이지 이동을 하지 않고 그 자리에서 바로 좋아요 숫자가 변경되고, 채워진 하트로 바뀌고, 다시 클릭했을 때는 좋아요 숫자가 -1 감소되고, 다시 빈 하트로 보여주기 위해서 ajax를 활용하였다. 1. 좋아요 테이블 생성 먼저 좋아요 기능에 필요한 테이블을 하나 추가하고, 필드를 추가한다. rg_id : 좋아요 데이터 아이디 it_id : 상품 id (상황에 따라 생략가능) is_id : 상품평 아이디 (상황에 따라 생략가능) mb_id : 회원아이디 rg_datetime : 좋아요 누른 시간 2. 좋아요 버튼을 넣을 자리에 추가 상품 후기를 여러개를 불러오기 때문에 btn_like버튼 아이디 값에 각각의 고유 번호..

[php] explode 배열 값 있는 것만 콤마로 구분해서 보여주기

체크박스를 통해서 값을 받고 | 를 구분자로 배열로 저장하는 작업을 했다. 값을 저장하는 것 까지는 문제가 없는데, 값이 있는 경우만 불러오고 콤마로 깔끔하게 보여주는 방법을 고민해보았다. 예를 들어 아래와 같이 체크박스를 통해서 값을 받았다고하자. 좋아하는 과일을 선택하세요(중복선택가능) □사과 □배 □포도 □복숭아 □망고 사과 배 포도 복숭아 망고 | 로 구분해 값을 각각 저장하는 경우에 $fruit = "$fruit1|$fruit2|$fruit3|$fruit4|$fruit5" 와 같은 형식으로 값을 저장하게 될 것이다. 좋아하는 과일을 선택하세요.(중복선택가능) ▣사과 □배 □포도 ▣ 복숭아 □망고 예를들어 사과와 복숭아만 선택한 경우, $fruit 의 저장된 값은 사과|||복숭아|| 중간에 값이 ..