0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 38
1

совет нужен! система друзей на сайте

29.12.2012, 00:30. Показов 14042. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, дорогие форумчане!
решил обозначить (наметить) систему друзей на сайте, и соответственно возникла пара вопросов. конкретнее

я создал таблицу user_status, где есть поля"user_inviter"(приглашающий),"user_invited" (приглашенный),"stat_val_id" (статус приглашения)
т.е. кнопка на запрос добавления в друзья(friend_new)в php выглядит так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
include_once("config.php");
if (isset($_POST['friend_new']))
  {
    global $link;
    
    $user_inviter=$_POST["user_inviter"];
    $user_invited=$_POST["user_invited"];
    $stat_val_id=$_POST["stat_val_id"];
    $query = "INSERT INTO users_status VALUES('$user_inviter', '$user_invited', '$stat_val_id')";
 
   $result=mysql_query($query, $link) or die("Died inserting email info into db.  Error returned if any: ".mysql_error());
  
  return true;
  
}
т.е. в базу заносятся id пользователей(приглашенные и приглашающие) и статус приглашения (exm. 1-пригласил, 2-подтвердил,3-отклонил)
а вывод друзей пользователя реализован так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
global $link;
      $query = "SELECT * FROM `users` 
WHERE `id` IN (SELECT IF(`user_invited` = '$user_id', `user_inviter`, `user_invited`)FROM `users_status` WHERE `stat_val_id` = '2')";
 
   $result=mysql_query($query, $link) or die("Died inserting email info into db.  Error returned if any: ".mysql_error());
   
   $myrow = mysql_fetch_array($result);
   do
           {?>
              </br><table>
             <tr>
             <?php
               
                printf("<td width=50px height=50px ><a href='member.php?id=%s'><img alt='аватар' width='50px' height='50px' src='/avatars/%s'></a></td><td width=100px></td><td ><a href='member.php?id=%s'>%s %s</a></td><td></td></tr>",$myrow['id'],$myrow['avatar'],$myrow['id'],$myrow['name'],$myrow['surname']);
               } while($myrow = mysql_fetch_array($result));
            
            ?> </table>
в чем вопрос-у двух разных пользователей выводятся одинаковые друзья- т.е., я так понимаю, ошибка во втором запросе.. помогите пожалуйста понять что в запросе не так.. заранее спасибо)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.12.2012, 00:30
Ответы с готовыми решениями:

Нужен совет по рекламе на сайте
Всем привет, гуру инет-заработка. Сайт наш развивается и остро стоит вопрос о монетизации....

Нужен совет: вирус на сайте
Проблема: сначала попал непонятный огромный код во начало всех файлов шаблона - прошелся, удалил....

Нужен совет по мультиязычности на сайте
Здравствуйте,хотелось бы узнать правильно ли я делаю)суть в следующем:Есть простой движок сайта...

Нужен совет по обновлению дизайна на сайте
Здравствуйте! Есть сайт с довольно спорным макетом главной страницы. Ему уже более двух лет и уже...

12
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
29.12.2012, 02:34 2
Ну по поводу наличия дыр для SQL Injection я промолчу

А что касается вопроса, почему бы просто не выбрать
SQL
1
SELECT * FROM `users` WHERE (user_inviter = $user OR user_invited = $user) AND `stat_val_id` = 2;
1
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 38
29.12.2012, 03:17  [ТС] 3
выдает ошибку синтаксиса.."Died inserting email info into db. Error returned if any: Unknown column 'user_inviter' in 'where clause'"
не понимаю, при чем тут инсерт, если им даже и не пахнет...




а можно попросить объяснить про инъекции пожалуйста?

Добавлено через 4 минуты
как обозначить обращение в вашем запросе к другой таблице?

Добавлено через 15 минут
БЛИН, прошу прощения насчет инсерта, я же сам и прописал эту ошибку как олень, а вот как обозначить обращение к другой таблице так и не могу понять
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
29.12.2012, 03:20 4
Цитата Сообщение от Ph_mx Посмотреть сообщение
а можно попросить объяснить про инъекции пожалуйста?
нужно обезвреживать данные передаваемые от юзера.
если там точно число, то можно с помощью (int), а если строка то mysql_real_escape_string.


Цитата Сообщение от Ph_mx Посмотреть сообщение
как обозначить обращение в вашем запросе к другой таблице?
Что значит обращение к другой таблице? Ну впишите имя этой другой таблицы.
1
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 38
29.12.2012, 03:27  [ТС] 5
Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
нужно обезвреживать данные передаваемые от юзера.
если там точно число, то можно с помощью (int), а если строка то mysql_real_escape_string.
на примере кода можете показать пожалуйста

