แแ แแคแแกแแแแแแฃแ แ แแแแแแแฃแ แ แแแแแชแแแแ แแแแแก แแแ แแแแก แกแแกแขแแแ
๐ https://stack.ge/
DEMO: https://dcrudms.stack.ge/
- ๐ฏ แ แ แแ แแก STACK Core
- โจ แซแแ แแแแแ แคแฃแแฅแชแแแแ
- ๐ง แกแแกแขแแแแก แแแแฎแแแแแแ
- ๐ฆ แแแกแขแแแแชแแ
- โ๏ธ แแแแคแแแฃแ แแชแแ
- ๐ แแแแแงแแแแแ
- ๐ แคแแแแแแแก แกแขแ แฃแฅแขแฃแ แ
- ๐ แฃแกแแคแ แแฎแแแแ
- ๐จ UI/UX แคแฃแแฅแชแแแแ
- ๐ API แแแแฃแแแแขแแชแแ
- ๐ค แฌแแแแแ
- ๐ แแแชแแแแแ
- ๐จโ๐ป แแแขแแ แ
STACK Core แแ แแก แแแแแแแแ แแแ, แแแแแแแฃแ แ CRUD (Create, Read, Update, Delete) แแแ แแแแก แกแแกแขแแแ, แ แแแแแแช แจแแฅแแแแแแ PHP-แแ แแ MySQL แแแแแชแแแแ แแแแแแ. แกแแกแขแแแ แแแขแแแแขแฃแ แแ แแแแแชแแแแก แแแแแชแแแแ แแแแแก แชแฎแ แแแแแก แแ แฃแแ แฃแแแแแงแแคแก แกแ แฃแแ แคแฃแแฅแชแแแแแแแก แแฅแแแ แแแ แแแขแแ แคแแแกแก แแแแแชแแแแแแก แแแ แแแแกแแแแก.
- ๐ 100% แแแแแแแฃแ แ: แงแแแแ แชแฎแ แแแ แแแขแแแแขแฃแ แแ แแแแแชแแแแ
- โก แแแ แ แแแแคแแแฃแ แแชแแ: แแ แกแญแแ แแแแ แแแแแขแแแแแ setup-แ
- ๐ฑ Responsive Design: แแฃแจแแแแก แงแแแแ แแแฌแงแแแแแแแแแ
- ๐ แฃแกแแคแ แแฎแ: SQL Injection แแ CSRF แแแชแแ
- ๐จ แแแแแแแแ แแแ UI: Bootstrap 5 + Font Awesome
- ๐ฌ๐ช แฅแแ แแฃแแ: แกแ แฃแแ แฅแแ แแฃแแ แแแแแแแแแชแแ
- โ Create - แแฎแแแ แฉแแแแฌแแ แแแแก แแแแแขแแแ
- โ Read - แแแแแชแแแแแแก แแแฎแแ pagination แแ filtering-แแ
- โ Update - แฉแแแแฌแแ แแแแก แ แแแแฅแขแแ แแแ
- โ Delete - แฃแกแแคแ แแฎแ แฌแแจแแ confirmation-แแ
- ๐ แแแขแแแแขแฃแ แ แชแฎแ แแแแแแก แแแแชแแแแ
- ๐ แ แแแแฃแ แแ แแจแ แกแขแแขแแกแขแแแ
- ๐๏ธ แแฎแแแ แชแฎแ แแแแแแก แจแแฅแแแ Visual Editor-แแ
- ๐ Primary Key แแ Foreign Key แแฎแแ แแแญแแ แ
- ๐ แชแฎแ แแแแแแก แกแขแ แฃแฅแขแฃแ แแก แแแแแแแ
- ๐ Global Search แงแแแแ แแแแจแ
- ๐ Pagination แแแแ แแแแแชแแแแแแกแแแแก
- ๐ Sorting แงแแแแ แกแแแขแแ
- ๐ฏ Advanced Filtering
- ๐ฑ Responsive Bootstrap 5 Design
- ๐ Professional Dark Theme
- ๐ SweetAlert2 Notifications
- ๐ Interactive Dashboards
- ๐ Fast Loading
- PHP: 7.4 แแ แฃแคแ แ แแฎแแแ
- MySQL: 5.7 แแ MariaDB 10.2+
- Web Server: Apache/Nginx
- Extensions: PDO, PDO_MySQL, mbstring, json
- PHP: 8.1+
- MySQL: 8.0+
- Memory: 128MB+
- Disk Space: 50MB
# Git Repository-แแแ
git clone https://github.com/skryper/stack-core.git
cd stack-core
# แแ ZIP แคแแแแแก แแแแแงแแแแแแ
wget https://github.com/skryper/stack-core/archive/main.zip
unzip main.zip
# Apache/Nginx document root-แจแ แแแแแ แแแ
sudo cp -r stack-core/* /var/www/html/
# แฃแคแแแแแแแก แแแแแญแแแ
sudo chown -R www-data:www-data /var/www/html/
sudo chmod -R 755 /var/www/html/
-- MySQL-แจแ แจแแฅแแแแแ แแฎแแแ แแแแ
CREATE DATABASE stack_core CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- แแแแฎแแแ แแแแแก แจแแฅแแแ (แแ แแกแแแแแแแแฃแแ)
CREATE USER 'stack_user'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON stack_core.* TO 'stack_user'@'localhost';
FLUSH PRIVILEGES;
<?php
// Database Configuration
define('DB_HOST', 'localhost'); // MySQL แกแแ แแแ แแก แแแกแแแแ แแ
define('DB_NAME', 'stack_core'); // แแแแแชแแแแ แแแแแก แกแแฎแแแ
define('DB_USER', 'stack_user'); // แแแแฎแแแ แแแแแก แกแแฎแแแ
define('DB_PASS', 'secure_password'); // แแแ แแแ
define('DB_CHARSET', 'utf8mb4'); // แกแแแแแแแแแแก แแแแแ แแแ
// Application Configuration
define('APP_NAME', 'STACK Core'); // แแแแแแแชแแแก แกแแฎแแแ
define('APP_VERSION', '1.0.0'); // แแแ แกแแ
define('APP_AUTHOR', 'By Skryper'); // แแแขแแ แ
define('APP_WEBSITE', 'https://stack.ge/'); // แแแแกแแแขแ
// Security Configuration
define('SESSION_TIMEOUT', 3600); // Session timeout (แฌแแแแแจแ)
define('CSRF_TOKEN_NAME', '_token'); // CSRF token-แแก แกแแฎแแแ
// UI Configuration
define('RECORDS_PER_PAGE', 20); // แแแแ แแแ แฉแแแแฌแแ แแแแก แ แแแแแแแแ
define('MAX_RECORDS_PER_PAGE', 100); // แแแฅแกแแแแแฃแ แ แ แแแแแแแแ
?>
// Development Environment-แแกแแแแก
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Production Environment-แแกแแแแก
error_reporting(0);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/path/to/error.log');
- แแแฎแกแแแแ แแ แแฃแแแ แ แแ แแแแแแแ:
http://yourdomain.com/public/
- แแฃ แแแแคแแแฃแ แแชแแ แกแฌแแ แแ, แแแแแฉแแแแแ STACK Core แแแแแแ แ แแแแ แแ
- แแแแจแแ แแก แกแขแแขแฃแกแ แฃแแแ แแงแแก "แฌแแ แแแขแแแฃแแ"
- แแแแแแแ "แชแฎแ แแแแแ" โ "แแฎแแแ แชแฎแ แแแ"
- แจแแแงแแแแแ แชแฎแ แแแแก แกแแฎแแแ
- แแแแแแขแแ แกแแแขแแแ แแแแคแแแฃแ แแชแแแ:
- แกแแฎแแแ (แแแ:
username
) - แขแแแ (แแแ:
VARCHAR
) - แกแแแ แซแ (แแแ:
50
) - แแแแกแแแแแ (NULL, PRIMARY KEY, AUTO_INCREMENT)
- แกแแฎแแแ (แแแ:
- ๐ฅ แแแแฎแแแ แแแแแแ: id, username, email, password, created_at
- ๐ฆ แแ แแแฃแฅแขแแแ: id, name, description, price, category, in_stock
- แแแ แฉแแแ แชแฎแ แแแ
- แแแแฌแแแแฃแแแ "แฉแแแแฌแแ แแก แแแแแขแแแ"
- แจแแแแกแแ แแแแแแ
- แแแแฌแแแแฃแแแ "แจแแแแฎแแ"
- แแแแแแงแแแแ แซแแแแแก แแแแ Global Search-แแกแแแแก
- แแแแฌแแแแฃแแแ แกแแแขแแแแก แกแแแแฃแ แแแแ Sorting-แแกแแแแก
- แจแแชแแแแแ แแแแ แแแ แฉแแแแฌแแ แแแแก แ แแแแแแแแ
stack-core/
โโโ ๐ config/
โ โโโ ๐ db.php # แแแแแแ แ แแแแคแแแฃแ แแชแแ
โโโ ๐ core/
โ โโโ ๐ DatabaseManager.php # แแแแแชแแแแ แแแแแก แแแ แแแ
โ โโโ ๐ UIHelper.php # UI แแแแแแแแแขแแแ
โ โโโ ๐ actions.php # CRUD แแแฅแแแแแแแแ
โโโ ๐ public/
โ โโโ ๐ index.php # แแแแแแ แ แแแจแแแ แแ
โ โโโ ๐ tables.php # แชแฎแ แแแแแแก แกแแ
โ โโโ ๐ create.php # แชแฎแ แแแแก แจแแฅแแแ
โโโ ๐ views/
โ โโโ ๐ view_table.php # แชแฎแ แแแแก แแแฎแแ/แ แแแแฅแขแแ แแแ
โโโ ๐ includes/
โ โโโ ๐ header.php # แกแแแ แแ Header
โ โโโ ๐ footer.php # แกแแแ แแ Footer
โโโ ๐ auth/ # Authentication (แแแแแแแแ)
โโโ ๐ modules/ # แแแแแขแแแแแ แแแแฃแแแแ
โโโ ๐ templates/ # Custom แแแแแแ
โโโ ๐ README.md # แแก แคแแแแ
โโโ ๐ LICENSE # แแแชแแแแแ
โโโ ๐ .htaccess # Apache แแแแคแแแฃแ แแชแแ
// โ
แฃแกแแคแ แแฎแ - PDO Prepared Statements
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);
// โ แแ แแกแแคแ แแฎแ - Direct Query
$query = "SELECT * FROM users WHERE id = " . $_GET['id'];
// Token-แแก แแแแแ แแ แแแ
$token = generateCSRFToken();
// Validation
if (!validateCSRFToken($_POST['_token'])) {
die('CSRF Token Invalid');
}
// Session Timeout
if (isset($_SESSION['last_activity']) &&
(time() - $_SESSION['last_activity'] > SESSION_TIMEOUT)) {
session_destroy();
}
- Strong Passwords: แแแแแแงแแแแ แซแแแแ แ แแแ แแแแแ
- HTTPS: Production-แแ แแฃแชแแแแแแแ HTTPS
- Regular Updates: แ แแแฃแแแ แฃแแแ แแแแแแฎแแแ PHP แแ MySQL
- Backup: แ แแแฃแแแ แฃแแ แกแแ แแแแ แแ แแแแแ แแแ
- Access Control: แจแแแฆแฃแแแ แฌแแแแแ
/config/
แแแ แแฅแขแแ แแแแ
:root {
--stack-primary: #667eea; /* แแแแแแ แ แคแแ แ */
--stack-secondary: #764ba2; /* แแแแแขแแแแแ แคแแ แ */
--stack-success: #06d6a0; /* แฌแแ แแแขแแแ */
--stack-info: #118ab2; /* แแแคแแ แแแชแแ */
--stack-warning: #ffd166; /* แแแคแ แแฎแแแแแ */
--stack-danger: #ef476f; /* แจแแชแแแแ */
--stack-dark: #073b4c; /* แแฃแฅแ */
}
- ๐ฑ Mobile: < 768px
- ๐ฑ Tablet: 768px - 1024px
- ๐ป Desktop: > 1024px
// แฌแแ แแแขแแแแก แจแแขแงแแแแแแแ
showSuccess('แแแแ แแชแแ แฌแแ แแแขแแแแ แแแกแ แฃแแแ!');
// แจแแชแแแแแก แจแแขแงแแแแแแแ
showError('แแแฎแแ แจแแชแแแแ!');
// แแแแแกแขแฃแ แแแแก แแแแฎแแแแ
confirmAction('แแแ แฌแแฃแแแแฃแแ แฎแแ แ?', function() {
// Action callback
});
// แแแแแฅแขแแก แจแแฅแแแ
$dbManager = new DatabaseManager($pdo);
// แชแฎแ แแแแแแก แแแฆแแแ
$tables = $dbManager->getTables();
// แชแฎแ แแแแก แแแคแแ แแแชแแ
$info = $dbManager->getTableInfo('users');
// แฉแแแแฌแแ แแแแก แแแฆแแแ
$result = $dbManager->getRecords('users', [
'page' => 1,
'limit' => 20,
'search' => 'john',
'order_by' => 'created_at',
'order_dir' => 'DESC'
]);
// แฉแแแแฌแแ แแก แแแแแขแแแ
$result = $dbManager->insertRecord('users', [
'username' => 'john_doe',
'email' => 'john@example.com'
]);
// แฉแแแแฌแแ แแก แแแแแฎแแแแ
$result = $dbManager->updateRecord('users', $id, [
'username' => 'john_updated'
]);
// แฉแแแแฌแแ แแก แฌแแจแแ
$result = $dbManager->deleteRecord('users', $id);
// Header-แแก แแแแแ แแ แแแ
echo UIHelper::getHeader('Page Title');
// Navigation-แแก แแแแแ แแ แแแ
echo UIHelper::getNavbar('current_page');
// Alert-แแก แแแแแ แแ แแแ
echo UIHelper::showAlert('Message', 'success');
// Pagination-แแก แแแแแ แแ แแแ
echo UIHelper::getPagination($page, $totalPages, $baseUrl);
// Footer-แแก แแแแแ แแ แแแ
echo UIHelper::getFooter();
STACK Core แแ แแก แฆแแ แแแแแก แแ แแแฅแขแ แแ แแแแแฎแแแแแ แงแแแแ แฌแแแแแก!
# Repository-แก แฉแแแแฌแแ แ
git clone https://github.com/skryper/stack-core.git
cd stack-core
# Development branch-แแ แแแแแกแแแ
git checkout -b feature/new-feature
# แชแแแแแแแแแแก แแแแแแแแ
# ...
# Commit แแ Push
git add .
git commit -m "Add new feature"
git push origin feature/new-feature
# Pull Request-แแก แจแแฅแแแ
- Code Style: PSR-12 แกแขแแแแแ แขแแก แแแงแแแ
- Comments: แแแแแแขแแ แแแ แฅแแ แแฃแ แแแแแ
- Testing: แงแแแแ แแฎแแแ แคแฃแแฅแชแแแกแแแแก แขแแกแขแแแแก แแแฌแแ แ
- Documentation: README.md-แก แแแแแฎแแแแ แแฎแแแ แคแฃแแฅแชแแแแแกแแแแก
แจแแชแแแแแแแก แจแแกแแฎแแ แแแแแแฎแกแแแแ: GitHub Issues
แจแแชแแแแแก แ แแแแ แขแ แฃแแแ แจแแแชแแแแแก:
- แกแแกแขแแแแก แแแ แกแแ
- PHP แแแ แกแแ
- แแแแแฏแแแ แ แแแ แแแฃแฅแชแแแกแแแแก
- แแแกแแแแแแแแ แแ แคแแฅแขแแฃแ แ แจแแแแแ
- แกแแ แแแจแแขแแแ (แแฃ แกแแญแแ แแ)
MIT License
Copyright (c) 2025 Skryper (https://stack.ge/)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
๐ Skryper
STACK Core-แแก แแแแแงแแแแแแกแแแแก แแแแแแแ!
แแฃ แแ แแแฅแขแ แแแแแฌแแแแ, แแแฎแแแ แแแกแชแแ โญ GitHub-แแ!