2011-02-01 91 views
0

編碼社交網絡應用程序和Im有一些問題。我只會問其中一人,因爲我不知道這個論壇的規則,即我是否可以發佈多個問題。我正在學習PHP,正如我的代碼一樣。 我有一個表的用戶,有一個名爲pal_array的字段,其中包含您的好友的用戶的user_id。我的例子,我的朋友陣列有2個user_id的。如何在PHP中查詢數組並返回每個元素的單個行/項目

我希望能夠查詢所有的用戶的朋友,並能夠顯示他們的細節,如拇指圖片,名稱等,我不知道如何正確。

我從pals.php代碼:

<?php 
//Establish the Web Intersect Profile Interaction Token here 
if(!isset($_SESSION['wipit']))//Check to see if session wipit is set yet 
{ 
    session_register('wipit');//Be sure to register the session if it is not yet set 
} 
$thisRandNum = rand(9999999999999,999999999999999999); 
$_SESSION['wipit'] = base64_encode($thisRandNum); 
?> 
<script type="text/javascript" charset="utf-8"> 
//jquery functionality for toggling member interaction containers 
function toggleInteractContainers(x) 
{ 
    if($('#'+x).is(":hidden")) 
    { 
     $('#'+x).slideDown(200); 
    }else 
    { 
     $('#'+x).hide(); 
    } 
    $('.interactContainers').hide(); 
} 
// Pal accepting 
var palRequestURL = "request_as_pal.php"; 
var thisRandNum = "<?php echo $thisRandNum; ?>"; 
function acceptPalRequest (x) { 
    $.post(palRequestURL,{ request: "acceptPal", reqID: x, thisWipit: thisRandNum } ,function(data) { 
      $("#req"+x).html(data).show(); 
    }); 
} 
function denyPalRequest (x) { 
    $.post(palRequestURL,{ request: "denyPal", reqID: x, thisWipit: thisRandNum } ,function(data) { 
      $("#req"+x).html(data).show(); 
    }); 
} 
// End Pal accepting 
// Pal removal 
function removeAsPal(a,b) { 
    $("#remove_pal_loader").show(); 
    $.post(palRequestURL,{ request: "removePal", mem1: a, mem2: b, thisWipit: thisRandNum } ,function(data) { 
     $("#remove_friend").html(data).show().fadeOut(12000); 
    }); 
} 
// End Pal removal 
</script> 
<?php require_once('Connections/connections.php'); ?> 
<?php 
//query username 
$user_id = $_SESSION['UserSession']; 
mysql_select_db($database_connections, $connections); 
$query_user_info = "SELECT username FROM users WHERE user_id='$user_id'"; 
$user_info = mysql_query($query_user_info, $connections) or die(mysql_error()); 
$row_user_info = mysql_fetch_assoc($user_info); 

//code for displaying all your pals 
$query_pal_array = "SELECT pal_array FROM users WHERE user_id='$user_id'"; 
$pal_array_result = mysql_query($query_pal_array, $connections) or die(mysql_error()); 
$row_pal_array = mysql_fetch_assoc($pal_array_result); 

$pal_array = $row_pal_array['pal_array']; 

$palList = ""; 
if($pal_array !="") 
{ 
    $palArray = explode(",",$pal_array); 
    $palCount = count($palArray); 
    $palArray = array_slice($palArray,0,15); 
    $i = 0;//how many times we loop over 
    foreach($palArray as $key =>$array_value) 
    { 
     $i++; 
    //increment by one 
     $palList = "$array_value";  
    } 
} 
else 
{ 
    $palCount = "0"; 
} 
?> 
<table width="500" border="0"> 
    <tr> 
    <td height="20"><div class="heading_text_18"><?php echo $row_user_info ['username']; ?>'s&nbsp;pals <?php echo $palCount ?></div> </td> 
    </tr> 
    <tr> 
     <td class="interactionLinksDiv" align="right" style="border:none;"><a href="#" onclick="return false" 
     onmousedown="javascript: toggleInteractContainers('pal_requests');">Pal Requests</a></td> 
    </tr> 
    <tr> 
     <td height="5"></td> 
    </tr> 
