Скрытие содержимого от пользователя 1, когда он не дружит с пользователем 2

У меня есть веб-сайт, который я создаю с двумя пользовательскими потоками. У меня есть код для друзей, и это просто случай использования псевдокода else if statments в нужном месте ... Только это ломает мне мозги.

Мне нужно, чтобы когда я user1_id посещал ваш поток user2_ids, чтобы он скрыл и форму, и поток, если мы не друзья, и сказал мне добавить вас перед просмотром. Показывает, что вы добавили этого друга, но друг не принял ... Или покажите форму и ленту, если мы друзья.

Вот весь код

Это для определения моих пользователей и его работы ..

<?

$user1_id=$_SESSION['id'];
if($_SESSION['id']==$user1_id){
        define('user_isself','2');
    }else{
        define('user_isself','1');
    }

    $friends = rawfeeds_user_core::check_active_friends($id,$_SESSION['id']);

    define('USER_BEFRIENDED',$friends);

    ?>  

Вот код для моих двух каналов: первый канал из формы frist - это канал user1_ids, а из второго канала user2_id.

<?php if($user2_id==$_SESSION['id']){ ?>
    <div id="statusholder">
    <div class="divider">
        <h2>Post a status</h2>  
        <form action="insert.php" method="POST" target="ifr1" class="form_statusinput">
        <input type="hidden" name="toid" value="<?php echo $user1_id ?>">
        <input type="text" name="newmsg" id="newmsg" class="homescreen_status_input" placeholder="Say something" autocomplete="off">
        <iframe name="ifr1" id="ifr1" style="display:none;"></iframe>
        <input type="submit" target="ifr1" value="Share" >
    </form>
    </div></div>


    <?php 

    //FRIENDSHIPS
            $following_string       =   $_SESSION['id'];
            $sql_follows="SELECT * FROM friends WHERE user1_id=".$_SESSION['id']." AND status=2 OR user2_id=".$_SESSION['id']." AND status=2";
            $query_follows=mysql_query($sql_follows) or die("Error finding friendships");
            if($query_follows>0){
            $friendlist="(".$_SESSION['id'].",";
            $t=0;
            while ($follow=mysql_fetch_array($query_follows))
            {
                if($follow['user1_id']==$_SESSION['id']){
                    if($t>0){
                    $friendlist=$friendlist.",";
                    }
                    $friendlist =   $friendlist. $follow['user2_id'];
                }else{

                    if($t>0){
                        $friendlist=$friendlist.",";
                    }
                    $friendlist =   $friendlist. $follow['user1_id'];

                }
                $t=$t+1;
            }
            $friendlist=$friendlist.")";
            }
        //STREAMDATA
        $badcall = "(".$_SESSION['id'].",)";

if($friendlist==$badcall){
$friendlist="(".$_SESSION['id'].")";
}

        //FRIENDSHIPS
        $user1_id;
            if(isset($data['id'])){
            $user2_id = $data['id'];
            }else{
            $user1_id = $_SESSION['id'];
            }
            $following_string       =   $_SESSION['id'];
            $sql_follows="SELECT * FROM friends WHERE user1_id=".$user1_id." OR user2_id=".$user2_id;
            $query_follows=mysql_query($sql_follows) or die("Error finding friendships");

            while ($follow=mysql_fetch_array($query_follows))
            {
            if($follow['user2_id']==$_SESSION['id']){
                $following_string   =   $following_string. " OR streamitem_creator =" . $follow['user1_id']." OR streamitem_target=".$follow['user1_id'];
            }else{
                $following_string   =   $following_string. " OR streamitem_creator =" . $follow['user2_id']." OR streamitem_target=".$follow['user2_id'];
            }
            }

        //STREAMDATA

        $call="SELECT * FROM streamdata WHERE streamitem_target = " . $user1_id ." AND streamitem_type_id NOT IN ('2') ORDER BY streamitem_timestamp DESC LIMIT 15";
    $chant= mysql_query($call) or die(mysql_error());
        $num = mysql_num_rows($chant);
        if($num>0){

            while($streamitem_data = mysql_fetch_array($chant)){



                echo'<div id="statusholder"><div class="divider">';
                if($streamitem_data['streamitem_type_id'] == 1||$streamitem_data['streamitem_type_id'] == 3){
                echo "<img class='stream_profileimage' style='border:none;padding:0px;display:inline;' src='";rawfeeds_user_core::output_profile_image_url($streamitem_data['streamitem_creator']);echo "' onerror='this.src=\"/img/no_profile_img.jpeg\";'>
                ";
                    $poster_name = rawfeeds_user_core::getuser($streamitem_data['streamitem_creator']);
                    $target_name = rawfeeds_user_core::getuser($streamitem_data['streamitem_target']);
                    $cont = stripslashes($streamitem_data['streamitem_content']);

                    if(!($streamitem_data['streamitem_type_id']==2)){
                    $cont = htmlentities($cont);
                    $cont = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a class='user_link' href=\"\\0\">\\0</a>", $cont);

                    }

                    if($streamitem_data['streamitem_creator']==$streamitem_data['streamitem_target']){
                        echo "<a href='/sn-profile.php?user1_id=".$poster_name['id']."'>" . $poster_name['fullusersname']."</a><span class='subtleLink'> said </span>";
                    }else{
                        echo "<a href='/sn-profile.php?user1_id=".$poster_name['id']."'>" .$poster_name['fullusersname']."</a>  
                        <span class='subtleLink'>wrote</span>";
                    }
                    echo "<br/><a href='#' class='subtleLink' style='font-weight:normal;'>".Agotime($streamitem_data['streamitem_timestamp'])."</a><hr>";

                    if($streamitem_data['streamitem_type_id']==2){
                    $cont = nl2br($cont);
                    echo "<div style='display:inline;'><span class='subtleLink'>".$cont."</span> </div>";
                    }else{

                        if($streamitem_data['streamitem_creator']==$streamitem_data['streamitem_target']){
                        $cont = nl2br($cont);
                            echo "<div>".$cont."</div>";
                        }else{
                        $cont = nl2br($cont);
                        echo "<div>".$cont."</div>";

                        }
                        echo"</div></div>";
                    }}}

                ?>  
                    <div class="stream_show_posts" onClick="global_streamcount=global_streamcount+10;refreshstream();">Show More Posts</div>
                    <?php                   
}else{
            echo "<div class='global_softerror'>No posts yet!</div>";
        }

    }else{
    ?>
-----------------------------------------START OF USER2_ID'S STREAM-------
<div id="statusholder">
    <div class="divider">
        <h2>Post on <?php echo $data['fullusersname']; ?>'s stream</h2>
        <form action="insert.php" method="POST" target="ifr2" class="form_statusinput">
        <input type="hidden" name="toid" value="<?php echo $user2_id ?>">
        <input type="text" name="newmsg" id="newmsg" class="homescreen_status_input" placeholder="Say something" autocomplete="off">
        <iframe name="ifr2" id="ifr2" style="display:none;"></iframe>
        <input type="submit" target="ifr2" value="Share" >

    </form>
    </div></div>


    <?php 
    //FRIENDSHIPS
            $following_string       =   $_SESSION['id'];
            $sql_follows="SELECT * FROM friends WHERE user2_id=".$_SESSION['id']." AND status=2 OR user1_id=".$_SESSION['id']." AND status=2";
            $query_follows=mysql_query($sql_follows) or die("Error finding friendships");
            if($query_follows>0){
            $friendlist="(".$_SESSION['id'].",";
            $t=0;
            while ($follow=mysql_fetch_array($query_follows))
            {
                if($follow['user2_id']==$_SESSION['id']){
                    if($t>0){
                    $friendlist=$friendlist.",";
                    }
                    $friendlist =   $friendlist. $follow['user1_id'];
                }else{

                    if($t>0){
                        $friendlist=$friendlist.",";
                    }
                    $friendlist =   $friendlist. $follow['user2_id'];

                }
                $t=$t+1;
            }
            $friendlist=$friendlist.")";
            }
        //STREAMDATA
        $badcall = "(".$_SESSION['id'].",)";

if($friendlist==$badcall){
$friendlist="(".$_SESSION['id'].")";
}

  date_default_timezone_set("GMT");


        //FRIENDSHIPS
        $user1_id;
            if(isset($data['id'])){
            $user2_id = $data['id'];
            }else{
            $user1_id = $_SESSION['id'];
            }
            $following_string       =   $_SESSION['id'];
            $sql_follows="SELECT * FROM friends WHERE user2_id=".$user2_id." OR user1_id=".$user1_id;
            $query_follows=mysql_query($sql_follows) or die("Error finding friendships");

            while ($follow=mysql_fetch_array($query_follows))
            {
            if($follow['user1_id']==$_SESSION['id']){
                $following_string   =   $following_string. " OR streamitem_creator =" . $follow['user2_id']." OR streamitem_target=".$follow['user2_id'];
            }else{
                $following_string   =   $following_string. " OR streamitem_creator =" . $follow['user1_id']." OR streamitem_target=".$follow['user1_id'];
            }
            }

        //STREAMDATA

        $call="SELECT * FROM streamdata WHERE streamitem_target = " . $user2_id ." AND streamitem_type_id NOT IN ('2') ORDER BY streamitem_timestamp DESC LIMIT 15";
    $chant= mysql_query($call) or die(mysql_error());
        $num = mysql_num_rows($chant);
        if($num>0){

            while($streamitem_data = mysql_fetch_array($chant)){

                echo'<div id="statusholder">
    <div class="divider">';
                if($streamitem_data['streamitem_type_id'] == 1||$streamitem_data['streamitem_type_id'] == 3){
                echo "<img class='stream_profileimage' style='border:none;padding:0px;display:inline;' src='";rawfeeds_user_core::output_profile_image_url($streamitem_data['streamitem_creator']);echo "' onerror='this.src=\"/img/no_profile_img.jpeg\";'>
                ";
                    $poster_name = rawfeeds_user_core::getuser($streamitem_data['streamitem_creator']);
                    $target_name = rawfeeds_user_core::getuser($streamitem_data['streamitem_target']);
                    $cont = stripslashes($streamitem_data['streamitem_content']);

                    if(!($streamitem_data['streamitem_type_id']==2)){
                    $cont = htmlentities($cont);
                    $cont = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]","<a class='user_link' href=\"\\0\">\\0</a>", $cont);

                    }

                    if($streamitem_data['streamitem_creator']==$streamitem_data['streamitem_target']){
                        echo "<a href='/profile.php?username=".$poster_name['username']."'>" . $poster_name['fullusersname']."</a><span class='subtleLink'> said </span>";
                    }else{
                        echo "<a href='/profile.php?username=".$poster_name['username']."'>" .$poster_name['fullusersname']."</a>  
                        <span class='subtleLink'>wrote</span>";
                    }
                    echo "<br/><a href='#' class='subtleLink' style='font-weight:normal;'>".Agotime($streamitem_data['streamitem_timestamp'])."</a><hr>";

                    if($streamitem_data['streamitem_type_id']==2){
                    $cont = nl2br($cont);
                    echo "<div style='display:inline;'><span class='subtleLink'>".$cont."</span> </div>";
                    }else{

                        if($streamitem_data['streamitem_creator']==$streamitem_data['streamitem_target']){
                        $cont = nl2br($cont);
                            echo "<div>".$cont."</div>";
                        }else{
                        $cont = nl2br($cont);
                        echo "<div>".$cont."</div>";
                        }
                    echo'</div>';
                    }}
            }
                    }else{
            echo "<div class='global_softerror'>No posts yet!</div>";
                    }
                    echo'<div class="stream_show_posts" onClick="global_streamcount=global_streamcount+10;refreshstream();">Show More Posts</div>';
    }
}

            ?>

