HTML에서 표를 만드는 태그는 다음과 같다.
<TABLE> <TR> <TD>셀1</TD> <TD>셀2</TD> </TR> </TABLE>
<TR> 은 행을 구분지어주고 <TD>는 한 셀을 구분지어준다.
(각각 "Table Row" 와 "Table Data" 의 약자로 생각하면 기억하기 쉽다.)
PHP 문을 <TABLE> </TABLE> 태그로 둘러싸고, 앞서 임시 구분자로 " | " 를 적어놓은 것을 다음과 같이 바꾸자.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <TABLE border=1> <?php $list = file("list.txt"); $result = mysqli_query($conn, "SELECT * FROM user_data"); $i = 0; while($i<count($list)){ $log = $list[$i]; $log = rtrim($log, "\r\n"); $row = mysqli_fetch_row($result); echo "<TR><TD>",$row[0],"</TD><TD>",$row[1],"</TD><TD>",$row[2],"</TD><TD>",$row[3],"</TD></TR>"; // echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log); // echo "</br>"; $i = $i + 1; } ?> </TABLE> </body> </html>
결과는 다음과 같다.
표가 성공적으로 출력되었다.
하지만 만일 열이 많다면 이렇게 일일이 써줄 수는 없는 노릇, 반복되는 부분을 찾아보자.
다음 부분이 반복되고 있다.
<TD>",$row[0],"</TD><TD>",$row[1],"</TD><TD>",$row[2],"</TD><TD>",$row[3],"</TD>
<TR> 까지 놓고 반복이 좀더 잘 보이도록 줄바꿈을 하면 다음과 같다.
"<TR> <TD>",$row[0],"</TD> <TD>",$row[1],"</TD> <TD>",$row[2],"</TD> <TD>",$row[3],"</TD> </TR>"
이 부분을 while(){} 을 이용하여 좀 더 효율적으로 바꾸어 보자.
$row[0], $row[1], $row[2], $row[3] 를 출력하는 것이므로 $row[$j]로 변수를 지정해 주고 while(){} 을 작성하면 되겠다.
echo "<TR>";
$j = 0;
while($j<4){
echo "<TD>",$row[$j],"</TD>";
$j = $j + 1;
}
echo "</TR>";
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <TABLE border=1> <?php $list = file("list.txt"); $result = mysqli_query($conn, "SELECT * FROM user_data"); $i = 0; while($i<count($list)){ $log = $list[$i]; $log = rtrim($log, "\r\n"); $row = mysqli_fetch_row($result); echo "<TR>"; $j = 0; while($j<4){ echo "<TD>",$row[$j],"</TD>"; $j = $j + 1; } echo "</TR>"; // echo sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log); // echo "</br>"; $i = $i + 1; } ?> </TABLE> </body> </html>
결과는 동일하다.
$j<4 부분도 열이 많아지면 일일이 셀 수 없으므로 '열의 개수만큼' 이라고 지정해 주어야 할 것이다.
mysqli_num_fields() 함수가 주어진 테이블에서 열의 개수를 세는 역할을 담당한다.
다음과 같이 쿼리 결과를 담은 $result 변수의 열 개수를 세면 되겠다.
echo "<TR>"; $j = 0; while($j<mysqli_num_fields($result)){ echo "<TD>",$row[$j],"</TD>"; $j = $j + 1; } echo "</TR>";
이제 모든 준비가 완료되었으므로 쿼리 부분을 2017/09/14 - [PHP] - [PHP] DB에서 특정 행들만 가져오기(5) - 변수를 바꾸어 문자열 출력 sprintf() 에서 만들어 놓은 것으로 바꾸어 주자.
매번 쿼리를 바꾸어 가며 질의해야 하므로 mysqli_query() 는 while(){} 안으로 들어와야 함에 주의한다.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <TABLE border=1> <?php $list = file("list.txt"); $i = 0; while($i<count($list)){ $log = $list[$i]; $log = rtrim($log, "\r\n"); $result = mysqli_query($conn, sprintf("SELECT * FROM user_data WHERE log_num='%d'", $log)); $row = mysqli_fetch_row($result); echo "<TR>"; $j = 0; while($j<mysqli_num_fields($result)){ echo "<TD>",$row[$j],"</TD>"; $j = $j + 1; } echo "</TR>"; $i = $i + 1; } ?> </TABLE> </body> </html>
사실 sprintf() 에 입력한 쿼리 부분도 다음과 같이 나누어 적으면 좀 더 보기 쉽다.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <TABLE border=1> <?php $list = file("list.txt"); $i = 0; while($i<count($list)){ $log = $list[$i]; $log = rtrim($log, "\r\n"); $query = "SELECT * FROM user_data WHERE log_num='%d'"; $result = mysqli_query($conn, sprintf($query, $log)); $row = mysqli_fetch_row($result); echo "<TR>"; $j = 0; while($j<mysqli_num_fields($result)){ echo "<TD>",$row[$j],"</TD>"; $j = $j + 1; } echo "</TR>"; $i = $i + 1; } ?> </TABLE> </body> </html>
결과는 다음과 같다.
프로세스는 이렇다.
$i = 0 으로 while() 이 처음 실행된다.
mysqli_query() 는 $list 의 첫 번째 값으로 쿼리를 DB에 질의하고 결과를 $result 에 담는다.
mysqli_fetch_row() 는 $result 의 첫 행을 가져와 $row 에 배열의 형태로 담는다.
그 다음 while() 문에서 $row 의 각 요소를 출력한다.
$i = 1 로 while() 이 다시 실행된다.
mysqli_query() 는 $list 의 두 번째 값으로 쿼리를 DB에 질의하고 결과를 $result 에 담는다.
mysqli_fetch_row() 는 두 번째 실행되므로 두 번째 행을 가져오는... 게 아니라
$result 가 새롭게 갱신되었으므로, 마치 처음 실행되는 것처럼 갱신된 $result 의 첫 행을 가져와 $row 에 배열의 형태로 담는다.
그 다음 while() 문에서 $row 의 각 요소를 출력한다.
이렇게 해서 PHP 로 원하는 결과를 얻었다.
다음 포스트에서는 마지막으로 열의 이름을 가져오는 방법을 알아보자.
'PHP' 카테고리의 다른 글
[PHP] 회원들의 재구매율 알아보기(3) - 날짜 계산하기 strtotime() (0) | 2017.09.26 |
---|---|
[PHP] 회원들의 재구매율 알아보기(2) - 두 배열 비교하기 in_array() (0) | 2017.09.25 |
[PHP] 회원들의 재구매율 알아보기(1) - MySQL 컬럼(열)을 배열로 만들기 (0) | 2017.09.24 |
[PHP] mysqli_fetch_row, assoc, array 의 차이 (4) | 2017.09.20 |
[PHP] DB에서 특정 행들만 가져오기(8) - DB 에서 열 이름 가져오기 (0) | 2017.09.19 |
[PHP] DB에서 특정 행들만 가져오기(6) - 쿼리 작성하기 mysqli_query() (0) | 2017.09.17 |
[PHP] DB에서 특정 행들만 가져오기(5) - 변수를 바꾸어 문자열 출력 sprintf() (0) | 2017.09.14 |
[PHP] DB에서 특정 행들만 가져오기(4) - 반복문 while(){} (0) | 2017.09.13 |
[PHP] DB에서 특정 행들만 가져오기(3) - 목록 읽어오기 file() (0) | 2017.09.12 |
[PHP] DB에서 특정 행들만 가져오기(2) - PHP 로 MySQL DB 제어하기 (0) | 2017.09.11 |
댓글