2014-01-07 37 views
-2

我正在尋求在用戶配置文件中實現列可見性的最佳方法。PHP配置文件列可見性+ MySQL

試想以下情形:

Name : stackoverflow | [checkbox] visible = 1 
Address: New York  | [checkbox] visible = 0 
Phone : 312 021 11  | [checkbox] visible = 1 
Email : [email protected] | [checkbox] visible = 1 

有了這個,我有兩個表:簡介和profile_visibility

輪廓

ID 
ID_User (joins with the User table) 
Address 
Phone 
Email 

profile_visibility

ID 
ID_User (joins with the User table) 
Address 
Phone 
Email 

profile_visibility的字段都是(id_user和id除外)tinyint數據。

現在,我想對所有列做一個循環來檢查該列是否可見,而不是創建條件(因爲我有更多的列)。喜歡的東西:

$profile = $this->profile($id); // gets the info (as array) of profile 
$visibility = $this->profile_visibility($id); // gets the visibility of fields 

for($i = 0; $i <= sizeof($profile) - 1; $i++){ 
    /* I can't match $profile with $visibility because the values are different.. 

     $profile[$i]['name'] == $visibility[$i]['name'] 

     $profile[$i]['name'] > it's equal to: 'stackoverflow' 
     $visibility[$i]['name'] > it's equal to: '1' 

    */ 
} 

編輯:解決 - >但它不是最好的解決方法,請參閱@niyou解決方案。

foreach($visibility as $key => $val) { 
    if($val == 1){ 
     if(array_key_exists($key, $profile)){ 
      $content .= "<tr> 
          <td class='text-align-right'> 
           <b>" . ucfirst($key) . "</b>: 
          </td> 
          <td class='width-100'>" . $profile[$key] . "</td> 
          <td> 

          </td> 
         </tr>"; 
     } 
    } 
} 
+0

你有$能見度值[$ i] [「名」],這是「1」。這個值不被認爲是真的說'名字是可見的'?如果該值爲'0',是否不被視爲不可見。 –

+0

實際上'$ visibility [$ i]'是完全錯誤的。因爲我只接收一個用戶的數據..所以沒有意義做一個多維數組..我改變了只有'$ visibility ['name' ]'和'$ profile ['name']'。 – user3065191

回答

0

我認爲它的設計的問題:

我想創建一個表profile_fields在那裏我定義我可能數據字段

profile_fields: field_id,field_name,field_position,...

我的其他表保存是否信息字段ist可見或不可用於用戶 - 命名爲user_fields

user_fields: user_field_id, user_id, field_id, visible

現在您可以輕鬆地查詢只有那些可見的用戶字段:

SELECT field_id, field_name 
FROM profile_fields 
    LEFT JOIN user_fields USING (field_id) 
WHERE user_id=$user_id AND visible=true 
+0

其實,你的解決方案是最好的實踐。我已經設法通過PHP代碼來實現這個工作。但是我必須接受你的答案是正確的。 – user3065191