И это код, который мне нужно вставить.

<?php if(USER_BEFRIENDED==0){ ?>
    Add <?php echo $data['fullusersname']; ?> as a friend to see posts and information.
    <?php } 
    if(USER_BEFRIENDED==1){
    ?>
    You've added <?php echo $data['fullusersname']; ?> as a friend, but he hasn't accepted yet. Check back later!
    <?php } }?>

Если бы я подумал об этом ... Я бы поместил это в код перед кодированием потока user2_id ... И я бы не был в таком рассоле сейчас.

Надеюсь, кто-то может помочь.

Спасибо.


person dave    schedule 03.07.2012    source источник
comment
Привет, Майк. При всем уважении к вам, я не спрашивал вашего мнения о том, хотим ли мы еще одну социальную сеть. Вы даже не знаете, для чего я делаю свой веб-сайт ... Мне просто нужна помощь с более чем вероятной небольшой проблемой кодирования, которую может решить посторонний человек, который ее не кодировал. Я уверен, что это то место, куда можно обратиться за помощью / советом и предложениями ... Может быть, я упускаю суть ...   -  person dave    schedule 04.07.2012
comment
Дэйв, ты прав. Это место для помощи / руководства, и я прошу прощения, если мой комментарий вас обидел. Каждый раз, когда я вижу вопрос о дружеских отношениях, я всегда думаю о том, что еще один человек пытается создать новый facebook. Однако никто не станет читать вашу стену кода. Если вы хотите, чтобы кто-то действительно правильно ответил на ваш вопрос, вам гораздо лучше предоставить как можно меньше кода. Также см. Связанный с этим вопрос: stackoverflow.com/questions/1009025/facebook-database -дизайн   -  person Mike    schedule 04.07.2012
comment
Ничего страшного. Вы меня совсем не обидели. Если бы люди читали, они бы увидели, что я спрашиваю только, где я размещаю свой псевдокод между формой / потоком user1_ids и user2, чтобы он работал так, как я и предполагал .. Весь код есть, его просто помещают в нужное место это сбивает меня с толку. :)   -  person dave    schedule 04.07.2012


