2011-11-08 3 views
0

안녕하십니까, 이것은 스택 overflow.com의 내 첫 번째 게시물입니다. 장바구니를 만들려고합니다. 값은 2 차원 테이블의 세션에 저장됩니다. 첫 번째 값은 데이터베이스에있는 항목 ID, 두 번째 항목 수를 나타냅니다.장바구니에서 unset()을 사용하여 항목을 제거하면 mysql 오류가 발생합니다.

foreach($cart_array as $row){ 
    $sql = "SELECT * FROM prod_table WHERE id=".$row['0'].""; 
    $cart_result = mysql_query($sql, $conn); 
    while ($array = mysql_fetch_array($cart_result)) { 
     echo "<tr><td>". $array[manufacturer] . "</td>"; 
     echo "<td>". $array[model]."</td>"; 
     echo "<td>".$row['1']."</td>"; 
     $cart_value = $array[price]*$row['1']; 
     //sum and store value of all products 
     $total_cart_value += $cart_value; 
     echo "<td>&pound;" .$cart_value. "</td>"; 
     echo "<td><a href='search.php?kick_id=".$row['0']."'>Remove</a></td></tr>"; 

확인, 항목 폼 카트 사용자가 클릭 제거한 다음 그는 같은 페이지로 다시 전송되고있는 (어떤 이유로 내가 GET 방식으로 $ _SERVER [ 'PHP_SELF'을} 사용하는 데 어려움이 있었다 제거하는 ...) 그리고 unset 기능을 사용하여 $ cart_array에서 한 쌍의 값을 제거 할 코드의 다른 부분이 트리거됩니다.

if(isset($_GET['kick_id'])) { 
    $t = count($cart_array); 
    for($u = 0; $u < $t; $u++){ 
     if ($cart_array[$u]['0'] == $_GET['kick_id']){ 
      unset($cart_array[$u]['0']); 
      unset($cart_array[$u]['1']); 
      echo " Item has been removed from your cart"; 
      $cart_array = array_values($cart_array); 

그리고 실제로 대신 실행하는 지금,하지만 값의 쌍을 제거 원활는 오류 메시지를 표시합니다 경고 :로 MYSQL_ASSOC를() : 공급 인수가 ... 유효한 MySQL의 결과 리소스 아니다 나는 가정이 오류를 일으키는 세션 배열에서 삭제 된 값의 "추적"이어야합니다. 코드를 수정하는 방법? 값을 삭제하는 다른 방법/접근 방법이 있습니까 ??

답변

0

하여 사용할 수있는 결과는 그 가정 ... 당신이 잘못하고있는 것입니다

.
프로그래머는 절대로 "가정"하면 안됩니다. 프로그래머는 특정이 될 수 있습니다.
가정은 당신을 길을 잃고 시간을 낭비 할 것입니다 (질문을 할 때 다른 사람들의 시간을 낭비 할 것입니다). 실제 원인 문제의을 찾기 위해 조사 -

자, 어떤 디버깅을해야한다. supplied argument is not a valid MySQL result resource 오류는 쿼리에 오류가 있음을 의미합니다. 따라서 오류가 무엇인지 확인해야합니다. 따라서 모든 오류를 확인하는 방식으로 모든 yoiur 쿼리를 실행하십시오. 가장 간단한 방법은

$cart_result = mysql_query($sql, $conn) or trigger_error(mysql_error()." in ".$sql); 

이고 코드를 다시 실행하십시오.
화면이나 로그 파일과 같은 일반적인 위치에서 SQL 오류가 발생합니다.

오류의 의미를 파악하고 코드를 직접 수정할 수없는 경우 질문을 할 시간입니다. 확실하고 직접적인 질문이며, 가정 중 막연한 질문이 아닙니다.. 잡았다 고?

1

unset($cart_array[$u])은 포함되어 있지 않으며 두 개의 키만 표시됩니다. $cart_array[$u]['0']'1'을 설정하지 않으려면 $cart_array[$u]의 설정 만 취소하십시오. 첫 번째 부분에

1) :이 문제를 해결하는 방법은 두 가지가 있습니다

+0

덕분에 도움이되었습니다. –

0

foreach($cart_array as $row){ 
    if(empty($row[0]) 
    continue; 
    $sql = "SELECT * FROM prod_table WHERE id=".$row['0'].""; 
    [...] 

2) 대신 해제 ($의 cart_array의 항목을 제거 할 때 [$ U] [ ' 0 ']); 왜하지 않는가 ($ cart_array [$ u]); ?

0

아마이

while ($array = mysql_fetch_array($cart_result)) { 

가이 문제를 일으키는 것입니다. 오류를 기반으로합니다. 이 경우 확인 및 결과 가져 오기 시도하기 전에

if(mysql_num_rows($cart_result)>0){ 
    while ($array = mysql_fetch_array($cart_result)) { 
//rest code here 
} 
+0

예, php는이 코드 행이라고 말합니다. 그러나 장바구니가 비어있는 경우 세션을 파괴하는 코드의 또 다른 부분이 있습니다. 문제가 빈 카트를 표시하지 않습니다. 입력 해 주셔서 감사합니다. –

+0

그래도이 줄이면 foreach 루프가 트리거 되어도 여전히 cart_result를 얻으려고하기 때문에 쿼리 결과에 문제가있을 수 있습니다. 나는 왜 내가 추측하고있는 전체 코드를 보지 못한다. o)이 오류가 발생하기 전에 쿼리가 어떻게 보이는지 $ SQL을 에코하려고 했습니까? – Kokers

관련 문제