Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,129

Как сделать ссылки на профиль в комментарии?

24.04.2015, 16:34. Показов 1835. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем лоброго времени суток! Есть скрипт для комментариев,
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
                <?php 
                    if (logged_in() === true) { ?>
                        <form name="comment_form" action="" method="post">
                            <textarea style="margin:3px;border:3px solid #40C781;border-radius:3px;" name="message" rows="7" cols="35" placeholder="Leave a comment" required ></textarea>
                            <!-- <b><span id="counter">256</span></b> -->
                            <div>
                                <input style="margin:3px;border:3px solid #40C781; border-radius:3px;"
                                        type="submit" name="submit" value="Comment"/>
                                Symbols left: <b><span id="counter">256</span></b>
                            </div>
                        </form>
                            <?php 
                                $message = trim(filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING));
                                    if(!empty($message)) {
                                        $username = $user_data['username'];
                                        $date = date('Y.m.d');
                                        $time = date("H:i:s");
                                        $result = mysql_query("INSERT INTO comments (message,username,date,time) VALUES ('$message','$username', '$date', '$time')");
                                        if ($result) {
                                            echo "<div class='vanishing'>Ваша запись успешно добавлена!<br/></div>";
                                        } else {
                                                echo "<div class='vanishing'>Запись не добавлена!</div>";
                                            }
                                    }
                    } else {
                            echo '<div class="cannotcomment">You need to be logged in for leaving comments</div>';
                        }
                        $result = mysql_query("SELECT * FROM comments ORDER BY comment_id DESC");
                        $myrow = mysql_fetch_array($result);
                        do{ ?>
                            <div class="comment">
                                <?php echo $myrow["message"]; ?>
                                <br>
                                Date :<?php echo $myrow['date']; ?> <br>
                                Time:<font size="-1"><?php echo $myrow['time'];?></font>
                                    <div style='float:right;'>
                                        <a style="color:#0066CC;" href="/user/<?php echo $myrow['username']; ?>"> <?php echo $myrow['username'];?>'s profile</a>
                                    </div>
                            </div>
                    <?php }
                        while($myrow = mysql_fetch_array($result));
                        ?>
Задался таким вопросом: как сделать ссылки на профиль? Сами ссылки на профиль того, кто оставил комментарий есть, но а если я хочу , чтобы эта ссылка была в самом сообщении. Скажем так: Пишу "Hello @user123 " , после ссобщение получается такое: hellow <a href='user/user123'>@user123</a>. Думаю суть ясна. Посдкажите, как реалтзовать такое? Заранее спасибо!
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.04.2015, 16:34
Ответы с готовыми решениями:

Замена ссылки входа, после авторизации, на профиль
Доброго времени суток, Есть главная страница, на ней ссылка на авторизацию(вход). После авторизации пользователь направляется в своего...

Как сделать чтобы введенные данные из веб формы попали в профиль пользователя
Здравствуйте. Подскажите пожалуйста как сделать чтобы после того как пользователь заполнил вебформу данные отобразились в профиле...

Добавить в профиль пользователя ссылки на созданные им Activities (Админка Django)
Есть такая модель class Activities(models.Model): activities_user = models.CharField(max_length=30) activities_name =...

18
Заблокирован
24.04.2015, 17:17
Надо придумать тэг для обёртки. Например <User></User>. Тогда: Hello <User>@user123</User> ты легко преобразишь в нужную тебе ссылку, при помощи простенькой регулярки, или даже строкового замещения.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
24.04.2015, 17:21
paskalnikita, а имя пользователя всегда начинается с собачки? Можно за неё регулярным выражением цепляться.
0
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,129
24.04.2015, 22:35  [ТС]
просто '@' желательна, так как другого варианта не вижу. Предлагаете использовать preg_replace ?

Добавлено через 1 час 9 минут
а не подскажите какое решение, а то что-то очень уж туго идет у меня регулярное выражение.
Вот что набросал, из примера в нэте.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$string = "The @quick brown fox jumped over the lazy dog.";
 
$patterns[0] = "/@/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";
 
$replacements[2] = "<a href='user'>";
$replacements[1] = "black";
$replacements[0] = "slow";
 
echo preg_replace($patterns, $replacements, $string);
?>
Но, как видно не очень уж получается у меня закрытие слова-сслыки на пользователя.

Добавлено через 1 час 16 минут
Цитата Сообщение от Trukl Посмотреть сообщение
Надо придумать тэг для обёртки. Например <User></User>.
Ваш вариант неплох, простой в реализации, но! хотелось бы реализовать с @ , так как написать '@' куда проще, чем <User></User>
0
Заблокирован
24.04.2015, 22:48
А зачем что то писать? Ты на этом форуме много пишешь? Выделил текст, нажал на кнопку и всё уже в обёртке. Остаётся в пыхе проверить есть ли такой юзер в БД, и если есть, вклеить ссылку. А вариант с собакой, это из области придумать себе сложностей что бы потом их решать.
0
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,129
24.04.2015, 22:51  [ТС]
Но нужна мне эта 'собачка' перед именем юзера, так как нужна система ссылок, реализованная таким образом, а не каким-то другим
0
Заблокирован
24.04.2015, 22:59
Ну что поделать. Я думал тебе нужен дельный совет. А оказывается нужна собачка. К сожалению ничем не могу помочь. Я показал где мост, но если тебе надо именно перепрыгнуть реку. Дерзай, удачи.
0
171 / 153 / 67
Регистрация: 11.02.2015
Сообщений: 450
24.04.2015, 23:11
paskalnikita, вы точно ищете себе лишнюю проблему. Если все-таки хотите "собачку", то так
PHP
1
2
3
4
5
6
7
8
9
10
11
$string = "The @quick brown fox jumped over the lazy dog.";
 
$patterns[0] = "/@([^\s]+)/";
$patterns[1] = "/brown/";
$patterns[2] = "/fox/";
 
$replacements[2] = "<a href='user'>$1</a>";
$replacements[1] = "black";
$replacements[0] = "slow";
 
echo preg_replace($patterns, $replacements, $string);
1
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.04.2015, 07:51
Лучший ответ Сообщение было отмечено paskalnikita как решение

Решение

Цитата Сообщение от Trukl Посмотреть сообщение
А вариант с собакой, это из области придумать себе сложностей что бы потом их решать.
Цитата Сообщение от nrobert Посмотреть сообщение
вы точно ищете себе лишнюю проблему. Если все-таки хотите "собачку", то так
Что-то я не понял... Вы раздули из этого такую проблему. Чем собачка-то хуже тега <user>, например?
PHP
1
2
3
4
5
6
7
8
9
<?php
    # Комментарий
    $comment = 'Привет, @test-user, это мой комментарий!';
    
    # Заменяем имя пользователя
    $comment = preg_replace('~(@([^\s]+)\b)~', '<a href="/user/$2">$1</a>', $comment);
    
    # Выводим результат
    echo $comment;
1
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,129
25.04.2015, 09:25  [ТС]
Ваш вариант хорош, но вот в чем загвоздка: оборачивается только соледнее сообщение, на дргие оно не распространяется
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$result = mysql_query("SELECT * FROM comments ORDER BY comment_id DESC");
                        $myrow = mysql_fetch_array($result);
                        $myrow["message"] = preg_replace('~(@([^\s]+)\b)~', '<a href="/user/$2">$1</a>', $myrow["message"]);
                        do{ ?>
                            <div class="comment">
                                <?php echo $myrow["message"]; ?>
                                <br>
                                Date :<?php echo $myrow['date']; ?> <br>
                                Time:<font size="-1"><?php echo $myrow['time'];?></font>
                                    <div style='float:right;'>
                                        <a style="color:#0066CC;" href="/user/<?php echo $myrow['username']; ?>"> <?php echo $myrow['username'];?>'s profile</a>
                                    </div>
                            </div>
                    <?php }
                        while($myrow = mysql_fetch_array($result));
                        ?>