Ответы (2)


Просматривая ваш код, я предполагаю, что вы хотите найти друзей из базы данных. Я не совсем понимаю актуальность большого количества опубликованного кода, но могу дать несколько рекомендаций:

Напишите функцию для возврата "статуса" дружбы

Я предполагаю, что вы захотите делать аналогичные вещи (скрытие контента / примитивная конфиденциальность) в другом месте, так что, надеюсь, это будет полезно. Очевидно, я не могу это проверить, но что-то вроде:

function checkUserFriendship($user1,$user2)
{
  $sql = "SELECT status FROM friends WHERE user1_id = $user1 AND user2_id = $user2 OR user1_id = $user2 AND user2_id = $user1";
  $query = mysql_query($sql);
  $data  = mysql_fetch_array($query);
  return $data['status'];
}

Я очень сомневаюсь, что это сработает сразу, но то, что он (надеюсь) достигнет, - это вернуть поле «статус», которое у вас есть в таблице «Друзья». Затем вы можете использовать это при выводе. Например:

$friendshipStatus = checkUserFriendship($user1,$user2);

switch($friendshipStatus){
 case "accepted":
  //Show something
 break;
 case "pending":
  //Show "pending" message
 break;
 case 0:
  //Show nothing (or an error message)
 break;
}

Возможно, это не то, что вы ищете, но я бы так решил ситуацию. Похоже, вы уже сделали это со строкой, содержащей

