Всем привет, кто может мне помочь с реализацией система друзей на сайте? Вообще у меня есть наработка, но я думаю что она не правильная, у меня одна таблица requests: id, sender_id, reseiver_id, status и таблица users users_id, login, email и т.д. Кто может предложить свой вариант Буду рад вашей помощи. И с базой помочь разобраться сколько таблиц и сколько полей надо.
Что я сейчас прочел? - Человек создал две таблицы, не зная для чего судя по фразе "помочь разобраться сколько таблиц и сколько полей надо". А с какой целью он сюда пришел? - Потроллить (с) What ?!! - ну лан, проехали... Разве есть варианты ? - какие варианты ??? тут кодить надо ! Так у него: - ага, по созданию двух таблиц, круто (с) А вдруг у него код ? - Так я не вижу этот реализованный код... А с какой целью он сюда пришел? - Потроллить (с) - ой нет, сделать за него.
@_ne_scaju_ id и sender_id поменять местами и join наверно поможет. или тупо объеденить таблицы где ид и имена друзей в отдельной ячейке и птом парсить.. но джоин для большого ква друзей получше будет
@MouseZver @abrdabr requests: PHP: id, sender_id, reseiver_id, status users: PHP: user_id, login, email, pass : Тут все понятно что за что отвечает. Теперь все по порядку скрипты: У пользователя на странице я вывожу ссылку на добавления в друзья: PHP: echo '<a href="?mode=add_friend&add_friend='. $val['user_id'] .'">Добавить в друзья</a>'; Далее жму на нее и кидаю запрос другому пользователю: PHP: <?php $sql = 'INSERT INTO `requests`(`tender_id`, `sender_id`, `receiver_id`, `status`) VALUES( :tender_id, :sender_id, :receiver_id, 0)'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':tender_id', $tender_id); $stmt->bindParam(':sender_id', $sender_id); $stmt->bindParam(':receiver_id', $receiver_id); $tender_id = 1; $sender_id = (int)$_SESSION['user_id']; $receiver_id = (int)$_GET['add_friend']; if($stmt->execute()) $_SESSION['messFriend'] = 'Вы подали заявку в друзья<br>'; else $_SESSION['messFriend'] = 'Ошибка отправка заявки'; header('location:'.HOST.'?mode=friends '); exit; ?> Далее тот пользователь которому отправили заявку смотрит у себя кто у него есть в друзьях: PHP: <?php //Выводим ссылкии уведоление что пришло письмо $sql = ' SELECT `u`.`name`, `u`.`surname`, `r`.`id` FROM `requests` AS `r` JOIN `users` AS `u` ON `r`.`sender_id` = `u`.`user_id` WHERE `r`.`receiver_id`="'. $_SESSION['user_id'] .'" AND `r`.`status`= 0'; $stmt = $pdo -> prepare($sql); if($stmt->execute()) { $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($rows) { echo "Вам пришла заявка в друзья от:<br>"; foreach($rows as $val) { echo $val['name'].' '.$val['surname'].'<br> <a href="?mode=request&add_friend='. $val['user_id'] .'">Подтвердить</a> / <a href="?mode=reject&reject='. $val['user_id'] .'">Отклонить</a><br><br>'; } } } //Выводим список друзей $sql = ' SELECT `u`.`name`, u.`surname`, `r`.`id` FROM `requests` r JOIN `users` `u` ON `r`.`sender_id` = `u`.`user_id` WHERE r.`receiver_id`="'. $_SESSION['user_id'] .'" AND `r`.`status`= 1'; $stmt = $pdo -> prepare($sql); if($stmt->execute()) { $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); if ($rows) { echo "Список ваших друзей: <br>"; foreach($rows as $val) { echo '<div id="log">'. $val['name'].' '.$val['surname'].'<br></div> <a href="?mode=remove&remove='. $val['user_id'] .'">Удалить из друзей</a><br><br>'; } } } ?> Но что то идет не так, тот который отправил заявку, не видит что у него есть друзья тому кому отправил, а тот который принял видит что он его друг, и все же ссылки остаются у них на добавления в друзья, что они друг друга могут еще раз добавить в друзья, а этого не должно быть так( Ну и скрипты на удаление и отклонения друзей аналогичные друг другу, один напишу, второй такой же: PHP: <?php $sql = "DELETE FROM`requests` WHERE `id`='".(int)$_GET['reject']."'"; $stmt = $pdo->prepare($sql); $stmt->execute(); ?> Еще один скрипт на обновления статуса: PHP: <?php $sql = "UPDATE `requests` SET `status`= '1' WHERE `id`='".(int)$_GET['add_friend']."'"; $stmt = $pdo->prepare($sql); $stmt->execute(); ?> Ну вот как бы весь скрипт, работает криво и не корректно. Кто может предложить как улучшить его, а то все эти скрипты находятся по разным файлам( и мое мнение что это не правильно и глупо. Буду рад вашей помощи, или поправки данного скрипта. Буду ждать ваших коментов, только не смейтесь( пожалуйста.
@_ne_scaju_ ахх вот оно что) я то думал надо древо друзей отобразить......... тогда по моему оптимальнее всего будет держать id заявителей в таблице пользователя. типа user_id, login, email, pass, to_frends далее парсить запись to_frends или ещё лучше в особую таблицу где ид=юзер_ид
@abrdabr Я конечно все понимаю, подробней напиши пожалуйста, сколько таблиц сколько полей, ты для меня замудреными словами отвечаешь, мне по проще пожалуйста.)
@_ne_scaju_ нууууууу лень же мне))) создаёшь таблицу "заявки" ид, пользователь, заявители дело в заявителях там содержатся только ид разделённые пробелом (опционально) и затем получаем всех заявителей через explode
@abrdabr Спасибо огромное, но я не на столько продвинутый пользователь как ты) Ты вообще писал этот скрипт, когда не-будь? Если да покажи свой пример пожалуйста.
@_ne_scaju_ нет не писал. ну а пример я честно собирался настряпать но както ночь напала))) если так уж нужен пример то его можно взять с пабличных скриптов соцок. ну и было бы не плохо знать что уже имеется те пределываешь скрипт форума\игры итп или всё делается с нуля. но это уже завтра)(
@_ne_scaju_ нужна одна-две таблицы в зависимости от нагружености. для простоты можно сделать всё в одной: Код (Text): id, username, mail, password, friends, wantfriendship далее при подаче запроса в друзья такой код: PHP: $result = mysql_query('SELECT wantfriendship FROM $table WHERE id=ид_того_кому_подали_заявку'); // выбираем все существующие заявки $res=mysql_result($result, 0); $query="UPDATE $table SET wantfriendhip=$res. ид того кто подаёт заявку+ пробел WHERE id=$того_кому_подают_заявку"; // вставляем заявку в таблицу при удалении PHP: $result = mysql_query('SELECT wantfriendship FROM $table WHERE id=ид_того_кому_подали_заявку'); //выбираем все заявки $res=mysql_result($result, 0); $res2=explode($res,пробел); // преобразовываем их в массив $res2[array_search(ид_того_чья_заявка_не_приинята)]=null; // анулируем заявку $res3=implode($res2,пробел); $query="UPDATE $table SET wantfriendhip=$res3 WHERE id=$того_кому_подают_заявку" ;// сохраняем при подтверждении PHP: $result = mysql_query('SELECT friends FROM $table WHERE id=ид_того_кому_подали_заявку'); $res=mysql_result($result, 0); $query="UPDATE $table SET friends=$res. ид того кто подаёт заявку+ пробел WHERE id=$того_кому_подают_заявку"; + копия запросов для подавшего заявку так как нужно и ему добавить нового друга + тоже что и при удалении чтобы убрать заявку + различные действия типа отослать письмо ну ессна это пример
@abrdabr Благодарю) но я сейчас сразу начал изучать PDO запросы, их реализацию так как mysql уже устарел) Плюс я использую 2 таблицы, users, friend.
я просто хочу знать, стоит ли мне стремится обогнать человека который уже знает как программировать на php ) --- Добавлено --- Да и плюс узнать возраст а не имя, это же не знакомство)
У меня началось, все с регистрации и авторизации, и дальше я начал расширять знания, но я еще не твердо знаю регистрацию и авторизацию. И всякие мелочи в php. Особенно построение function хотелось бы научится, так как мне надо учителя просто, дело быстрее пошло бы. Только языки другие учим! А мне этот больше нравится php и sql языки) --- Добавлено --- Интерес, в том что ты хоть мне в теме что то стараешься объяснить) Ты знаешь такую программу как timeviewer?
@_ne_scaju_ знать знаю но не использую. я предпочитаю переписываться. php на 100% не знает ни кто. ну с функциями могу помочь наверно
Как они реализуются можешь мне помочь? Я конечно примерно знаю, но на 20 процентов где то) слабовато одним словом. Если не затруднит помоги мне с ними)
@_ne_scaju_ нууууууу а на 20% это как?))))))))) грубо говоря функция обрабатывает переменные и\или выполняет какито действия допустим напишем такую функцию function alfa($a,&$b,$c=123){ $a -простая пердача переменной & используется для передачи массива по ссылке в основном с - здесь установлено по умолчанию то есть если вызвать функцию с двумя параметрами с будет равно 123 а если с тримя то будет использовано переданное значение, так же умолчания могут быть только в конце параметров те так нельзя alfa($c=123,$a) точнее можно но будет путаница и для использовани переменных которые не были переданы функции нужно писать както так global $d; or $GLOBAL['d']; есть ещё static если установлен этот указатель то переменная не будет обнулятся при каждом новом вызове функции те будет сохранятся }
я вообще примерно знаю, 20 это типа не как не знаю, мало работал с функциями) одним словом. Например если писать не куда не подсматривать то: function reg($login, $pass, $email){ ну как бы что то того, а дальше что хотелось пишешь тут условия. И как ее использовать подставлять в другие скрипты я не понимаю. И как с ней дальше работать не знаю( Вот тебе и 20 процентов. }
@_ne_scaju_, сначала надо прочитать книжку по php, хотя бы одну, а потом лезть программировать на нём социальные сети. А ты нифига не читал, видно по заявлениям "я выучил, как делать регистрацию" (т.е. нашёл, где скопипастить То, что ты описываешь, это не 20%, это где-то 1%. https://secure.php.net/manual/ru/langref.php А вообще, можно и с более элементарных вещей начать. Вот, к примеру, той же регистрации блоксхему нарисовать в состоянии?