2014-06-10 1 views
0

예를 들어 웹 사이트에 즐겨 찾기 시스템을 구현하려고합니다. stackoverflow.com에서 : 별 아이콘을 클릭하면 이미지가 교환되어 현재 즐겨 찾기로 표시됩니다. 제 경우에는 단지 질문이 아니라 즐겨 사용하는 사용자입니다. 지금까지 큰 문제는 없습니다.즐겨 찾기 : '에코'내에서 적절한 아이콘을 동적으로로드 하시겠습니까?

그러나 나는 PHP/MySQL을 으로 기억하고 있습니다. 사용자는 현재 방문자의 즐겨 찾기이며 페이지로드시 사용할 각 아이콘을 동적으로 결정합니다. 기능없이 , 내 (다소 단순화 된) 코드는 다음과 같습니다 : 나는 응용 프로그램은 현재 방문자의 즐겨 찾기를 기억 할 수있는 방법

enter image description here

: 이것은 내 데이터베이스

<?php 
$q = "SELECT id, username FROM users"; 
$r = mysqli_query($dbc, $q); 

    while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) { 

    //Insert nested query here (explanation and code see below) 

    // Display each user: 
    echo '<div class="favorit"><input class="user_id" type="hidden" name="user_id" value="'.$row['id'].'"><img src="../img/ ' .$img_name. ' " alt="" class="icons"/><br>Favorit</div>'; //generates error "Notice: Undefined variable: img_name in C:\xampp\htdocs\..." 

    } 
?> 

입니다 해당 아이콘 $ img_name을 표시 하시겠습니까? 내 생각 엔 위의 첫 번째 내부 중첩 된 쿼리를 수행했지만, 난 그것을 작동시킬 수 없습니다 : 중첩 된 쿼리의

코드 (위의 코드에 삽입) :

//query the favorites of the current visitor: 
$q2 = "select favorite_id from favorites where users_id=" . $_SESSION['reg_user_id'] . ""; 

    $r2 = mysqli_query($dbc, $q2); 

    //there may be more favorites, so loop through them:   
    while($row2 = mysql_fetch_array($r2, MYSQLI_ASSOC)){ //generates error "Warning: mysql_fetch_array() expects parameter 1 to be resource, object given in C:\xampp\htdocs\..." 


     //if the respective user is a favorite: 
     if($row2['favorite_id'] == $row['id']){      

     $img_name = "favorite_full.svg"; 
     }      
     else { 
     $img_name = "favorite_contour.svg"; 
     } 
    } 

내가 얻을 다음과 같은 오류 메시지가 (또한 위의 코드 주석을 참조)

  1. 경고 :로 MYSQL_ASSOC를() 매개 변수 1은 C에서 주어진 자원, 객체가 될 것으로 기대 : \ XAMPP \ htdocs에 ...
  2. 공지 사항 : 정의되지 않은 변수 : img_name C : \ xampp \ htdocs ...

고맙습니다!

답변

1

사용 조인 : 내가했다 "동안"중첩 중 하나 $의 img_name 인스턴스의 선언을 이동 (교환 mysqli_fetch_array에는 mysql_fetch_array) 프레드 -II-의 힌트에

"SELECT u.id, u.username, f.favorite_id IS NOT NULL AS is_favorite 
FROM users AS u 
LEFT JOIN favorites AS f 
    ON u.id = f.favorite_id 
    AND f.users_id = {$_SESSION['reg_user_id']}" 
+0

감사합니다,하지만 난 여전히 같은 오류 메시지를 얻을 : 중첩 된 쿼리의

새로운 코드 (위의 코드에 삽입) 1.Warning :로 MYSQL_ASSOC를() 매개 변수 1이 될 것으로 예상 리소스, C : \ xampp \ htdocs에 주어진 객체 ... 2.Notice : 정의되지 않은 변수 : img_name in C : \ xampp \ htdocs ... – bromelio

+2

MySQL API를 혼합하고 있습니다. @bromelio 당신은 mysql_fetch_array()를 사용하여 연결하고 쿼리하기 위해 mysqli_ * 함수를 사용한다. –

+0

당신은 코드 완성에 너무 많이 의존하면서, 나는 옳다. mysqli_fetch_array에서 "i"를 놓쳤다. 그 첫 번째 오류 메시지, 위대한 해결! 두 번째 경우에는 중첩 된 "while"중 하나의 $ img_name-instance 선언을 추가로 이동해야했지만 이제는 매력처럼 작동합니다. @Fred -ii- – bromelio

0

감사합니다 코드를 작동시킬 수 있습니다.

    $img_name = "favorit_kont.svg"; 
        $q2 = "select favorite_id from favorites where users_id=" . $_SESSION['reg_user_id'] . ""; 
        $r2 = mysqli_query($dbc, $q2); 

        //loop through favorites:   
        while($row2 = mysqli_fetch_array($r2, MYSQLI_ASSOC)){ 

         //if the respective user is a favorite: 
         if($row2['favorite_id'] == $row['id']){      

         $img_name = "favorit.svg"; 
         }      
        } 
+1

JOIN으로 내 쿼리를 사용하면 중첩 루프가 필요하지 않습니다. 모든 것이 하나의 루프로 이루어집니다. – Barmar

+0

위대한, 고마워, 나는 당신의 대답을 upvoted했습니다! @Barmar – bromelio

+0

"is_favorite"가 1 인 레코드도 필터링 할 수 있습니까? @Barmar – bromelio

관련 문제