После добавления новой записи, ссылка слетает.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.04.2015, 11:46
Цитата Сообщение от paskalnikita Посмотреть сообщение
оборачивается только соледнее сообщение
Это как понимать?
Вот так Вам нужно:

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    $result = mysql_query("SELECT * FROM comments ORDER BY comment_id DESC");
   
    while($myrow = mysql_fetch_array($result)): 
        $myrow["message"] = preg_replace('~(@([^\s]+)\b)~', '<a href="/user/$2">$1</a>', $myrow["message"]);
?>
    <div class="comment">
        <?php echo $myrow["message"]; ?>
        <br>
        Date :<?php echo $myrow['date']; ?> <br>
        Time:<font size="-1"><?php echo $myrow['time'];?></font>
            <div style='float:right;'>
                <a style="color:#0066CC;" href="/user/<?php echo $myrow['username']; ?>"> <?php echo $myrow['username'];?>'s profile</a>
            </div>
    </div>
<?php endwhile; ?>
Только я бы сделал, чтобы заменялось не на выходе, а перед записью в базу.
0
Заблокирован
25.04.2015, 11:49
Цитата Сообщение от Para bellum Посмотреть сообщение
Что-то я не понял... Вы раздули из этого такую проблему. Чем собачка-то хуже тега <user>, например?
Ну вот сам же привёл пример. и не решил при этом задучу. смотри что произошло с твоей запятой. А по мимо этого есть другие знаки препинания. А по мимо знаков препинания люди вводят эмайлы, рисуют всякие смайлы @_0 Да всё это можно обходить, перепроверять. Но для чего? Хочется обязательно изобрести велосипед? Есть же решение которое показало своё удобство. Каждый из вас его использует на этом самом форуме. Всё что ТСу надо это создать тему в ветке JS, и спросить там как именно работает форма отвечающая за сообщения на ЭТОТ САМОМ сайте.
0
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,129
25.04.2015, 15:06  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Только я бы сделал, чтобы заменялось не на выходе, а перед записью в базу.
а чем так лучше будет? Скорость вывода и отображения будет быстрее?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.04.2015, 18:48
Цитата Сообщение от Trukl Посмотреть сообщение
смотри что произошло с твоей запятой.
Что с ней произошло? Вы код запускали? Прежде чем сказать - лучше проверить, я думаю.
\b я для кого поставил?
Цитата Сообщение от Trukl Посмотреть сообщение
Есть же решение которое показало своё удобство. Каждый из вас его использует на этом самом форуме.
А ничего, если я в BB-тег этого форума неправильную ссылку вставлю? Он обработает её как обычно, а при клике - 404.
В этом нет ничего страшного.
Цитата Сообщение от Trukl Посмотреть сообщение
рисуют всякие смайлы @_0
Видимо я не совсем со смайлами знаком. Таких не видел. Но дела не меняет.
Цитата Сообщение от paskalnikita Посмотреть сообщение
а чем так лучше будет? Скорость вывода и отображения будет быстрее?
Просто правильнее не использовать логику приложения в логике отображения. А тут явная логика приложения.
Короче, особо не замарачивайтесь по этому поводу на данный момент.
0
86 / 86 / 30
Регистрация: 12.08.2014
Сообщений: 1,129
25.04.2015, 18:51  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Короче, особо не замарачивайтесь по этому поводу на данный момент.
но все-таки Вы рекомедуете вносить уже измененные ссылки в бд, а потом просто выводить их, вместо простого занесения в бд, а потом изменения при выводе?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.04.2015, 18:57
paskalnikita, в Вашем случае да. Хотя, повторюсь: не концентрируйте внимание на этом. У Вас же не MVC-архитектура приложения, поэтому можно не менять ничего.
0
Заблокирован
25.04.2015, 20:52
Цитата Сообщение от Para bellum Посмотреть сообщение
Что с ней произошло? Вы код запускали? Прежде чем сказать - лучше проверить, я думаю.
Нет не запускал, каюсь.
Цитата Сообщение от Para bellum Посмотреть сообщение
А ничего, если я в BB-тег этого форума неправильную ссылку вставлю? Он обработает её как обычно, а при клике - 404.
В этом нет ничего страшного.
Я вот сейчас совершенно не напряжно ткнул по твоему нику:
Code
1
[nick]Para bellum[/nick],
Я конечно могу изменить там что то:
Code
1
[nick]Para-?-bellum[/nick],
Но вот скажи мне, положа руку на сердце с чем проще работать?
Code
1
2
1) [nick]Para bellum[/nick], привет \(@_@ )/  Напиши мне на эмаил (user@mail.com). 
2) @Para bellum, привет \(@_@ )/  Напиши мне на эмаил (user@mail.com).
Да я ошибся с запятой но вот эти строки твоя регулярка не переварит(Пока не переварит. Да можно довести... Но с чем работать проще?).