Цитата Сообщение от DrobyshevAlex Посмотреть сообщение
Что значит обращение к другой таблице? Ну впишите имя этой другой таблицы.
[/QUOTE] в том то и дело, что мне понятно как синтаксически правильно ее вписать в запрос
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
29.12.2012, 03:31 6
А вообще, Вы зачем передаёте id юзера который приглашает. И номер статуса?
Их же легко подменить.
Я отправлю любые цифры, и тем самым любых двух юзеров, не включая даже меня, сделаю сразу друзьями без подтверждения.

Добавлено через 2 минуты
Это для того, кого приглашают.
PHP
1
2
$user_invited = isset($_POST["user_invited"]) ? (int)$_POST["user_invited"] : 0;
// а потом ещё проверить нужно что такой юзер вообще в бд есть и id > 0.
Юзер, который приглашает, его ID должен браться из сессии.
А статус, сразу в коде нужно прописывать, что это заявка, а не из формы передавать.

Добавлено через 54 секунды
Ну точнее вначале проверить что id > 0 а потом что он существует
1
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 38
29.12.2012, 03:36  [ТС] 7
они передаются от скрытых форм... я так понял, что невозможно подменить информацию в этих формах

Добавлено через 4 минуты
спасибо большое- буду ковыряться дальше, а вот с отображением списка друзей как все таки оформить запрос?
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
29.12.2012, 03:38 8
Да ну? Всё что передаётся, легко подменить.
Да элементарно, правой кнопкой в хроме по форме -> просмотр кода элемента -> двойной клик по полю формы -> вводите любые данные и нажимаете enter. Всё, в форме уже не верные данные.

Или ctrl + shift + j и консоле командами js меняйте.
Или в консоле с посощью jquery отправьте вообще любые данные напрмиер так
Javascript
1
$.post('page.php', {:user_invited: 1, ...})
Или cURL, написать скрипт который будет слать данные, и переберёт все возможные ид и всех подружит.

А можно и любым снифером пакетов, который позволяет менять данные на лету.

Да миллион способов.

Добавлено через 42 секунды
Цитата Сообщение от Ph_mx Посмотреть сообщение
спасибо большое- буду ковыряться дальше, а вот с отображением списка друзей как все таки оформить запрос?
Я не понимаю что значит "оформить запрос"
Я написал вам запрос, вроде бы даже с нужными названиями полей и таблиц.
1
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 38
29.12.2012, 03:43  [ТС] 9
PHP
1
SELECT * FROM `users` WHERE (user_inviter = $user OR user_invited = $user) AND `stat_val_id` = 2;
users это одна таблица, а users_status -другая, из которой я и хочу достать id'шки..
иначе выдает ошибку
PHP
1
     Error returned if any: Unknown column 'user_inviter' in 'where clause'
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
29.12.2012, 03:50 10
Если юзеры друзья, то две записи в таблице или одна?
0
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 38
29.12.2012, 03:53  [ТС] 11
собираюсь как раз оформить проверку, что б друг не мог снова добавить друга .. дабы избежать повторных записей.. а так запись одна с статусом "2"
0
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
29.12.2012, 04:01 12
Я не про то.

Если юзер 1 добавил юезра 2 в друзья. У Вас 1 запись.
1 | 2 | 2
или
две
1 | 2 | 2
2 | 1 | 2
?
Ну я так понял что одна.

Тогда как то так
SQL
1
SELECT * FROM `users_status` WHERE (user_inviter = $user OR user_invited = $user) AND `stat_val_id` = 2;
Это как раз выберет все возможные id друзей.

Ну тогда в свой запрос просто добавьте условие
PHP
1
2
$query = "SELECT * FROM `users` 
WHERE `id` IN (SELECT IF(`user_invited` = $user_id, `user_inviter`, `user_invited`)FROM `users_status` WHERE (`user_inviter` = $user OR `user_invited` = $user) AND `stat_val_id` = 2)";
1
0 / 0 / 0
Регистрация: 28.10.2012
Сообщений: 38
29.12.2012, 04:05  [ТС] 13
огромное спасибо))) самое оно))!!!
0
29.12.2012, 04:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2012, 04:05
Помогаю со студенческими работами здесь

Система друзей/подписчиков на php
Недавно появилась необходимость создания системы друзей/подписчиков на сайте. Но я не совсем...

Сохранение информации о действиях друзей на сайте
Здравствуйте, не подскажите, как сделать действия друзей как в ВК. Например, ваш друг загрузил...

Система друзей и ее реализация php mysql
Всем привет, кто может мне помочь с реализацией система друзей на сайте? Сколько таблиц надо...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru