- 16, May 2024
- #1
привет,
Мне было интересно, не могли бы вы помочь мне с моим уроком по тегам @. Я наполовину построил, но это какой-то хлам. Сейчас он делает половину работы. Он создаст ссылки вокруг пользователей, находящихся в БД, но неправильно.
Если я напишу «Привет, как дела @JeremyBenson11?» Он отлично пометит имя. Если перед неизвестным именем стоит имя, оно ничего не пометит. Наверное, есть несколько серьезных конструктивных недостатков, лол. Проблемная функция
Если я напишу «Привет, как дела @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)
{
// 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
}
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++)
{
// capture each tag
$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))
{
// tagged user exists.
array_push($names, $name);
}
}
}
return $names;
// End return names
}
//End Class
}
?>
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: