2012-11-14 3 views
0

사용자 배열이 있습니다. user_login이 테이블의 행과 일치하면 ID와 이름 등을 선택합니다. 아래의 쿼리를 사용하면 '프로필'에 대한 두 개의 링크가 정확하고 하나는 잘못 반환됩니다. 어떻게하면 잘못된 것을 제거 할 수 있습니까?이 foreach 문에서 두 가지 결과가 나타납니다.

function fetch_new_users() 
     { 
      $result = mysql_query("SELECT `id`, `username` FROM `users` WHERE username='{$_SESSION['user_login']}'"); 
      $mysql = mysql_fetch_assoc($result); 

      return $mysql; 
     } 

     $users = fetch_new_users(); 
     ?> 
     <? 
     if (isset($_SESSION["user_login"])) { 

     ?> 
     <div class="fnav"> 


       <?php foreach($users as $user): ?> 
          <p> 
           <a href="profile.php?id=<?php echo $user['id']; ?>" >Profile</a> 
          </p> 
         <?php endforeach; ?> 
+0

var_dump ($ users)에서 얻은 것은 무엇입니까? – GBD

+0

'fetch_new_users()'안에'mysql_num_rows ($ result)'를 반향하여 1 또는 2가 튀는 지 확인하십시오. – asprin

+2

사용자 이름 대신 세션에 사용자 ID를 저장해야합니다. –

답변

2

mysql_fetch_assoc()는 제 리턴 행의 선택된 필드 배열을 반환 즉 $users 두 키 "ID"및 "사용자 이름"으로 배열 될 것이다. 따라서, 여기 foreach 루프를 사용하여도 아무런 문제가 없다 :

<div class="fnav"> 
    <p> 
     <a href="profile.php?id=<?php echo $users['id']; ?>">Profile</a> 
    </p> 
    ... 
1

함수는 두 개의 변수, 및 idusername를 포함하는 배열을 반환한다. 당신이 그것을 호출하는 방법으로

, 당신은 그래서 배열의 배열을 기대하고 있습니다 : 또한

function fetch_new_users() 
{ 
    $result = mysql_query("SELECT `id`, `username` FROM `users` WHERE username='{$_SESSION['user_login']}'"); 
    $user = mysql_fetch_assoc($result); 
    mysql_free_result($result); 
    return array ($user); 
} 

<?php php foreach($users as $user): ?> 

참고하면 데이터가 실제로 있는지 확인하지 않는 것을; fetch_new_usersFalse을 반환 할 수 있습니다.

마지막으로 함수가 하나의 단일 항목을 반환하기 때문에 마지막으로 foreach 루프에서 많이 사용하지 않습니다. 하지만 다른 곳에서 코드를 재사용 할 것을 기대합니다.

<?php 

// If user_login is unset, fetch_new_users will fail, so it makes sense 
// to check it *before* calling. 

if (isset($_SESSION["user_login"]) 
{ 
    $users = fetch_new_users(); 
    if (false === $users) 
    { 
     // The query failed. Output something to explain why we won't display profiles 
    } 
    else 
    { // This section will have to be closed later on 

?> 

    <div class="fnav"> 
    <?php foreach($users as $user): ?> 
     <p> 
      <a href="profile.php?id=<?php echo $user['id']; ?>" >Profile of <?php echo $user['username']; ?></a> 
     </p> 
    <?php endforeach; ?> 

또는 count($users) 1인지 여부는 확인할 수 있습니다 :

그래서를 마무리합니다. 위의 코드는 단일 사용자의 정보 또는 여러 사용자의 정보 (다른 기능에 의해 제공되어야하거나 fetch_new_users()의 다른 구현을 제공해야 함)를 표시하는 데 사용될 수 있습니다.

관련 문제