2012-03-06 7 views
1

私はここで本当に混乱しています。私は何をやっているのか分かりませんが、私はネットワークがプライベートかパブリックかに基づいて検索を制限しようとしています。mySQLとPHPの検索を制限する2回目の試み

このコードは機能しませんが、この作業を行う方法を理解しようとしています。プライベートネットワークをそのネットワーク内の人々にしか見せないようにするにはどうすればいいですか?

$query = mysql_query("SELECT * FROM requests ORDER BY dateposted DESC"); 

while ($row = mysql_fetch_assoc($query)){ 

    $network = mysql_query("SELECT * FROM network"); 

    while ($row2 = mysql_fetch_assoc($network)) { 
     $display = false; 
     $pos = strpos($row['network'], $search); 
     if ($row2['visible'] == "public" and $search == "Global") { 
      $display = true; 
     } else   
     if ($pos == true and 
     ($row2['visible'] == "public" or $row2['username'] == $username)) { 
      $display = true; 
     } else 
     if ($row2['visible'] == "private") { 
      $display = false; 
     } 
    } 
     echo $display; 
     if ($display == true){ 
      echo "<div id='".$row["id"]."' class='item'>"; 
      echo '<div style="width: 75%;">'; 
      echo "<h4 style='display: inline;'>".$row["user"]." requests:</h4><br/>"; 
      echo "<h2 style='display: inline;'>".$row["title"]." </h2>"; 
      echo '</div>'; 

      echo '<h3 id="button" style="border-radius: 10px; padding: 4px; color: white; float: right; position: relative; top: -50px; border: 2px solid grey; background-color: #C0504D;">Apply</h2>'; 
      echo "</div>"; 
     } 
} 

ネットワークスキーマ:

network text utf8_general_ci  No         
username text utf8_general_ci  No         
visible text utf8_general_ci  No 

要求スキーマ:

id int(11)   No  auto_increment       
user text utf8_general_ci  No         
title text utf8_general_ci  No         
description text utf8_general_ci  No         
picture text utf8_general_ci  No         
price text utf8_general_ci  No         
premium datetime   No         
type text utf8_general_ci  No         
network text utf8_general_ci  No         
dateposted datetime   No 
+0

私はstrpos($ row ['network']、$ search)で評価していることを確認できません。 )(もしこのケースでは適用されませんが)strposが実際には0の位置にある文字列の '真の'結果である場合、返された0は 'false'と評価されるため、正確な比較(===または!==)を使用しません。 – fred2

答えて

1

それは遅く、ここで少しですので、私はより良いこの答えを書きしようとします。

すべてのパブリックネットワーク、およびそのユーザーに関連するプライベートネットワークのみを印刷する必要があります。また、私が理解していれば、あなたの検索は「グローバル」であるか、またはネットワークの部分名を持つことができますか?

だからあなたのクエリは、このようなものになることができます。

if($search == "Global") { 
    $sql = "select n.* 
       , r.* 
      from network n 
      inner join request r on n.network = r.network 
      where n.network = 'public' 
       or (n.network = 'private' 
      and n.username = '".$username."')"; 
} else { 
    $sql = "select n.* 
       , r.* 
       from network n 
      inner join request r on n.network = r.network 
      where n.network = 'public' 
       or (n.network = 'private' 
       and n.username = '".$username."') 
       and n.network like '%".mysql_real_escape_string($search)."%'"; 
} 

ここlikeは私のネットワーク名が検索の内容が含まれているすべてのデータを選択する」を意味しますが、より多くの例と説明を参照してくださいhereとにすることができます。 mysql docs

+0

ネットワークnとは何ですか?わかりません。 nはしますか?一度に複数のテーブルから選択できますか? – CCates

+0

いいえ、この場合nはテーブルのエイリアスです。 –

+0

ありがとうございます。そうですね、私がそのクエリを実行すると、プライベートネットワークをどのようにフィルタリングしますか? – CCates

関連する問題