COMING SOON 🚀

채택완료

일반페이지에서 db에 저장된 데이터 불러오는 문제 문의

안녕하세요

일반페이지에서 DB에 저장된 데이터를 불러오려고 하는데 잘 안되서 이렇게 문의 드립니다.

소스코드는 다음과 같이 작성했습니다.

 

test.php

Copy
<?php

include_once('./_common.php');

if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

add_stylesheet('<link rel="stylesheet" href="'.$g5_url.'/wm_page/map/style.css">', 0);    

 

$g5['title'] = $group['gr_subject'];

include_once(G5_PATH.'/board.head.php');

 

include_once(G5_LIB_PATH.'/thumbnail.lib.php');

?>

 

<?php

$bo_table = "partner";

$wr_id = "wr_id";

 

$sql = "SELECT * FROM g5_write_".$bo_table." WHERE wr_id = '$wr_id'";

$result = sql_query($sql); // sql_query 함수를 사용하여 SQL 쿼리 실행

 

if ($result && mysqli_num_rows($result) > 0) {

    $data = array(); // 불러온 데이터를 저장할 빈 배열을 생성

 

    while ($row = mysqli_fetch_assoc($result)) {

 

        $data[] = array(

            'subject' => $row['subject'],

        );

    }

} else {

    $data = array();

}

 

// PHP 배열을 JSON 형식으로 변환하여 자바스크립트로 전달

echo '<script>';

echo 'const data = ' . json_encode($data) . ';';

echo '</script>';

?>


 

            <ul class="item_list">

            <script>

  // PHP에서 전달한 데이터를 사용

  const data = <?php echo json_encode($data); ?>;

 

  // ul 요소를 가져옵니다.

  const item_list = document.querySelector('.item_list');

 

  // data 배열을 순회하면서 li 요소를 추가

  data.forEach(item => {

    // 새로운 li 요소를 생성

    const li = document.createElement('li');

 

    // li 요소의 내용을 동적으로 생성

    li.innerHTML = `

      <div class="img">

      </div>

      <div class="info">

        <div class="tip">

          <div class="badge_wrap_mo"></div>

          <div class="badge_wrap">

            <div class="badge"></div>

          </div>

          <button class="wish_btn"><i class="fa fa-heart"></i></button>

          <p>테스트</p>

        </div>

        <div class="tit">

          <div class="price">${item.subject}</div>

 

        </div>

 

      </div>

    `;

 

    // ul 요소에 li 요소를 추가

    item_list.appendChild(li);

  });

</script>

이렇게 코드를 만들었는데 DB의 데이터를 불러오지 못하고 있습니다.

고수님들의 조언 부탁드리겠습니다.

즐거운 주말 되세요

답변 4개 / 댓글 4개

채택된 답변
+20 포인트
include_once(G5_PATH.'/board.head.php');

// 데이터베이스에 연결

$conn = new mysqli(G5_MYSQL_HOST, G5_MYSQL_USER, G5_MYSQL_PASSWORD, G5_MYSQL_DB);

 

// 연결 확인

if ($conn->connect_error) {

    die("데이터베이스 연결 실패: " . $conn->connect_error);

} else {

    echo "데이터베이스 연결 성공<br>";

}

이렇게 해보세요

답변에 대한 댓글 2개

또는 다음과 같이 할수도 있습니다.

// 데이터베이스 연결 설정
/* $servername = "G5_MYSQL_HOST";
$username = "G5_MYSQL_USER";
$password = "G5_MYSQL_PASSWORD";
$dbname = "G5_MYSQL_DB";
*/
// 데이터베이스 연결
// $conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
die("데이터베이스 연결 실패: " . $conn->connect_error);
}
db는 연결이 되었는데 DB에 저장된 데이터는 불러올 수 가 없네요 ㅠㅠ
어디가 잘못 된걸까요?

복잡한 JavaScript 보다

그냥 PHP 로 loop 돌면서 처리하면 간결할 듯하네요.

코드를 만들었는데 DB의 데이터를 불러오지 못하고 있습니다.
==
이렇게 판단하신 증상이 무엇인가요?
JavaScript 에러가 있는지 확인해 보세요

echo 'const data = ' . json_encode($data) . ';';

이렇게 하면 JavaScript 에러가 날 듯하네요

echo 'const data = "' . json_encode($data) . '";';

따옴표가 필요 할 듯하네요

 

8행에 있는 wr_id 가 잘못되었습니다

Test.php로 넘겨주는 곳이 없다면 삭제//쿼리에서도 삭제

 

 

답변에 대한 댓글 2개

안녕하세요 @균이 님 늦은 시간에 답변 주셔서 감사드립니다.
현재 DB에는 정상적으로 연결이 되었다고 나옵니다. 그런데 데이터를 불러오지를 못하는데요
혹시 시간이 되신다면 한번 검토해 주시겠어요.

조언 부탁드리겠습니다.

test.php
[code]
<?php

$conn = new mysqli(G5_MYSQL_HOST, G5_MYSQL_USER, G5_MYSQL_PASSWORD, G5_MYSQL_DB);

// 연결 확인
if ($conn->connect_error) {
die("데이터베이스 연결 실패: " . $conn->connect_error);
}/* else {

echo "데이터베이스 연결 성공<br>";
}*/

// 쿼리 작성 및 실행
$sql = "SELECT * FROM partner";
$result = $conn->query($sql);

// 데이터를 담을 배열 초기화
$data = array();

// 쿼리 결과 확인 및 데이터 추출
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
// 쿼리 결과에서 필요한 필드들을 배열로 저장
$item = array(
'wr_subject' => $row['wr_subject']
);
// 배열에 추가
$data[] = $item;
}
}

$conn->close();

echo json_encode($data);
?>

<script>
// ul 요소를 가져옴
const item_list = document.querySelector('.item_list');

// data 배열을 순회하면서 li 요소를 추가
data.forEach(item => {
// 새로운 li 요소를 생성
const li = document.createElement('li');

// li 요소의 내용을 동적으로 생성
li.innerHTML = `
<div class="img">
</div>
<div class="info">
<div class="tip">
<div class="badge_wrap_mo"></div>
<div class="badge_wrap">
<div class="badge"></div>
</div>
<button class="wish_btn"><i class="fa fa-heart"></i></button>
<p>테스트 10098</p>
</div>
<div class="tit">
<div class="price">${item.wr_subject}</div>
<div class="desc">${item.desc}</div>
<div class="loca">${item.loca}</div>
</div>
<div class="kwd">
<span>${item.type}</span>
<span>테스트 ${item.area}</span>
<svg></svg>
</div>
</div>
`;

// ul 요소에 li 요소를 추가
item_list.appendChild(li);
});
</script>
[/code]
// 쿼리 결과 확인 및 데이터 추출
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
// 쿼리 결과에서 필요한 필드들을 배열로 저장
$item = array(
'wr_subject' => $row['wr_subject']
);
// 배열에 추가
$data[] = $item;
}
}

디비가 제대로 연결되어다니 뭐 할말이좀 그렇긴한데요 그래도 이부분 체크해보세요.
이 부분은 쿼리 결과가 있을 경우에만 내부의 코드를 실행하는 부분이라는건 아시겠지만,
따라서 쿼리 결과가 없으면 데이터가 배열에 추가되지 않게 된다는거죠;;
<div class="price">${item.wr_subject}</div>
<div class="desc">${item.desc}</div>
<div class="loca">${item.loca}</div>

다음과 같이 해보세요..
// 쿼리 결과 확인 및 데이터 추출
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
// 쿼리 결과에서 필요한 필드들을 배열로 저장
$item = array(
'wr_subject' => $row['wr_subject'],
'desc' => $row['desc'],
'loca' => $row['loca'],
'type' => $row['type'],
'area' => $row['area']
);
// 배열에 추가
$data[] = $item;
}
}

답변을 작성하려면 로그인이 필요합니다.