rawfeeds_user_core::check_active_friends

но вы опубликовали много кода, и я не совсем уверен, как все это вместе.

Использование глобальных переменных

Это побочное примечание, но я бы избегал использования определенных глобальных объектов. Не похоже, что они здесь служат какой-то цели.

Ненужный код (?)

В ваших пользовательских потоках (давайте называть их таковыми) у вас есть огромный блок кода, создающий часть SQL «IN (n, n, n, n)» для выбора только определенных друзей. Я полагаю, что это необходимо в части сайта global / public / «News Feed», но я не вижу, где вы это используете. (Может быть, это оплошность / просто глупость с моей стороны!)

person Simon Thompson    schedule 04.07.2012
comment
Спасибо, Саймон, ваш пост был очень конструктивным, полезным и по существу. Я успешно реализовал то, что вы предложили, на то, что у меня уже было, и оно работает на 100% так, как мне нужно. Большое вам спасибо за ваше время и ваши усилия. - person dave; 04.07.2012

Не читая весь ваш код, я бы порекомендовал простой многомерный массив:

$friends_of_users["user1"] = array("user3", "user9");
$friends_of_users["user2"] = array("user5", "user6");
$friends_of_users["user3"] = array("user1", "user7");

это псевдокод, разумеется, вы должны работать с идентификаторами, а не с userX. Это далеко не самое привлекательное решение, но оно решит вашу проблему.

person Sliq    schedule 03.07.2012
comment
Я планирую, что на сайте будет много участников. И я не думаю, что многомерный массив - идеальное решение для этого. Мне нужно попробовать минимизировать код для чистого бэкэнда! - person dave; 04.07.2012