Ну а в том случае когда виноват пользователь, ты просто проверяешь его действия, и если он накосячил то посылаешь его нафиг. В этом действительно нет ничего страшного, если проверка качественная.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.04.2015, 21:19
Вот это допустим не переварит правильно:
@Para bellum
Но если сделать запрет на ввод пробелов в логине - задача упрощается. Вот с этим конечно будет косяк:
\(@_@ )/
Но если доработать регулярное выражение (добавить допустимые символы и т.п.) то тоже проблемы не будет.
Цитата Сообщение от Trukl Посмотреть сообщение
Но с чем работать проще?
Ну вообще конечно с этим:
Code
1
[nick]Para bellum[/nick]
Так как тут жёстко рамки задаются. Но я могу и написать так:
Code
1
[nick]Несуществующий пользователь[/nick]
А парсер BB-вод на этом форуме выделит его полужирным: Несуществующий пользователь.
Так что на 100% невозможно быть уверенным, что BB-код или регулярное выражение правильно выделило логин.
Согласен, что приведённая выше регулярка моя накосячит в случае наличия в коде вских значков: \(@_@ )/.
0
Заблокирован
25.04.2015, 21:37
И эмаил тоже user@mail.com ведь это не юзер.
В случае чёткого ограничения с двух сторон([BB-CODE]Несуществующий пользователь[/BB-CODE]) тебе остаётся только проверить наличие указанного пользователя в базе. А когда используют "якорь" (@Несуществующий пользователь). Тебе уже НАДО гадать где конец, не случайный ли это якорь, накладывать ограничения (запрет пробелов в нике) и т.д.
Так зачем эти танцы с кресалом и трутом, если за углом в магазине есть отличная современная зажигалка?
З.Ы. - за углом это ветка по JS
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2015, 21:37
Помогаю со студенческими работами здесь

Как сделать ответ на комментарии?
Доброго времени суток форумчане. Пытаюсь создать систему комментариев не могу разобраться как сделать ответ на определенный комментарий. ...

как лучше сделать комментарии на сайте
как лучше сделать комментарии на сайте, то есть механизм записи и отображения. куда их записывать(в бд?) как их потом выводить или может...

Как сделать из постоянной ссылки сделать относительную?
Есть ссылка: url: 'http://my-site.ru/wp-content/themes/stratforce/'+ $(this).attr('href')+'.html', Как сделать ее относительной, чтобы...

Сделать ссылку на профиль пользователя
Обьясните пожалуйста, как сделать ссылки такого типа: mysite.ru/username. Я знаю, можно сделать типо того...

как сделать выравнивание у подразделов выпадающего меню постарался дать максимальные комментарии
Сделал выпадающее меню. Но: 1) не могу правильно сделать ширину у выпадающего меню 2) не могу никак добиться чтобы подразделы...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru