Yêu cầuNhờ thêm bbcode img vào bbcode của tôi

4 bài đăng
16.06.2017 / 10:37
Hungdz
Bài đăng: 324
Member
Hihi đồ ngu....

Mong các bạn nhiệt tình giúp đỡ. Mình mới quay lại phonho :)) quên hết code

PHP
  1. <?php
  2.  
  3. /**
  4.  * @package JohnCMS
  5.  * @link http://johncms.com
  6.  * @copyright Copyright (C) 2008-2011 JohnCMS Community
  7.  * @license LICENSE.txt (see attached file)
  8.  * @version VERSION.txt (see attached file)
  9.  * @author http://johncms.com/about
  10.  */
  11.  
  12. defined('_IN_JOHNCMS') or die('Restricted access');
  13.  
  14. function tagtv($var){
  15. $ra = null;
  16. $var = mysql_real_escape_string($var[1]);
  17. $db = mysql_fetch_array(mysql_query("select * from users where name = '$var'"));
  18. if(mysql_num_rows(mysql_query("select * from users where name = '$var'")) == 0){
  19. $ra = '@'.$var.'';
  20. }else{
  21. $ra = '<a href="/users/profile.php?user='.$db['id'].'" class="nick"><img src="/avatar/' . $db['id'] . '-24-48.png" style ="width: 24px; height: 24px;" alt="'.$db['name'].'" /> '.functions::nickcolor($db['id']).'</a>';
  22. }
  23.  
  24. return $ra;
  25. }
  26.  
  27. class bbcode extends core
  28. {
  29. /*
  30.   -----------------------------------------------------------------
  31.   Обработка тэгов и ссылок
  32.   -----------------------------------------------------------------
  33.   */
  34. public static function tags($var)
  35. {
  36. $var = self::parse_time($var); // Обработка тэга времени
  37. $var = self::highlight_code($var); // Подсветка кода
  38. $var = self::soundcloud($var);
  39. $var = self::googlemap($var);
  40. $var = preg_replace('#\[br]#si', '<br />', $var); // tag br
  41. $var = preg_replace('#\[hr]#si', '<hr />', $var); // tag hr
  42. $var = self::sthoigian($var);
  43. $var = self::cnick($var);
  44. $var = self::tagnick($var);
  45. $var = self::highlight_bb($var); // Обработка ссылок
  46. $var = self::highlight_url($var); // Обработка ссылок
  47. $var = self::highlight_bbcode_url($var); // Обработка ссылок в BBcode
  48.  
  49. $var = self::zingmp3($var);
  50. $var = self::base($var);
  51. $var = preg_replace_callback('#@([a-zA-Z0-9\-\@\*\(\)\?\!\~\_\=\[\]]+)#si', 'tagtv', str_replace("]\n", ']', $var)); // tag tv
  52. return $var;
  53. }
  54.  
  55. private static function cnick($var)
  56. {
  57. return preg_replace_callback(
  58. '#\[cnick\](.+?)\[\/cnick\]#s',
  59. function ($matches) {
  60. if(preg_match('/^[0-9]+$/', $matches[1])){
  61. return functions::nickcolor($matches[1]);
  62. } else {
  63. return $matches[1];
  64. }
  65. },
  66. $var
  67. );
  68. }
  69.  
  70. private static function tagnick($var)
  71. {
  72. return preg_replace_callback(
  73. '#\[\@(.+?)\]#s',
  74. function ($matches) {
  75. $var_n = trim($matches[1]);
  76. $db = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `name` = '".mysql_real_escape_string($var_n)."' "));
  77. if(!$db){
  78. $ra = '[@'.$matches[1].']';
  79. }else{
  80. $ra = '<a href="/users/profile.php?user='.$db['id'].'" class="nick"><img src="/avatar/' . $db['id'] . '-24-48.png" style ="width: 24px; height: 24px;" alt="" /> '.functions::nickcolor($db['id']).'</a>';
  81. }
  82. return $ra;
  83. },
  84. $var
  85. );
  86. }
  87.  
  88. private static function sthoigian($var)
  89. {
  90. return preg_replace_callback(
  91. '#\[stime\](.+?)\[\/stime\]#s',
  92. function ($matches) {
  93. $shift = (core::$system_set['timeshift'] + core::$user_set['timeshift']) * 3600;
  94. if (($out = strtotime($matches[1])) !== false) {
  95. return functions::display_date($out + $shift);
  96. } else {
  97. return $matches[1];
  98. }
  99. },
  100. $var
  101. );
  102. }
  103.  
  104. private static function base($var)
  105. {
  106. return preg_replace_callback(
  107. '#\[base\](.+?)\[\/base\]#s',
  108. function ($matches) {
  109. return $matches[1];
  110. },
  111. $var
  112. );
  113. }
  114.  
  115.  
  116. private static function zingmp3($var)
  117. {
  118. return preg_replace_callback(
  119. '#\[zingmp3\](.+?)\[\/zingmp3\]#s',
  120. function ($matches) {
  121. $link = $matches[1];
  122. $arr_z = @explode("/",$link);
  123. $id_z = @str_replace(".html","",$arr_z[count($arr_z)-1]);
  124. $link_z = "http://api.mp3.zing.vn/api/mobile/song/getsonginfo?requestdata={\"id\":\"$id_z\"}";
  125. $data_z = @json_decode(@file_get_contents($link_z), true);
  126. //data
  127. $casi = $data_z['artist']; // Tên ca sĩ
  128. $baihat = $data_z['title']; // Tên bài hát
  129. $linkb = $data_z['source']['128']; // Link bài hát
  130. $tai = $data_z['link_download']['128']; // Tải bài hát
  131. $bhm = $data_z['link_download']['320']; // Tải bài hát 320kbs
  132. $lossless = $data_z['link_download']['lossless']; // Tải bài hát lossless
  133. $avatar = $data_z['thumbnail'];
  134. if(!$linkb && !$baihat && !$casi){
  135. return '[zingmp3]'.$link.'[/zingmp3]';
  136. }else{
  137. $data = '<div class="phieubac-media">Song - PhieuBac.Ga</div><div class="phieubac-media-list"><img onclick="StartSong(this)" src="'.(empty($avatar) ? '/images/ms.png' : 'http://image.mp3.zdn.vn/thumb/165_165/'.$avatar).'" width="80" height="80" class="playButton"><fieldset class="lbl-group" style="border: 3px solid #ddd;"><div style="color: #5bcf80;"><i class="fa fa-play"></i></div><label>'.$baihat.'</label></fieldset><fieldset class="lbl-group switch"><div style="color: #ff014a;"><i class="fa fa-heart"></i></div><label>'.$casi.'</label></fieldset><br /><span style="display:none;" id="norber">'.$linkb.'</span><span style="display:none;" id="xftitle">'.$baihat.'</span><div class="mp3Placeholder"></div></div>';
  138.  
  139. return $data;
  140. }
  141. },
  142. $var
  143. );
  144. }
  145.  
  146. private static function soundcloud($var)
  147. {
  148. return preg_replace_callback(
  149. '#\[soundcloud\](.+?)\[\/soundcloud\]#s',
  150. function ($matches) {
  151. $f = $matches[1];
  152. if (preg_match('/(soundcloud\.com)/', $f)) {
  153. return '<div class="soundcloud-wrapper" align="center">
  154. <iframe frameborder="0" src="https://w.soundcloud.com/player/?url=' . $f . '&amp;color=f07b22" width="100%"></iframe>
  155. </div>';
  156. }else{
  157. return $matches[1];
  158. }
  159. },
  160. $var
  161. );
  162. }
  163.  
  164. private static function googlemap($var)
  165. {
  166. return preg_replace_callback(
  167. '#\[map\](.+?)\[\/map\]#s',
  168. function ($matches) {
  169. $f = $matches[1];
  170. $data = html_entity_decode($f, ENT_QUOTES, 'UTF-8');
  171. $ok = urlencode($data);
  172. return '<div class="google-map-viewer-wrapper" align="center">
  173. <img src="http://maps.googleapis.com/maps/api/staticmap?center='.$data.'&zoom=auto&size=600x300&maptype=roadmap&markers=color:red%7C'.$data.'" width="100%" alt="'.$f.'">
  174. </div>';
  175. },
  176. $var
  177. );
  178. }
  179.  
  180. /**
  181.   * Обработка тэга [time]
  182.   *
  183.   * @param string $var
  184.   * @return string
  185.   */
  186. private static function parse_time($var)
  187. {
  188. return preg_replace_callback(
  189. '#\[time\](.+?)\[\/time\]#s',
  190. function ($matches) {
  191. $shift = (core::$system_set['timeshift'] + core::$user_set['timeshift']) * 3600;
  192. if (($out = strtotime($matches[1])) !== false) {
  193. return date("d.m.Y / H:i", $out + $shift);
  194. } else {
  195. return $matches[1];
  196. }
  197. },
  198. $var
  199. );
  200. }
  201.  
  202. /**
  203.   * Парсинг ссылок
  204.   * За основу взята доработанная функция от форума phpBB 3.x.x
  205.   *
  206.   * @param $text
  207.   * @return mixed
  208.   */
  209. public static function highlight_url($text)
  210. {
  211. if (!function_exists('url_callback')) {
  212. function url_callback($type, $whitespace, $url, $relative_url)
  213. {
  214. $orig_url = $url;
  215. $orig_relative = $relative_url;
  216. $url = htmlspecialchars_decode($url);
  217. $relative_url = htmlspecialchars_decode($relative_url);
  218. $text = '';
  219. $chars = array('<', '>', '"');
  220. $split = false;
  221. foreach ($chars as $char) {
  222. $next_split = strpos($url, $char);
  223. if ($next_split !== false) {
  224. $split = ($split !== false) ? min($split, $next_split) : $next_split;
  225. }
  226. }
  227. if ($split !== false) {
  228. $url = substr($url, 0, $split);
  229. $relative_url = '';
  230. } else {
  231. if ($relative_url) {
  232. $split = false;
  233. foreach ($chars as $char) {
  234. $next_split = strpos($relative_url, $char);
  235. if ($next_split !== false) {
  236. $split = ($split !== false) ? min($split, $next_split) : $next_split;
  237. }
  238. }
  239. if ($split !== false) {
  240. $relative_url = substr($relative_url, 0, $split);
  241. }
  242. }
  243. }
  244. $last_char = ($relative_url) ? $relative_url[strlen($relative_url) - 1] : $url[strlen($url) - 1];
  245. switch ($last_char) {
  246. case '.':
  247. case '?':
  248. case '!':
  249. case ':':
  250. case ',':
  251. $append = $last_char;
  252. if ($relative_url) {
  253. $relative_url = substr($relative_url, 0, -1);
  254. } else {
  255. $url = substr($url, 0, -1);
  256. }
  257. break;
  258.  
  259. default:
  260. $append = '';
  261. break;
  262. }
  263. $short_url = (mb_strlen($url) > 40) ? mb_substr($url, 0, 30) . ' ... ' . mb_substr($url, -5) : $url;
  264. switch ($type) {
  265. case 1:
  266. $relative_url = preg_replace('/[&?]sid=[0-9a-f]{32}$/', '', preg_replace('/([&?])sid=[0-9a-f]{32}&/', '$1', $relative_url));
  267. $url = $url . '/' . $relative_url;
  268. $text = $relative_url;
  269. if (!$relative_url) {
  270. return $whitespace . $orig_url . '/' . $orig_relative;
  271. }
  272. break;
  273.  
  274. case 2:
  275. $url2 = htmlspecialchars($url);
  276. $append2 = htmlspecialchars($append);
  277. $name = preg_replace('/([^A-Za-z0-9_\-\.]+)/i', '', $url2);
  278. $url_ext = $url2;
  279. if (($qs_ext_pos = strrpos($url2, '?')) !== false) {
  280. $url_ext = substr($url2, 0, $qs_ext_pos);
  281. }
  282. $dot_ext_pos = strrpos($url_ext, '.');
  283. $url_ext = strtolower(substr($url_ext, $dot_ext_pos + 1, strlen($url_ext) - $dot_ext_pos));
  284. if (preg_match('/^(jpg|jpeg|png|gif)$/', $url_ext)) {
  285. $redata = 1;
  286. $nameimg = basename($url2);
  287. $doiten = str_replace($nameimg, rawurlencode($nameimg), $url2);
  288. if(GetImageSize($url2)){
  289. $GetImageSize = GetImageSize($url2);
  290. $iok = $url2;
  291. }else if(GetImageSize($doiten)){
  292. $GetImageSize = GetImageSize($doiten);
  293. $iok = $doiten;
  294. }
  295. if($GetImageSize){
  296. $udata = $whitespace . '<div style="text-align: center; padding: 0; margin: 0;"><a href="'.$iok.'"><img src="'.$iok.'" alt="'.basename($url2).'" style="max-width: 100%;" /></a></div>' . $append2;
  297. }else{
  298. $redata = 2;
  299. $text = $short_url;
  300. if (!isset(core::$user_set['direct_url']) || !core::$user_set['direct_url']) {
  301. $url = core::$system_set['homeurl'] . '/go.php?url=' . rawurlencode($url);
  302. }
  303. }
  304.  
  305. }else if (preg_match('/^(3gp|mp4|flv|avi)$/', $url_ext)) {
  306. $redata = 1;
  307. $random = mt_rand(99999, 111111);
  308. $base = basename($url2);
  309. $fomatfile = functions::format($base);
  310. $d1 = '<script>$(document).ready(function() {$("#myVideo'.$random.'").html5_video({source : {"video/'.$fomatfile.'" : "'.$url2.'",},title: "Player - PhieuBac.Ga",color: "#3a7d57",width: false,buffering_text: "Đang đệm...",autoplay: false,play_control: true,time_indicator: true,volume_control: true,share_control: true,fullscreen_control: true,dblclick_fullscreen: true,volume: 0.7,show_controls_on_load: true,show_controls_on_pause: true,});});</script>';
  311.  
  312. $udata = $whitespace.$d1.'<div class="phieubac-media">Player - PhieuBac.Ga</div><div class="phieubac-media-list" style="padding: 15px;"><div style="box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12);" id="myVideo'.$random.'"></div></div>'.$append2;
  313. }else if (preg_match('/^(mp3|mid|midi|wav|aac)$/', $url_ext)) {
  314. $redata = 1;
  315. $random = mt_rand(99999, 111111);
  316. $source = @file_get_contents($url2);
  317. $ten = $random.'_'.basename($url2);
  318. $rc = @file_put_contents($ten, $source);
  319. $getID3 = new getID3;
  320. $ThisFileInfo = $getID3->analyze($ten);
  321. getid3_lib::CopyTagsToComments($ThisFileInfo);
  322. $fileformat = $ThisFileInfo['fileformat'];
  323. if($rc){
  324. $fname = basename($url2);
  325. $c_title = $ThisFileInfo['comments']['title']['0'];
  326. $c_artist = $ThisFileInfo['comments']['artist']['0'];
  327. $picture = $ThisFileInfo['comments']['picture']['0']['data'];
  328. $picture_mime = $ThisFileInfo['comments']['picture']['0']['image_mime'];
  329. @unlink($ten);
  330.  
  331. $udata = $whitespace.'<div class="phieubac-media">Song - PhieuBac.Ga</div><div class="phieubac-media-list"><img onclick="StartSong(this)" src="'.(!$picture ? '/images/ms.png' : 'data:'.$picture_mime.';base64,'.base64_encode($picture)).'" width="80" height="80" class="playButton"><fieldset class="lbl-group" style="border: 3px solid #ddd;"><div style="color: #5bcf80;"><i class="fa fa-play"></i></div><label>'.(!empty($c_title) ? $c_title : $fname).'</label></fieldset>'.(!empty($c_artist) ? '<fieldset class="lbl-group switch"><div style="color: #ff014a;"><i class="fa fa-heart"></i></div><label>'.$c_artist.'</label></fieldset>' : '').'<br /><span style="display:none;" id="norber">'.htmlspecialchars($url).'</span><span style="display:none;" id="xftitle">'.(!empty($c_title) ? $c_title : $fname).'</span><div class="mp3Placeholder"></div></div>'.$append2;
  332. } else {
  333. @unlink($ten);
  334. $redata = 2;
  335. $text = $short_url;
  336. if (!isset(core::$user_set['direct_url']) || !core::$user_set['direct_url']) {
  337. $url = core::$system_set['homeurl'] . '/go.php?url=' . rawurlencode($url);
  338. }
  339. }
  340. }else if(preg_match('/(http|https)\:\/\/(www\.)?(youtube\.com|youtu\.be)/', $url2)){
  341. $redata = 1;
  342. $values = explode('=', $url2);
  343. $valuesto = explode('&', $values[1]);
  344.  
  345. $udata = $whitespace.'<div style="text-align: center;"><iframe src="http://www.youtube.com/embed/'. $valuesto[0] . '?ap=%2526fmt%3D18&disablekb=1&autohide=1&theme=light&color=red&rel=0" style="width: 100%; height: 480px; border: 0;" allowfullscreen></iframe></div>'.$append2;
  346. }else{
  347. $redata = 2;
  348. $text = $short_url;
  349. if (!isset(core::$user_set['direct_url']) || !core::$user_set['direct_url']) {
  350. $url = core::$system_set['homeurl'] . '/go.php?url=' . rawurlencode($url);
  351. }
  352. }
  353. break;
  354.  
  355. case 4:
  356. $text = $short_url;
  357. $url = 'mailto:' . $url;
  358. break;
  359. }
  360. if($type == 2){
  361. if($redata == 1){
  362. return $udata;
  363. }
  364. }
  365. $url = htmlspecialchars($url);
  366. $text = htmlspecialchars($text);
  367. $append = htmlspecialchars($append);
  368.  
  369. return $whitespace . '<a target="_blank" href="' . $url . '">' . $text . '</a>' . $append;
  370. }
  371. }
  372.  
  373. // Обработка внутренних ссылок
  374. $text = preg_replace_callback(
  375. '#(^|[\n\t (>.])(' . preg_quote(core::$system_set['homeurl'],
  376. '#') . ')/((?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})*(?:/(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?)#iu',
  377. function ($matches) {
  378. return url_callback(1, $matches[1], $matches[2], $matches[3]);
  379. },
  380. $text
  381. );
  382.  
  383. // Обработка обычных ссылок типа xxxx://aaaaa.bbb.cccc. ...
  384. $text = preg_replace_callback(
  385. '#(^|[\n\t (>.])([a-z][a-z\d+]*:/{2}(?:(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})+|[0-9.]+|\[[a-zа-яё0-9.]+:[a-zа-яё0-9.]+:[a-zа-яё0-9.:]+\])(?::\d*)?(?:/(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@|]+|%[\dA-F]{2})*)*(?:\?(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?(?:\#(?:[a-zа-яё0-9\-._~!$&\'(*+,;=:@/?|]+|%[\dA-F]{2})*)?)#iu',
  386. function ($matches) {
  387. return url_callback(2, $matches[1], $matches[2], '');
  388. },
  389. $text
  390. );
  391.  
  392. return $text;
  393. }
  394.  
  395. /*
  396.   -----------------------------------------------------------------
  397.   Удаление bbCode из текста
  398.   -----------------------------------------------------------------
  399.   */
  400. static function notags($var = '')
  401. {
  402. $var = preg_replace('#\[color=(.+?)\](.+?)\[/color]#si', '$2', $var);
  403. $var = preg_replace('#\[code=(.+?)\](.+?)\

#si', '$2', $var);

$var = preg_replace('!\[bg=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)](.+?)\[/bg]!is', '$2', $var);

$var = preg_replace('#\

(.+?)\ (+/-)

\');"><img src="' . self::$system_set['homeurl'] . '/images/bb/sp.gif" alt="spoiler" title="Спойлер" border="0"/></span>

<span class="option" onclick="tag(\'[c]\', \'[/c]\')"><img src="' . self::$system_set['homeurl'] . '/images/bb/quote.gif" alt="quote" title="' . self::$lng['tag_quote'] . '" border="0"/></span>

<span class="option" onclick="tag(\'[url=]\', \'[/url]\')"><img src="' . self::$system_set['homeurl'] . '/images/bb/link.gif" alt="url" title="' . self::$lng['tag_link'] . '" border="0"/></span>

</li><li class="redactor_btn_group">

<span class="option" onclick="toggleMediaGroup(\'.story-publisher-box #code\');"><img src="' . self::$system_set['homeurl'] . '/images/bb/php.gif" title="' . Code . '" border="0"/></span>

<span class="option" onclick="toggleMediaGroup(\'.story-publisher-box #color\');"><img src="' . self::$system_set['homeurl'] . '/images/bb/color.gif" title="' . self::$lng['color_text'] . '" border="0"/></span>

<span class="option" onclick="toggleMediaGroup(\'.story-publisher-box #bg\');"><img src="' . self::$system_set['homeurl'] . '/images/bb/color_bg.gif" title="' . self::$lng['color_bg'] . '" border="0"/></span>';

if (self::$user_id) {

$out .= '<span class="option" onclick="toggleMediaGroup(\'.story-publisher-box #sm\');"><img src="' . self::$system_set['homeurl'] . '/images/bb/smileys.gif" alt="sm" title="' . self::$lng['smileys'] . '" border="0"/></span>';

}

$out .= '</li><li class="redactor_btn_group">

<span class="option" onclick="toggleMediaGroup(\'.story-publisher-box .google-map-wrapper\');"><i class="fa fa-map-marker fbleft"></i></span>

<span class="option" onclick="toggleMediaGroup(\'.soundcloud-search-wrapper\');"><i class="fa fa-music fbleft"></i></span>

<span class="option" onclick="toggleMediaGroup(\'.youtube-search-wrapper\');"><i class="fa fa-film fbleft"></i></span>

</li></ul></div>';

$out .= '<div class="input-wrapper google-map-wrapper" data-group="B"><i class="fa fa-map-marker fbleft"></i>

<input class="gmap-input" type="text" value="" placeholder="Bạn đang ở đâu?" data-placeholder="Bạn đang ở đâu?" name="google-map">

</div>

<div class="input-wrapper soundcloud-search-wrapper" data-group="A">

<i class="fa fa-music fbleft"></i>

<input class="soundcloud-input" type="text" onkeyup="searchSoundcloud(this.value);" value="" placeholder="Tìm bài hát?" data-placeholder="Tìm bài hát?">

<div class="input-result-wrapper"></div>

</div>

<div class="input-wrapper youtube-search-wrapper" data-group="A">

<i class="fa fa-film fbleft"></i>

<input class="youtube-input" type="text" onkeyup="searchYoutube(this.value);" value="" placeholder="Tìm video?" data-placeholder="Tìm video?">

<div class="input-result-wrapper"></div>

</div>';

if (self::$user_id) {

$out .= '<div id="sm" class="input-wrapper" data-group="E"><table><tr><td>' . $bb_smileys . '</td></tr></table></div>';

}

$out .= '<div id="code" class="input-wrapper" data-group="D"><div class="codepopup">' . $codebtn . '</div></div>' .

'<div id="color" class="input-wrapper" data-group="C"><div class="bbpopup"><img src="' . self::$system_set['homeurl'] . '/images/bb/color.gif" title="' . self::$lng['color_text'] . '" border="0"/> | ' . $font_color . '</div></div>' .

'<div id="bg" class="input-wrapper" data-group="C"><div class="bbpopup"><img src="' . self::$system_set['homeurl'] . '/images/bb/color_bg.gif" title="' . self::$lng['color_bg'] . '" border="0"/> | ' . $bg_color . '</div></div>';

return $out;

}

}

[/code]

16.06.2017 / 18:49
manhhung
Bài đăng: 458
Member

Lỗi cụ nó bbcode kìa

16.06.2017 / 19:25
Jichan
Bài đăng: 1028
Member
Mệt cứ nói, đừng cố....

...nói thật la không hiểu you nói gì =.=

17.06.2017 / 14:23
Hungdz
Bài đăng: 324
Member
Hihi đồ ngu....

Sửa được rồi. Tại code dài quá nó chàn ra ngoài -_-