Thứ Ba, 20 tháng 1, 2026

Google Translate - ngôn ngữ



/****JS ở Footer******/
 
<style type="text/css">

    .lang-switch {

        display: flex;

        gap: 8px;

        align-items: center;

    }

    .lang-switch img {

        /*width: 22px;

        height: 15px;*/

        cursor: pointer;

        border-radius: 2px;

        transition: 0.2s;

    }

    .lang-switch img:hover {

        opacity: 0.7;

    }

    /* Ẩn Google Translate bar */

    .goog-te-banner-frame,

    .goog-logo-link,

    .goog-te-gadget {

        display: none !important;

    }

    /* Ẩn toàn bộ Google Translate */

    .skiptranslate {

        display: none !important;

    }

    /* Fix lỗi bị đẩy trang xuống */

    body {

        top: 0 !important;

    }

    .khuyenmai-hots > ul > li > a {

        white-space: nowrap;

    }

    .home-menu > ul > li {

        display: flex;

        align-items: center;

    }

    font {

        display: inline !important;

        line-height: inherit !important;

    }

</style>


<script type="text/javascript">

function googleTranslateElementInit() {

    new google.translate.TranslateElement({

        pageLanguage: 'vi',

        autoDisplay: false

    }, 'google_translate_element');

}


function changeLang(lang) {

    let select = document.querySelector("select.goog-te-combo");

    if (!select) return;


    select.value = lang;

    select.dispatchEvent(new Event("change"));

}

</script>

<script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>


/****body******/

googletranslate__languages();

function googletranslate__languages(){


    global $site_live,$ThemeSel;


    echo'

    <div class="lang-switch language">

        <a href="javascript:void(0)" onclick="changeLang(\'zh-TW\')">

            <img src="/themes/'.$ThemeSel.'/images/china.png" alt="CN">

        </a>

        <a href="javascript:void(0)" onclick="changeLang(\'en\')">

            <img src="/themes/'.$ThemeSel.'/images/en.png" alt="EN">

        </a>

        <a href="javascript:void(0)" onclick="changeLang(\'ja\')">

            <img src="/themes/'.$ThemeSel.'/images/jp.png" alt="JP">

        </a>

        <a href="javascript:void(0)" onclick="changeLang(\'ko\')">

            <img src="themes/'.$ThemeSel.'/images/kr.png" alt="KR">

        </a>

    </div>';


    echo'<div id="google_translate_element"></div>';

}

Thứ Sáu, 16 tháng 1, 2026

Nhập Input Text Js

 Nhập Input Text trên thì Input Text dưới hiện y chang

**** Cách 1:

<input name="title" id="title" type="text" class="form-control" value="Máy pha cà phê Solis Barista Perfetta Plus">

<input name="pid_link" id="pid_link"  type="text" class="form-control" value="May-pha-ca-phe-Solis-Barista-Perfetta-Plus">

<script>

$(document).ready(function ($) {

    function slugify(text) {

        return text

            .toLowerCase()

            .normalize('NFD')

            .replace(/[\u0300-\u036f]/g, '')

            .replace(/[^a-z0-9\s-]/g, '')

            .trim()

            .replace(/\s+/g, '-')

            .replace(/-+/g, '-');

    }

    function autoSlug(titleSelector, slugSelector) {

        $(document).on('input blur change', titleSelector, function () {

            $(slugSelector).val(slugify($(this).val()));

        });

    }

    // dùng

    autoSlug('#title', '#pid_link');

});

</script>

#---------------------------------#

Cách 2:

<input class="form-control js-slug-title" data-slug="#pid_link">

<input id="pid_link" class="form-control">

<script>

$(document).ready(function ($) {

    function slugify(text) {

        return text

            .toLowerCase()

            .normalize('NFD')

            .replace(/[\u0300-\u036f]/g, '')

            .replace(/[^a-z0-9\s-]/g, '')

            .trim()

            .replace(/\s+/g, '-')

            .replace(/-+/g, '-');

    }

    $(document).on('input', '.js-slug-title', function () {

        const target = $(this).data('slug');

        $(target).val(slugify($(this).val()));

    });

});

</script>

Thứ Năm, 15 tháng 1, 2026

Thay cho input fiile thông thường

==== html

<input type="file" id="avatar-file" name="savepic" hidden multiple style="display: none;">

  <button type="button" id="choose-button-img" class="btn btn-primary">
        <i class="fa fa-picture-o"></i>  Chọn hình ảnh liên quan
  </button>

 <script>
    document.getElementById('choose-button-img').onclick = function () {

        document.getElementById('avatar-file').click();
    };
</script>

==== Save Pic

function uploads__savepic(){

    if (empty($_FILES['savepic']['name'])) {

        return '';

    }

    // $upload_dir = "uploads/News/pic";

    $upload_dir = $_SERVER['DOCUMENT_ROOT'] . "/uploads/News/pic/";

    if (!is_dir($upload_dir)) {

        mkdir($upload_dir, 0777, true);

    }

    $name     = $_FILES['savepic']['name'];

    $tmp_name = $_FILES['savepic']['tmp_name'];

    $error    = $_FILES['savepic']['error'];

    if ($error != 0) {
        return '';
    }

    $info = pathinfo($name);

    $filename = preg_replace('/[^a-zA-Z0-9-_]/', '-', $info['filename']);

    $filename = trim($filename, '-');

    $ext = strtolower($info['extension']);

    // chỉ cho phép ảnh

    $allow = array('jpg','jpeg','png','gif','webp');

    if (!in_array($ext, $allow)) {

        return '';

    }

    $new_name = $filename.'.'.$ext;

    $path = $upload_dir.$new_name;


    // nếu trùng tên → thêm (1)(2)...

    $i = 1;

    while (file_exists($path)) {

        $new_name = $filename.'('.$i.').'.$ext;

        $path = $upload_dir.$new_name;

        $i++;

    }

    if (move_uploaded_file($tmp_name, $path)) {

        return $new_name; // ✅ RETURN TÊN FILE

    }

    return '';

}

Thứ Tư, 14 tháng 1, 2026

Web bị tấn công có đuôi _4727f99

 


**** Ngừa bị Hacker *****************

1️⃣ Đổi toàn bộ mật khẩu

cPanel / Hosting

FTP

MySQL

Admin NukeViet

Email quản trị

✔️ Mật khẩu ≥ 12 ký tự, có:

A–Z a–z 0–9 !@#$%^

2️⃣ Xóa hoàn toàn file dư thừa

XÓA NGAY nếu tồn tại:

info.php

test.php

upload.php (ngoài module)

shell.php

1.php

cache.php (ngoài core)

✔️ Thư mục chỉ được phép:

/admin

/modules

/themes

/uploads

/vendor


3️⃣ Kiểm tra backdoor bằng tay (quan trọng)

Tìm toàn bộ source với các chuỗi:

base64_decode(

gzinflate(

gzuncompress(

eval(

curl_init(

file_get_contents("http

👉 File nào có từ 2 chuỗi trở lên → xóa

🔴 II. BẢO MẬT FILE & CHMOD (NUKEVIET CHUẨN)


4️⃣ Phân quyền thư mục đúng

Folder: 755

File:   644

config.php: 444 (hoặc 400)

❌ KHÔNG BAO GIỜ:

chmod 777


5️⃣ Khóa thực thi PHP trong uploads

Tạo file:

/uploads/.htaccess

Nội dung:

<FilesMatch "\.(php|phtml|php3|php4|php5|php7|phar)$">

    Deny from all

</FilesMatch>

✔️ Ngăn 99% webshell

🔴 III. HARDEN NukeViet 5.3


6️⃣ Đổi URL admin

Trong config:

define('NV_ADMIN_DIR', 'admin_abc123');

✔️ Tránh bot quét /admin


7️⃣ Bật CAPTCHA & 2FA

Admin → Cấu hình:

CAPTCHA đăng nhập

Giới hạn login sai

Session timeout ngắn


8️⃣ Xóa module & theme không dùng

Không dùng → xóa hẳn

Không để:

/modules/demo

/themes/default_old

🔴 IV. KHÓA LỖ UPLOAD (NGUYÊN NHÂN PHỔ BIẾN NHẤT)


9️⃣ Kiểm tra code upload ảnh

Chỉ cho phép:

$allow = ['jpg','jpeg','png','gif','webp'];

❌ Cấm:

.php.jpg

image.php

shell.phtml

✔️ Check MIME + extension


🔟 Rename file upload

Không dùng tên gốc:

$filename = md5(time().rand()).'.jpg';

🔴 V. CHỐNG GỌI SERVER NGOÀI (BACKDOOR)

1️⃣1️⃣ Tắt function nguy hiểm (php.ini nếu có)

disable_functions = exec,shell_exec,passthru,system,proc_open,popen

(Nếu shared hosting không cho → bỏ qua)


1️⃣2️⃣ Block domain độc trong .htaccess

RewriteCond %{HTTP_HOST} rakuten.* [NC]

RewriteRule .* - [F]


🔴 VI. GIÁM SÁT & PHÒNG NGỪA

1️⃣3️⃣ Theo dõi file thay đổi

Hàng tuần:

So file mới

So modified time

✔️ File PHP mới trong /uploads = nguy hiểm


1️⃣4️⃣ Backup định kỳ (BẮT BUỘC)

1 bản/ngày

Giữ ít nhất 7 ngày

Backup OFF HOSTING (Google Drive)


1️⃣5️⃣ Log truy cập

Theo dõi:

POST bất thường

Upload nhiều file

User-Agent lạ

🔴 VII. DẤU HIỆU WEB BỊ HACK LẦN NỮA


❌ Google redirect

❌ File tự đổi tên

❌ Xuất hiện .click, .xyz

❌ .htaccess tự thay

❌ Website load chậm bất thường


➡️ XỬ LÝ NGAY – KHÔNG ĐỂ QUA NGÀY

🟢 GỢI Ý NÂNG CAO (NÊN LÀM)

Dùng Cloudflare (Free)

Bật WAF

Chặn IP quốc gia không dùng

Giới hạn admin IP



Thứ Ba, 6 tháng 1, 2026

Google Translate - lấy giá trị langid về code php

 



**** JS - FOOTER

<style type="text/css">

    /* Ẩn Google Translate bar */

    .goog-te-banner-frame,

    .goog-logo-link,

    .goog-te-gadget {

        display: none !important;

    }

    /* Ẩn toàn bộ Google Translate */

    .skiptranslate {

        display: none !important;

    }

    /* Fix lỗi bị đẩy trang xuống */

    body {

        top: 0 !important;

    }

</style>    

<script>

    window.__gt_inited = false;

    function googleTranslateElementInit() {

        if (window.__gt_inited) return;

        window.__gt_inited = true;

        new google.translate.TranslateElement({

            pageLanguage: 'en',

            autoDisplay: false

        }, 'google_translate_element');

    }

    function changeLang(lang) {

        var langMap = {

            'vi': 1,

            'en': 2,

            'ja': 3,

            'ko': 4,

            'zh-CN': 5

        };

        var langNum = langMap[lang] || 1;

        /* 🔥 SET COOKIE CHO GOOGLE TRANSLATE */

        document.cookie = "googtrans=/en/" + lang + "; path=/";

        document.cookie = "googtrans=/en/" + lang + "; path=/; domain=" + location.hostname;


        /* COOKIE CHO PHP */

        document.cookie = "site_lang=" + lang + "; path=/; max-age=2592000";

        document.cookie = "site_lang_num=" + langNum + "; path=/; max-age=2592000";


        /* ⏳ ĐỢI GOOGLE APPLY XONG */

        setTimeout(function () {

            location.reload();

        }, 800);

    }

</script>

<script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>



****FUNCTION PHP

public function languageTop2(){ 

    $lang_num = 2; // mặc định VI

    if (isset($_COOKIE['site_lang_num'])) {

        $lang_num = intval($_COOKIE['site_lang_num']);

    }

    if (!in_array($lang_num, array(1,2,3,4,5))) {

        $lang_num = 2;

    }

    $LANG = array(

        1 => array(

            'content'   => '1',

            'icon'      => 'vi',

            'ngonngu'   => 'Vietnamese',

        ),

        2 => array(

            'content'   => '2',

            'icon'      => 'en',

            'ngonngu'   => 'English',

        ),     

       3 => array(

            'content'   => '3',

            'icon'      => 'ja',

            'ngonngu'   => 'Japanese',

        ),

        4 => array(

            'content'   => '4',

            'icon'      => 'ko',

            'ngonngu'   => 'Korean',

        ),

        5 => array(

            'content'   => '5',

            'icon'      => 'zh-CN',

            'ngonngu'   => 'Chinese',

        )

    );

    **** LẤY GIÁ TRỊ NGÔN NGỮ RA

    // echo $LANG[$lang_num]['content']; 

    // echo $LANG[$lang_num]['icon']; 

    // echo $LANG[$lang_num]['ngonngu'];    


    echo'<div class="kigiLanguage">

        <div class="languageTop language">

            <div class="iconLang">';


                echo'<img src="'.$site_live.'themes/'.$ThemeSel.'/images/'.$LANG[$lang_num]['icon'].'.png" alt="'.$LANG[$lang_num]['ngonngu'].'">';

                    if(!preg_match("/iPhone|iPad|Android|Windows Phone/is", $_SERVER['HTTP_USER_AGENT'])){      

                        echo'<span>'.$LANG[$lang_num]['ngonngu'].'</span>';

                    }                     

            echo'</div>';


            **** Truyền vào JS - Lang - onclick

            echo'<div class="popup">

                <ul class="lang-switch language">              

                    <li>

                        <a href="javascript:void(0)" onclick="changeLang(\'vi\')">

                            <img src="'.$site_live.'themes/'.$ThemeSel.'/images/vi.png"><span>Vietnamese</span>

                        </a>

                    </li>

                    <li>

                        <a href="javascript:void(0)" onclick="changeLang(\'en\')">

                            <img src="'.$site_live.'themes/'.$ThemeSel.'/images/en.png"><span>English</span>

                        </a>

                    </li>           


                    <li>

                        <a href="javascript:void(0)" onclick="changeLang(\'zh-CN\')">

                            <img src="'.$site_live.'themes/'.$ThemeSel.'/images/cn.jpg"><span>Chinese</span>

                        </a>

                    </li>

                    <li>

                        <a href="javascript:void(0)" onclick="changeLang(\'ja\')">

                            <img src="'.$site_live.'themes/'.$ThemeSel.'/images/jp.jpg"><span>Japanese</span>

                        </a>

                    </li>


                    <li>

                        <a href="javascript:void(0)" onclick="changeLang(\'ko\')">

                            <img src="'.$site_live.'themes/'.$ThemeSel.'/images/kr.jpg"><span>Korean</span>

                        </a>

                    </li>

                </ul>';

            echo'</div>';  

        echo'</div>'; 

    echo'</div>';

    echo'<div id="google_translate_element"></div>';              

}


/*** CSS + JS hiệu ứng click dropdownlist ***/

----CSS

.languageTop {

    position: relative;

}

/***language**********/

.languageTop .popup {

    position: absolute;

    top: 55px;

    right: 0;

    width: 150px;

    background-color: #fff;

    box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1);

    opacity: 0;

    visibility: hidden;

    -webkit-transition: all 0.3s linear;

    -o-transition: all 0.3s linear;

    transition: all 0.3s linear;

}

.languageTop.active .popup {

    opacity: 1;

    visibility: initial;

    top: 45px;

    -webkit-transition: all 0.3s linear;

    -o-transition: all 0.3s linear;

    transition: all 0.3s linear;

}

.languageTop .popup li a {

    display: flex;

    padding: 10px;

    align-content: center;

    color: #333333;

}

.languageTop .popup li a:hover {

   color: #2a6496; 

}

.languageTop .popup li a img {

    width: 25px;

    height: 18px;

    border: 1px solid rgba(0, 0, 0, 0.1);

}

.languageTop .popup li a span {

    margin-left: 10px;

}

.languageTop .iconLang span {

    margin-left: 8px;

    padding-right: 15px;

    position: relative;

    text-transform: uppercase;

}

.languageTop .iconLang span::after {

    content: "\f107";

    position: absolute;

    top: 50%;

    right: 0px;

    transform: translate(0, -50%);

    display: inline-block;

    font: normal normal normal 14px / 1 FontAwesome;

    font-size: inherit;

    text-rendering: auto;

    -webkit-font-smoothing: antialiased;

    -moz-osx-font-smoothing: grayscale;

    font-size: 16px;

}

.languageTop .iconLang img {

    width: 24px;

    height: 18px;

}

.iconLang {

    cursor: pointer;

}

/**-------------------------------------------------------*/

languageTop {

    position: relative;

}

.languageTop.active .popup {

    opacity: 1;

    visibility: initial;

    top: 45px;

    -webkit-transition: all 0.3s linear;

    -o-transition: all 0.3s linear;

    transition: all 0.3s linear;

}

.languageTop .popup {

    position: absolute;

    top: 55px;

    right: 0;

    width: 150px;

    background-color: #fff;

    box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1);

    opacity: 0;

    visibility: hidden;

    -webkit-transition: all 0.3s linear;

    -o-transition: all 0.3s linear;

    transition: all 0.3s linear;

}

---- JAVASCRIPT

<script type="text/javascript">

    $(".languageTop").click(function(event) {

        $(".languageTop").toggleClass('active');

    });

</script>  

====== Chú ý ======

Cách 1: Chặn Google Translate dịch đoạn này

👉 Dùng translate="no" hoặc class notranslate

<p translate="no"> <input type="checkbox" name="sanpham[]" value="Thẻ cào - QRcode"> Thẻ cào - QRcode </p>

HOẶC:

<p class="notranslate"> <input type="checkbox" name="sanpham[]" value="Thẻ cào - QRcode"> Thẻ cào - QRcode </p>

👉 Google Translate sẽ bỏ qua hoàn toàn, không sửa chữ nữa

Thứ Sáu, 2 tháng 1, 2026

upload ảnh không resize ảnh

 ** HTML

<div class="file-upload">

    <input type="file" name="userfile" id="userfile" hidden>

    <label for="userfile" class="btn-upload">Choose file</label>

    <span id="file-name">No file chosen ( max < 15MB )</span>

</div>

<style type="text/css">

    .file-upload {

        display: flex;

        align-items: center;

        gap: 10px;

    }

    .btn-upload {

        padding: 8px 14px;

        background: #007bff;

        color: #fff;

        cursor: pointer;

        border-radius: 4px;

    }

    .btn-upload:hover {

        background: #0056b3;

    }

</style>


<script>

document.getElementById('userfile').addEventListener('change', function () {

    document.getElementById('file-name').textContent =

        this.files.length ? this.files[0].name : 'No file chosen';

});

</script>



** Code PHP

$upload_path = INCLUDE_PATH . '/uploads/sendemail';

$images = upload_file_contact('userfile', $upload_path);


if ($images != '') {

    $body .= '<p style="padding-left:30px">

        <b>File Images:</b>             

        <a href="'.$site_live.'uploads/sendemail/'.$images.'" download="'.$images.'" target="_blank">Download File</a>

    </p>';

}


** Function xử lý ảnh

function upload_file_contact($input_name, $upload_dir)

{

    $max_size = 15 * 1024 * 1024; // 15MB


    // 1. Không có file

    if (

        !isset($_FILES[$input_name]) ||

        $_FILES[$input_name]['error'] != 0

    ) {

        return '';

    }


    $file_tmp  = $_FILES[$input_name]['tmp_name'];

    $file_name = $_FILES[$input_name]['name'];

    $file_size = $_FILES[$input_name]['size'];


    // 2. Tách tên & đuôi file

    $pathinfo  = pathinfo($file_name);

    $ext       = strtolower($pathinfo['extension']);

    $basename  = $pathinfo['filename'];


    // 3. Danh sách đuôi cho phép (PHP 5.3)

    $allow_ext = array(

        'svg','eps','ai','psd','cdr',

        'tiff','tif','raw','pdf',

        'jpg','jpeg','png','gif','bmp',

        'doc','docx','xls','xlsx'

    );


    if (!in_array($ext, $allow_ext)) {

        info_exit("❌ Định dạng file không được phép");

    }


    // 4. Kiểm tra dung lượng

    if ($file_size > $max_size) {

        info_exit("❌ File vượt quá 15MB");

    }


    // 5. Tạo thư mục nếu chưa có

    if (!is_dir($upload_dir)) {

        mkdir($upload_dir, 0755, true);

    }


    // 6. Tránh trùng tên file

    $new_name = $file_name;

    $i = 1;

    while (file_exists($upload_dir.'/'.$new_name)) {

        $new_name = $basename.'('.$i.').'.$ext;

        $i++;

    }


    // 7. Upload file

    if (!move_uploaded_file($file_tmp, $upload_dir.'/'.$new_name)) {

        info_exit("❌ Upload file thất bại");

    }


    return $new_name;

}