Как присоединить фото к пользователю

mr.Alexandr

Новичок
Имеется 2 таблицы friends и users
В таблице friends имеются Поля: Login (логин пользователя которому принадлежат друзья), Friend (Друг который принадлежит Login)
В таблице users : Login (логин пользователя) foto(Имя файла фото).

В чем проблема, mysql_query запрос находит пользователя которому принадлежат друзья и выводит их
Запрос :
PHP:
$db = 
        mysql_connect("localhost","user","123456");
        mysql_select_db("db");
        $result = mysql_query ("SELECT friend FROM friends where login = '$idlogin'");
        $myrow = mysql_fetch_array($result);
$idlogin берется из сессии .

потом я занес в $friend = $myrow['friend'];
Этот запрос должен вывести фото
PHP:
$query = mysql_query ("SELECT foto FROM users WHERE login ='$friend'");	
		$final = mysql_fetch_array ($query);
Но выводится только одна и та же фотография. $ifiend не получает значения всего массива
 

scorpion-ds

Новичок
Давай структуры таблиц, так сложно что-то понять и посоветовать.
 

scorpion-ds

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

lagoff

Новичок
Если надо вывести фотки друзей, то ошибка в том что выбирается только один друг а не все. Читайте как работает mysql_fetch_array + оператор IN в SQL.
 

melo

однажды
mr.Alexandr
Друг, у тебя плохая архитектура и тут вопрос скорее не по php, а по бд. Почитай про нормальные формы реляционных баз данных. В твоем случае, у тебя есть таблица пользователей. Создай таблицу друзей, в которой по полям user_id, friend_id осуществляется связь.
 

mr.Alexandr

Новичок
mr.Alexandr
Друг, у тебя плохая архитектура и тут вопрос скорее не по php, а по бд. Почитай про нормальные формы реляционных баз данных. В твоем случае, у тебя есть таблица пользователей. Создай таблицу друзей, в которой по полям user_id, friend_id осуществляется связь.
Ну вот допустим есть 2 пользователя в таблице users (Alexandr, Kolya) Поля (id:1, login:2, foto:123.jpg ) связь осуществляются по id. В базу с друзьями записывается (id_user:1; name:Alexandr; Friend:Kolya; id_friend:2).
Query запрос выведет пользователя по id, моему логину соответствует ID:1.
PHP:
$query = mysql_query ("SELECT * FROM users WHERE login ='$id'");
А теперь нужно вывести список друзей
PHP:
$query = mysql_query ("SELECT * FROM friends WHERE id_user ='$id'"); 
$r = mysql_fetch_array($query);
do {echo $r['friend'];}
while ($r = mysql_fetch_array($query));
И из таблицы users вывести фото соответствующее логину друга.
PHP:
$foto = $r['id_friend'];
$query = mysql_query ("SELECT foto FROM users WHERE id='$foto'");
Но проблема в том, что не получается присвоить значение всего массива переменной foto и выводится одно и тоже изображение.
 

lagoff

Новичок
mr.Alexandr
Приведите код полностью, структуру БД, а не кидайте кусками. Укажите, какой именно результат хотите получить в итоге и вам обязательно помогут. Вы не на форуме php-экстрасенсов-телепатов.
 

mr.Alexandr

Новичок
mr.Alexandr
Приведите код полностью, структуру БД, а не кидайте кусками. Укажите, какой именно результат хотите получить в итоге и вам обязательно помогут. Вы не на форуме php-экстрасенсов-телепатов.
Вообщем вот такой модули
В личном разделе пользователя отображается список друзей и их аватарами. по нажатию на друга открывается страница на которой отображается профиль друга
Загвоздка в том , что не могу осуществить привязку страница друга , чтоб по нажатию открывалась именно его страница. И в профиле где список друзей , чтоб отображался аватар пользователя.

Этот запрос выводит список друзей в личном разделе
PHP:
session_start();
$idlogin = $_SESSION['loginid'];            
        <?php
		$db = mysql_connect("localhost","db","123456");
        mysql_select_db("db");
        $result = mysql_query ("SELECT * FROM friends WHERE login ='$idlogin'");
        $myrow = mysql_fetch_array($result);
        
        if (empty($myrow))
        {
            echo "У вас нет друзей";
            die();
        }
       do 
         {
           if ($myrow['login'] = $idlogin)
           { 
            $_SESSION['login'] = $myrow['friend'];
          
            echo "<div id='myfriends'>";
            echo "<div id='friend_name'><a href ='friend.php'>".$myrow['name']."</a></div>";
            echo "<div id='friends_foto'><img src='photos/".$myrow['foto']."' width='50px'></div>";
  
            echo "</div>";
            }
         }
         while ($myrow = mysql_fetch_array($result));
   ?>
Исходник файла отображающего профил друга :
PHP:
 session_start();
$_SESSION['login'];

echo $_SESSION['login'];	
$db = mysql_connect("localhost","db","123456");
mysql_select_db("db");
$query = mysql_query ("SELECT * FROM users WHERE login='$idlogin'");
 $row = mysql_fetch_array ($query);
echo $row['name'];
 echo $row['lastname']


Заранее благодарен за вашу помощь.
 

scorpion-ds

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

lagoff

Новичок
Если структура таблиц осталась такая же

Friends :
Id login friend
1 Alexandr Kolya
2 Alexandr Mirzae

Users
id | login | foto
------------------------------
1 | Kolya | Jellyfish.jpg
2 | Alexandr | Lighthouse.jpg
То откуда friend.php должен знать какого именно из друзей отображать? Передавайте имя друга в параметре.

В списке друзей измените
PHP:
echo "<div id='friend_name'><a href ='friend.php'>".$myrow['name']."</a></div>";
на
PHP:
echo "<div id='friend_name'><a href ='friend.php?name={$myrow['name']}'>".$myrow['name']."</a></div>";
Соответственно во friend.php запрос будет выглядеть как
PHP:
if(!isset($_GET['name']) || !$_GET['name']) {
    // Обработка исключительной ситуации, если имя не передано
    exit;
}

// Предохраняемся от всякой возможной бяки
$friendname = mysql_real_escape_string($_GET['name']);
// Делаем запрос
$query = mysql_query ("SELECT * FROM users WHERE login='{$friendname}' ");
Все. Как забрать данные и вывести вы знаете.

Ну и не забудьте добавить обработку ситуации, если параметр $_GET['name'] передан, но реально человека с таким именем в базе нет.

З.Ы. В таблице friends лучше хранить ID'шники из таблицы users, а не имена.
 

mr.Alexandr

Новичок
Если структура таблиц осталась такая же



То откуда friend.php должен знать какого именно из друзей отображать? Передавайте имя друга в параметре.

В списке друзей измените
PHP:
echo "<div id='friend_name'><a href ='friend.php'>".$myrow['name']."</a></div>";
на
PHP:
echo "<div id='friend_name'><a href ='friend.php?name={$myrow['name']}'>".$myrow['name']."</a></div>";
Соответственно во friend.php запрос будет выглядеть как
PHP:
if(!isset($_GET['name']) || !$_GET['name']) {
    // Обработка исключительной ситуации, если имя не передано
    exit;
}

// Предохраняемся от всякой возможной бяки
$friendname = mysql_real_escape_string($_GET['name']);
// Делаем запрос
$query = mysql_query ("SELECT * FROM users WHERE login='{$friendname}' ");
Все. Как забрать данные и вывести вы знаете.

Ну и не забудьте добавить обработку ситуации, если параметр $_GET['name'] передан, но реально человека с таким именем в базе нет.

З.Ы. В таблице friends лучше хранить ID'шники из таблицы users, а не имена.
СПАСИБО БОЛЬШОЕ!!!!!
 

mr.Alexandr

Новичок
Меня интересует еще один вопрос , как сравнить 2 массива и чтобы результат сравнения можно было вывести без потерь .


PHP:
        session_start();
        $idlogin = $_SESSION['loginid'];
        $db = mysql_connect("localhost","db","123456");
        mysql_select_db("db");
        $q= mysql_query("SELECT friend FROM friends WHERE login='$idlogin'");
        $r = mysql_fetch_array ($q);
        $q2 = mysql_query ("SELECT login FROM users");
        $r2 = mysql_fetch_array($q2);
        
      
                do {
                    
                    if ($r2['login'] == $r['friend'])
                    {
                    echo $r2['logn'];
                    }
                 }
                 while ($r2 = mysql_fetch_array($q2));
Выводится только 1 логин а нужно , чтоб выводились все совпадения.
Пробывал использовать array_intersect .
Спасибо за помощь
 

lagoff

Новичок
Меня интересует еще один вопрос , как сравнить 2 массива и чтобы результат сравнения можно было вывести без потерь .


PHP:
        session_start();
        $idlogin = $_SESSION['loginid'];
        $db = mysql_connect("localhost","db","123456");
        mysql_select_db("db");
        $q= mysql_query("SELECT friend FROM friends WHERE login='$idlogin'");
        $r = mysql_fetch_array ($q);
        $q2 = mysql_query ("SELECT login FROM users");
        $r2 = mysql_fetch_array($q2);
        
      
                do {
                    
                    if ($r2['login'] == $r['friend'])
                    {
                    echo $r2['logn'];
                    }
                 }
                 while ($r2 = mysql_fetch_array($q2));
Выводится только 1 логин а нужно , чтоб выводились все совпадения.
Пробывал использовать array_intersect .
Спасибо за помощь
Во-первых: не совсем понимаю, что вы хотите сделать. Хотя догадываюсь.
Во-вторых: вы же выбираете только одну запись из таблицы friends
PHP:
$q= mysql_query("SELECT friend FROM friends WHERE login='$idlogin'");
        $r = mysql_fetch_array ($q);
Потому и 1 логин.

Нехватка базовых знаний очень сильно вам мешает. Мой вам совет - найдите тьюториал с по работе php - mysql. Все станет гораздо более понятным.
 

mr.Alexandr

Новичок
Прошу прощения
У меня 2 таблицы users и friends
В таблице users
id | login | foto
------------------------------------------
1 | Kolya | Jellyfish.jpg
2 | Alexandr | Lighthouse.jpg

В таблице friends

Id login friend
1 Alexandr Kolya
2 Alexandr Mirzae


Необходимо сравнить 2 массива, по совпадению логинов из таблицы users выводилась название фото


PHP:
	$db = mysql_connect("localhost","db","123456");
        mysql_select_db("db");

        /** Этот запрос выберет друзей которые принадлежат логину **/

       $q= mysql_query("SELECT friend FROM friends where login ='$idlogin'");

       /** Занесет его в массив **/
        $r = mysql_fetch_array ($q);

       /** выборка всех логинов из таблицы users **/
        $q2 = mysql_query ("SELECT login FROM users");
      /** Занесет его в массив **/
        $r2 = mysql_fetch_array($q2);
        
      

                do {
                     /** Если логин из массива друзей совпадет с логином в таблице users  **/
                    if ($r2['login'] == $r['friend'])
                    {
                         /** то вывести его фото**/
                    echo $r2['foto'];
                    }
                 }
                 while ($r2 = mysql_fetch_array($q2));
 
Сверху