Как мне распечатать имена друзей друг для друга
проблема в том, что он распечатывает имена друзей в виде цифр в этой строке кода
//
echo "<a href='profile?id=". $row['friend'] ."'>".$row['friend']."</a>";
Что я уже пробовал:
это мой полный код, который я уже пробовал
полу $ = $Конн-&ГТ;подготовить("выберите " друзья".*, пользователей.имя пользователя как имя пользователя из "друзей" внутреннее соединение "пользователи" на пользователей.функция user_id = друзья.функция user_id, где друзья.friend = '".$_SESSION['user_id']."
Или друзья.user_id = '".$_SESSION['user_id']."");
$stmt->выполнить();
$data = $stmt->fetchAll();
foreach ($data as $row) {
if ($row['friend'] == $_SESSION['user_id']) {
echo "<a href='profile?id=". $строки['ид_пользователя']"'. &и GT;".$строки['логин']".&ЛТ;/а&ГТ;";
}ключевые слова elseif ($строки['ид_пользователя'] == $_SESSION['ид_пользователя']) {
echo "<a href='profile?id=". $строки['друг']"'. &и GT;".$строка ["друг"]".&ЛТ;/а&ГТ;";
}
}
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
PHP: SQL-инъекция - руководство пользователя[^]
Elyas Omer
вы имели в виду, что я должен делать вот так, где друзья?друг = ?
и я использую varibles вместо ? в функции execute
Richard Deeming
Вам нужно использовать параметры. Если вы объедините значения данных в запрос, то ваша база данных может быть взломана.
Richard Deeming
Ваш код также почти наверняка уязвим для межсайтовых сценариев (XSS):
Межсайтовый скриптинг (XSS) | OWASP[^]
Вы должны убедиться, что все контролируемые пользователем данные правильно закодированы при их отображении.
Richard Deeming
Что касается имени, отображаемого в виде числа, то это зависит от ваших данных. Мы не можем помочь вам в этом, так как у нас нет доступа к вашей базе данных.
Elyas Omer
вот мой базовый код sql
я связал таблицу друзей с таблицей пользователей на двух ключах, чтобы получить имя пользователя и имя друга
Создать таблицу " друзья` (
`friend_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`friend` int(11) NOT NULL,
`friend_status` int(11) NOT NULL DEFAULT '1'
) ENGINE=InnoDB кодировка по умолчанию=utf8;
Альтер-таблица `друзья`
Добавить первичный ключ (`friend_id`),
Добавить ключ `user_id` (`user_id`),
Добавить ключ `friend` (`друг`);
Альтер-таблица `друзья`
Добавьте ограничение `friends_ibfk_1` внешний ключ (`user_id`) Ссылок на пользователей `` (`ид_пользователя`) НА УДАЛЕНИЕ КАСКАД НА ОБНОВЛЕНИЕ КАСКАДА,
Добавить ограничение `friends_ibfk_2` внешний ключ (`friend`) Ссылок на пользователей `` (`ид_пользователя`) НА УДАЛЕНИЕ КАСКАД НА ОБНОВЛЕНИЕ КАСКАДА;
Richard Deeming
`friend` int(11) NOT NULL
Вы объявили о том, что
friend
столбец должен быть целым числом. Почему вы удивляетесь, что значения в этом столбце являются целыми числами?
Elyas Omer
потому что я связал его user_id в качестве внешнего ключа в таблице users .
так как же мне это сделать
Richard Deeming
echo "<a href='profile?id=". $row['friend'] ."'>".$row['friend']."</a>";
Вы показываете то, что
friend
колонка. Этот столбец содержит число.Если вы хотите отобразить другой столбец, то укажите правильное имя столбца в вашем списке.
echo
заявление.
Elyas Omer
хорошо по другому я попробовал это сделать
полу $ = $Конн-&ГТ;подготовить("выберите " друзья".*, пользователей.логин, имя пользователя, пользователи.имя пользователя как friend_name из "друзей" внутреннее соединение "пользователи" на пользователей.функция user_id = друзья.функция user_id или пользователей.функция user_id = друзья.друг там, где друзья.friend = '".$_SESSION['user_id']."
Или друзья.user_id = '".$_SESSION['user_id']."");
эхо "".$строки['friend_name']."";
я получаю результат как хочу но проблема в том что он распечатывает имя пользователя с именами друзей и идентификатором друзей Вот так
friend1 id 3
имя пользователя id 3
имя пользователя id 6
friend2 id 6
Sandeep Mewara
Было бы полезно, если бы вы разделили ожидаемый результат, который вы видите, и предполагаемый.
Elyas Omer
мои друзья
3
5
они распечатываются в виде ссылки и идентификатора если я нажму на нее то попаду в профиль друга
мне просто нужно распечатать их как имена друзей вместо идентификаторов друзей
ZurdoDev
Похоже, вам нужно присоединиться к другому столу, чтобы получить имя друзей.