2014-04-13 3 views
0

기본적으로 변수 $ shopid를 사용하여 어떤 상점이 선택되었는지 파악하고 있습니다. 나는 이제 각 상점 페이지에 주석을 달 수 있도록 주석 시스템을 만들려고 노력 중입니다. 내 SELECT 쿼리 내 INSERT에서 같은 변수를 사용하려고하면이 작동하지 않는 이유는, 단순히 0변수가 INSERT에서 인식되지 않지만 SELECT에서 작동 중임

<?php 

database connection 

session_start(); 
    if (isset($_SESSION['logged'])){ 
    $s_userID = $_SESSION['userID']; 
    $shopid = $_GET['page_id']; 
    $str_shops = ''; 

     //bring shop data 
     mysqli_select_db($db_server, $db_database); 
     $query = "SELECT * FROM shops WHERE shopID = '$shopid'"; 
     $result = mysqli_query($db_server, $query); 
      if (!$result) die("Database access failed: " . mysqli_error($db_server)); 
      while($row = mysqli_fetch_array($result)){ 
       $str_shops .= "<div class='result'><strong>" . 
       $row['image1'] . "<br><br>" . 
       $row['name'] . "</strong><br><br>" . 
       $row['address'] . "<br><br>" . 
       $row['website'] . "<br><br>" . 
       $row['openinghours'] . "<br><div class='justifytext'>" . 
       $row['more'] . "<br><br></div><strong>What do they sell?</strong><br><br><div class='justifytext'>" . 
       $row['sold'] . "<br><br></div></div>"; 
      } 

     //post comment 
     mysqli_select_db($db_server, $db_database);    
     $comment = $_POST['comment']; 
     if ($comment != '') { 
       $query = "INSERT INTO comments (userID,shopID,comment) VALUES ('$s_userID', '$shopid', '$comment')"; 
       mysqli_query($db_server, $query) or 
       die("Insert failed: " . mysqli_error($db_server)); 
       $commentmessage = "Thanks for your comment!"; 
     }   

    mysqli_select_db($db_server, $db_database); 
    $query = "SELECT * FROM comments"; 
       $result = mysqli_query($db_server, $query); 
       if (!$result) die("Database access failed: " . mysqli_error($db_server)); $i = 0; 
       while($row = mysqli_fetch_array($result)){ $i++; 
       $str_comments.= "<p><div id='displaycomments'>" . $row['username']. ", " . 
          $row['commdate'] . ": <br>" . 
         $row['comment'] . "</div>"; 
     } 

} 


echo $str_shops; 
echo $commentmessage; 
echo $str_comments; 

mysqli_close($db_server); 
?> 

사람이 볼 수 게시 $의 shopid을 인식하고 내가 그것을 사용하는 것이 가능합니까? 오류가 발생하지 않고 테이블의 shopID 열에 0을 단순히 추가하는 것입니다.

+1

** 관련없는 : ** 당신은 ** SQL 주입 공격에 ** 활짝 열려 있고, 당신이하지 않은 경우 당신은 해킹됩니다 이미. 이 문제가 발생하지 않도록 준비/매개 변수화 된 쿼리를 사용하십시오. [PHP에서 SQL injection을 막을 수있는 방법은 무엇입니까?] (0120-13753) –

+0

'$ query'를 에코하여 출력을 복사하고 SQL 관리 도구 (예 : phpmyadmin)에서 실행하십시오.). 그런 다음 결과를 게시하십시오. – potashin

답변

0

제 생각 엔 shopID 열이 INT 데이터 유형이되고 삽입 문에서 문자열이 전달되는 이유는 0이 저장되는 이유입니다.
처럼 $shopid 주위에 따옴표를 제거하여 다시 시도 this-

INSERT INTO comments (userID,shopID,comment) VALUES ('$s_userID', $shopid, '$comment')" 
                    ^^^^^^^ remove the single quotes 
+0

그게 저에게 남겨 둡니다 : "삽입 실패 : 당신은 SQL 문법에 오류가 있습니다. ("hello "근처에서 사용할 올바른 문법은 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오) 'at line 1' 댓글 상자에) – Kathryn

+0

@ Kathryn은 작은 따옴표를 모두 제거 했습니까? 열 shopID의 데이터 유형은 무엇입니까? – Kamehameha

+0

그래, 둘 다 제거 했어! 이름 : shopID 유형 : int (11) Null : 예 \t 기본값 : NULL, 내 사용자 ID와 동일하므로 왜 삽입되지 않는지 이해할 수 없습니다. – Kathryn

관련 문제