biohazardmonkey
Пользователь
- Регистрация
- 01.01.70
- Сообщения
- 3
- Реакции
- 0
- Баллы
- 1
привет,
Мне было интересно, не могли бы вы помочь мне с моим уроком по тегам @. Я наполовину построил, но это какой-то хлам. Сейчас он делает половину работы. Он создаст ссылки вокруг пользователей, находящихся в БД, но неправильно.
Если я напишу «Привет, как дела @JeremyBenson11?» Он отлично пометит имя.
Если перед неизвестным именем стоит имя, оно ничего не пометит.
Наверное, есть несколько серьезных конструктивных недостатков, лол.
Проблемная функция
PHP: Класс
PHP:
Мне было интересно, не могли бы вы помочь мне с моим уроком по тегам @. Я наполовину построил, но это какой-то хлам. Сейчас он делает половину работы. Он создаст ссылки вокруг пользователей, находящихся в БД, но неправильно.
Если я напишу «Привет, как дела @JeremyBenson11?» Он отлично пометит имя.
Если перед неизвестным именем стоит имя, оно ничего не пометит.
Наверное, есть несколько серьезных конструктивных недостатков, лол.
Проблемная функция
Код:
<?php
class pTagging{ private $db = array(); public function db_set($dbSet) { $this->db['dsn'] = $dbSet['dsn']; $this->db['username'] = $dbSet['username']; $this->db['password'] = $dbSet['password']; } public function handle_user_link($str){ if( preg_match_all("/(@\w+)/", $str, $matches)){ $matches = array_slice($matches, 0, 1); foreach($matches[0] as $tag) { $name = ltrim($tag, '@'); try{ $db = new PDO($this->db['dsn'], $this->db['username'], $this->db['password'], array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); }catch(\PDOException $e){} $sqlName = $db->prepare("SELECT `username` FROM `users` WHERE `username` = ?"); $sqlName->execute(array($name)); $retrievedUser = $sqlName->fetch(); if(!empty($retrievedUser)) { $str = str_replace($tag, '<a href="profile.php?username='.$name.'">' . $tag . '</a>' , $str); } } } return $str;
}
public function return_names($str)
{ $names = array(); if( preg_match_all('/([@]+\w+)/', $str, $matches)){ $matches = array_slice($matches, 0, 1); for($i = 0; $i < count($matches); $i++) { $tag = $matches[0][$i]; $name = ltrim($tag, '@'); try{ $db = new PDO($this->db['dsn'], $this->db['username'], $this->db['password'], array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); }catch(\PDOException $e){} $sqlName = $db->prepare("SELECT `username` FROM `users` WHERE `username` = ?"); $sqlName->execute(array($name)); $retrievedUser = $sqlName->fetch(); if(!empty($retrievedUser)) { array_push($names, $name); } } } return $names;
}
}
?>
PHP: Класс
public function handle_user_link($str){ if( preg_match_all("/(@\w+)/", $str, $matches)){ $matches = array_slice($matches, 0, 1); foreach($matches[0] as $tag) { // capture each tag $name = ltrim($tag, '@'); try{ $db = new PDO($this->db['dsn'], $this->db['username'], $this->db['password'], array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); }catch(\PDOException $e){} $sqlName = $db->prepare("SELECT `username` FROM `users` WHERE `username` = ?"); $sqlName->execute(array($name)); $retrievedUser = $sqlName->fetch(); if(!empty($retrievedUser)) { // tagged user exists. $str = str_replace($tag, '<a href="profile.php?username='.$name.'">' . $tag . '</a>' , $str); } } } return $str; // End handle_user_link }
PHP: