Hỏi Update thêm trường vào cơ sở dữ liệu cho modun laws

Thành viên năng động
Chẳng là e thêm một trường ngayden cho modun laws đã test thành công. Nếu thêm mới modun mới hoặc cài lại modun thì trường ngayden có tác dụng. còn nếu sử dụng cho những modun laws đã cài đặt trước đó thì không thể cập nhật được. E kiểm tra trong phpMyadmin thì ko có trường này. còn những modun ảo cài sau thì có trường này. Ai chỉ giùm e cách update để không phải cài cài modun không? cài lại là mất hết dữ liệu.
 
--= Roll With The Wind =--
Quản trị viên
Tham khảo file dưới :
PHP:
<?php
define('NV_SYSTEM', true);

// Xac dinh thu muc goc cua site
define('NV_ROOTDIR', pathinfo(str_replace(DIRECTORY_SEPARATOR, '/', __file__), PATHINFO_DIRNAME));

require NV_ROOTDIR . '/includes/mainfile.php';

$array_modlang_update = array();

$nv_update_config = array();

// Kieu nang cap 1: Update; 2: Upgrade
$nv_update_config['type'] = 1;

// ID goi cap nhat
$nv_update_config['packageID'] = 'NVLEECHNEWS1001';

// Cap nhat cho module nao, de trong neu la cap nhat NukeViet, ten thu muc module neu la cap nhat module
$nv_update_config['formodule'] = 'leechnews';

// Thong tin phien ban, tac gia, ho tro
$nv_update_config['release_date'] = 1483660800;
$nv_update_config['author'] = 'KENNY NGUYEN (nguyentiendat713@gmail.com)';
$nv_update_config['support_website'] = 'https://nuke.vn';
$nv_update_config['to_version'] = '1.0.01';
$nv_update_config['allow_old_version'] = array(
    '0.1.07',
    '0.1.08',
    '0.1.09'
);


// Lay danh sach ngon ngu
$result = $db->query("SELECT lang FROM " . $db_config['prefix'] . "_setup_language WHERE setup=1");
while (list ($_tmp) = $result->fetch(PDO::FETCH_NUM)) {
    $array_modlang_update[$_tmp] = array(
        "lang" => $_tmp,
        "mod" => array()
    );
    
    // Get all module
    $result1 = $db->query("SELECT title, module_data FROM " . $db_config['prefix'] . "_" . $_tmp . "_modules WHERE module_file=" . $db->quote($nv_update_config['formodule']));
    while (list ($_modt, $_modd) = $result1->fetch(PDO::FETCH_NUM)) {
        $array_modlang_update[$_tmp]['mod'][] = array(
            "module_title" => $_modt,
            "module_data" => $_modd
        );
    }
}

foreach ($array_modlang_update as $lang => $array_mod) {
    foreach ($array_mod['mod'] as $module_info) {
        $table_prefix = $db_config['prefix'] . "_" . $lang . "_" . $module_info['module_data'];
        
        try {
            $db->query("INSERT INTO " . NV_CONFIG_GLOBALTABLE . " (lang, module, config_name, config_value) VALUES ('" . $lang . "', '" . $module_info['module_data'] . "', 'logo_position', 'bottom_right')");
        } catch (PDOException $e) {
            trigger_error($e->getMessage());
        }
    }
}

try {
    $num = $db->query("SELECT COUNT(*) FROM " . $db_config['prefix'] . "_setup_extensions WHERE basename='" . $nv_update_config['formodule'] . "' AND type='module'")->fetchColumn();
    $version = "0.1.09 1483660800";
    
    if (!$num) {
        $db->query("INSERT INTO " . $db_config['prefix'] . "_setup_extensions (
            id, type, title, is_sys, is_virtual, basename, table_prefix, version, addtime, author, note
        ) VALUES (
            0, 'module', 'leechnews', 0, 1, 'leechnews', 'leechnews', '0.1.09 1483660800', " . NV_CURRENTTIME . ", 'KENNY NGUYEN (nguyentiendat713@gmail.com)',
            'Module leechnews based on NukeViet 4.x'
        )");
    } else {
        $db->query("UPDATE " . $db_config['prefix'] . "_setup_extensions SET
            id=0,
            version='" . $version . "',
            author='KENNY NGUYEN (nguyentiendat713@gmail.com)'
        WHERE basename='" . $nv_update_config['formodule'] . "' AND type='module'");
    }
} catch (PDOException $e) {
    trigger_error($e->getMessage());
}

$nv_Cache->delAll();
 
Thành viên năng động
Bác có thể chỉ e rõ hơn được không? file này chép vào đâu? mình cần sửa chỗ nào (e chi cần thêm trường ngayden vao csdl modun laws hiện tại)
 
--= Roll With The Wind =--
Quản trị viên
Bác có thể chỉ e rõ hơn được không? file này chép vào đâu? mình cần sửa chỗ nào (e chi cần thêm trường ngayden vao csdl modun laws hiện tại)
ngayden bạn chèn vào bảng (table) nào ?
 
Thành viên năng động
em chèn vào bảng vi_laws_row
 
--= Roll With The Wind =--
Quản trị viên
Lấy nội dung bên dưới, lưu thành file PHP với tên bất kỳ. Ví dụ: laws.php.
Đặt laws.php tại thư mục gốc (ngang hàng index.php, robots.txt).
Đăng nhập God Admin. Chạy đường dẫn
domain.com/laws.php


PHP:
<?php
define('NV_SYSTEM', true);

// Xac dinh thu muc goc cua site
define('NV_ROOTDIR', pathinfo(str_replace(DIRECTORY_SEPARATOR, '/', __file__), PATHINFO_DIRNAME));

require NV_ROOTDIR . '/includes/mainfile.php';

$array_modlang_update = array();

$nv_update_config = array();

// Kieu nang cap 1: Update; 2: Upgrade
$nv_update_config['type'] = 1;

// ID goi cap nhat
$nv_update_config['packageID'] = 'NVLAWS1001';

// Cap nhat cho module nao, de trong neu la cap nhat NukeViet, ten thu muc module neu la cap nhat module
$nv_update_config['formodule'] = 'laws';


// Lay danh sach ngon ngu
$result = $db->query("SELECT lang FROM " . $db_config['prefix'] . "_setup_language WHERE setup=1");
while (list ($_tmp) = $result->fetch(PDO::FETCH_NUM)) {
    $array_modlang_update[$_tmp] = array(
        "lang" => $_tmp,
        "mod" => array()
    );
   
    // Get all module
    $result1 = $db->query("SELECT title, module_data FROM " . $db_config['prefix'] . "_" . $_tmp . "_modules WHERE module_file=" . $db->quote($nv_update_config['formodule']));
    while (list ($_modt, $_modd) = $result1->fetch(PDO::FETCH_NUM)) {
        $array_modlang_update[$_tmp]['mod'][] = array(
            "module_title" => $_modt,
            "module_data" => $_modd
        );
    }
}

foreach ($array_modlang_update as $lang => $array_mod) {
    foreach ($array_mod['mod'] as $module_info) {
        $table_prefix = $db_config['prefix'] . "_" . $lang . "_" . $module_info['module_data'];
       
        try {
            $db->query("ALTER TABLE " . $table_prefix . "_row ADD COLUMN ngayden int(11) unsigned NOT NULL DEFAULT '0'");
        } catch (PDOException $e) {
            //
        }
    }
}
Vào kiểm tra lại xem chức năng có hoạt động như ý muốn chưa.
Chưa test. Nhớ sao lưu trước khi làm.
 
Thích: vingheo
Thành viên năng động
File này không chạy được. E đã thử kỹ
 
Thành viên năng động
Code:
foreach ($array_modlang_update as $lang => $array_mod) {
    foreach ($array_mod['mod'] as $module_info) {
        $table_prefix = $db_config['prefix'] . "_" . $lang . "_" . $module_info['module_data'];
      
        try {
            $db->query("ALTER TABLE " . $table_prefix . "_row ADD COLUMN ngayden int(11) unsigned NOT NULL DEFAULT '0'");
        } catch (PDOException $e) {
            //
        }
    }
}
E sử dụng đoạn code này của anh, chỉnh kết hợp thêm với file update_data của gói up date modun laws và đã làm update được. Nhưng cho em hỏi vấn đề này thêm thời gian: ngày giờ nữa thì phải làm thế nào?
 
--= Roll With The Wind =--
Quản trị viên
Code:
foreach ($array_modlang_update as $lang => $array_mod) {
    foreach ($array_mod['mod'] as $module_info) {
        $table_prefix = $db_config['prefix'] . "_" . $lang . "_" . $module_info['module_data'];
     
        try {
            $db->query("ALTER TABLE " . $table_prefix . "_row ADD COLUMN ngayden int(11) unsigned NOT NULL DEFAULT '0'");
        } catch (PDOException $e) {
            //
        }
    }
}
E sử dụng đoạn code này của anh, chỉnh kết hợp thêm với file update_data của gói up date modun laws và đã làm update được. Nhưng cho em hỏi vấn đề này thêm thời gian: ngày giờ nữa thì phải làm thế nào?
File trên là tách từ cách update của NukeViet. Chắc là do dùng sai cách.
Còn thêm ngày giờ là như thế nào bạn ?
 
Thành viên năng động
VD như: ngày đến e muốn lấy thêm thời gian thực của máy tính như: 27/09/2017 1:30 CH hoặc giống như trường gửi lên của modun download: Hôm nay 1:30. E làm mãi mà không được.
- Bác cho em hỏi cái này cái: E làm được trường ngayden như trên rồi nhưng có một lỗi là khi thêm văn bản lần 1 thì mục ngayden nó không ghi dữ liệu luôn mà nó tự mặc định là: 01-01-1970. E phải sửa lại văn bản lần 2 bài viết thì ngày đến thì mới cập nhật được. việc này bất tiện mỗi lần post văn bản phải 2 lần. Nếu e thêm modun ảo, hoặc cài lại modun thì không có hiện tượng trên. Nó bị lỗi gì vậy bác ?
 
Thành viên năng động
--= Roll With The Wind =--
Quản trị viên
VD như: ngày đến e muốn lấy thêm thời gian thực của máy tính như: 27/09/2017 1:30 CH hoặc giống như trường gửi lên của modun download: Hôm nay 1:30. E làm mãi mà không được.
- Bác cho em hỏi cái này cái: E làm được trường ngayden như trên rồi nhưng có một lỗi là khi thêm văn bản lần 1 thì mục ngayden nó không ghi dữ liệu luôn mà nó tự mặc định là: 01-01-1970. E phải sửa lại văn bản lần 2 bài viết thì ngày đến thì mới cập nhật được. việc này bất tiện mỗi lần post văn bản phải 2 lần. Nếu e thêm modun ảo, hoặc cài lại modun thì không có hiện tượng trên. Nó bị lỗi gì vậy bác ?
Cái này thì lại phải xem PHP bạn viết ntn.
Mình chưa thấy mặt mũi đoạn code xử lý đâu cả.
 
Thành viên năng động
Thực gia modun laws e chỉ E lấy code của trường Ngày ban hành, sau đó đổi tên. Không xóa bất kỳ của modun gốc. Đây là những file e đã thêm vào trường ngayden
https://www.mediafire.com/file/wgbl7utcuee742n/Laws sua.rar
 
Thành viên năng động
Bác giúp với