</table> 
<div class="interactContainers" id="pal_requests"> 
<?php 
//container for accepting/rejecting pal requests 
$pal_requests = "SELECT * FROM pal_requests WHERE mem2='$user_id' ORDER BY pal_request_id ASC LIMIT 50"; 
$pal_request_query = mysql_query($pal_requests) or die(mysql_error()); 
$pal_request_num_rows = mysql_num_rows($pal_request_query); 
if($pal_request_num_rows < 1) 
{ 
    echo '&nbsp;You have no Pal requests at this time.'; 
    exit(); 
} 
else 
{ 
    while($row_pal_query = mysql_fetch_array($pal_request_query)) 
    { 
    $request_id = $row_pal_query["pal_request_id"]; 
    $mem1 = $row_pal_query["mem1"]; 
    $query_user = "SELECT user_first_name, user_last_name, picture_thumb_url FROM users LEFT JOIN picture ON users.user_id = picture.user_id 
    AND picture.avatar=1 WHERE users.user_id='$mem1' LIMIT 1"; 
    $user_info = mysql_query($query_user, $connections) or die(mysql_error()); 
    while ($row = mysql_fetch_array($user_info)){ $requesterFirstName = $row["user_first_name"]; $requesterLastName = $row["user_last_name"]; } 
    { 
     if(!empty($row["picture_thumb_url"])) 
     { 
      $avatar = '<a href="user_view.php?user_id2=' . $mem1 . '"><img src="/NNL/User_Images/' . $row["picture_thumb_url"] . '" width="50" height="50" border="0"/></a>'; 
     } 
     else 
     { 
      $avatar = '<a href="user_view.php?user_id2=' . $mem1 . '"><img src="/NNL/Style/Images/default_avatar.png" width="50" height="50" border="0"/></a>'; 
     } 
    echo '<hr /> 
    <table width="100%" cellpadding="5"> 
    <tr> 
     <td width="17%" align="left"><div style="overflow:hidden; height:50px;">'. $avatar .'</div></td> 
     <td width="83%"><a class="ordinary_text_12_blue "href="user_view.php?user_id2=' . $mem1 . '">'. $requesterFirstName .' '. $requesterLastName .'</a> 
     wants to be your Pal<br /><br /> 
     <span id="req' . $request_id . '"> 
     <a class="ordinary_text_12" href="#" onclick="return false" onmousedown="javascript:acceptPalRequest(' . $request_id . ');" >Accept</a> 
     &nbsp; &nbsp; OR &nbsp; &nbsp; 
     <a class="ordinary_text_12" href="#" onclick="return false" onmousedown="javascript:denyPalRequest(' . $request_id . ');" >Deny</a> 
     </span></td> 
    </tr> 
    </table>';  
    } 
}    
} 
?> 
</div> 
<?php 
//get pal avatars 
$query_pal_info = "SELECT users.user_id, user_first_name, user_last_name, username, picture_thumb_url, avatar FROM users LEFT JOIN picture ON users.user_id = picture.user_id 
AND picture.avatar=1 WHERE users.user_id = $array_value"; 
$pal_info = mysql_query($query_pal_info , $connections) or die(mysql_error()); 
$totalRows_pal_info = mysql_num_rows($pal_info); 
echo $totalRows_pal_info; 

echo "\n<table>"; 
$i = 5; 
while ($row_pal_info = mysql_fetch_assoc($pal_info)) 
{ 
if($i==5) echo "\n\t<tr>"; 
$thumbnail_user = $row_pal_info['picture_thumb_url'] != '' ? $row_pal_info['picture_thumb_url'] : '../Style/Images/default_avatar.png'; 
echo "<td width='100' height='100' align='center' valign='middle'><a href = 'user_view.php?user_id2=$array_value'> 
    <img src='/NNL/User_Images/$thumbnail_user' border='0'/></a></td>\n"; 
$i--; 
if($i==0) { 
echo "\n\t</tr>\n\t<tr>"; 
$i = 5; 
} 
} 
if($i!=5) echo "\n\t\t<td colspan=\"$i\"></td>\n\t</tr>"; 
echo "\n</table>"; 
?> 

接近底部,我有這個疑問

$query_pal_info = "SELECT users.user_id, user_first_name, user_last_name, username, picture_thumb_url, avatar FROM users LEFT JOIN picture ON users.user_id = picture.user_id 
AND picture.avatar=1 WHERE users.user_id = $array_value"; 

變量$ array_value保持好朋友的USER_ID的數組。我將如何展示個人好友?我也有一個問題,爲什麼在我的interactContainers div下面的東西不會顯示。

在此先感謝

回答

1

重要
在我回答這個問題,我必須確保你瞭解你在做什麼不安全。你真的需要去閱讀SQL injection並重新評估你如何設計你的查詢。你應該逃避你所有的價值(包括從數據庫中出來的價值)。

回答
好了,這麼說,你應該,是有一個pal表,只是將用戶鏈接到其他用戶。這些字段將是user_idpal_id。這兩個都是用戶表中user_id字段的外鍵。

然後,您可以編寫一個查詢來獲得朋友的信息:

SELECT usr.* 
FROM pal 
INNER JOIN users 
ON pal.pal_id = users.user_id 
WHERE pal.user_id = XXX (User's ID here) 

存儲「好朋友」的陣列方法是會得到真的老了,真快,一旦你開始想要做更精細事情(如尋找好朋友的朋友等)。

可以做查詢,你有現在,如果你真的使用IN關鍵字希望(儘管我建議改變你的數據庫結構,這也將消除逃避這個字符串的頭痛)。假設你的$pal_array變量有一個用逗號分隔的用戶id列表: $query_pal_info = "SELECT users.user_id, user_first_name, user_last_name, username, picture_thumb_url, avatar FROM users LEFT JOIN picture ON users.user_id = picture.user_id AND picture.avatar=1 WHERE users.user_id IN ($pal_array)";

+0

感謝您的回覆Drackir。 – 2011-02-01 18:52:26

0

你需要用逗號加入您的數組,並使用IN。

+0

感謝您的回覆RC – 2011-02-01 19:01:31

相關問題