{"id":27182799,"url":"https://github.com/emmadiblo/stand.php","last_synced_at":"2026-05-07T08:36:02.137Z","repository":{"id":286297239,"uuid":"960861970","full_name":"emmadiblo/stand.php","owner":"emmadiblo","description":"Mini-bibliothèque PHP  pour faciliter la gestion des bases de données et des sessions","archived":false,"fork":false,"pushed_at":"2025-04-05T17:16:51.000Z","size":80,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T15:17:00.409Z","etag":null,"topics":["bibliotheque","burundi","crud","database","emmadiblo","framwork","numedev","php","sql","stand"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emmadiblo.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-04-05T08:12:31.000Z","updated_at":"2025-04-06T17:53:52.000Z","dependencies_parsed_at":"2025-04-05T15:39:12.906Z","dependency_job_id":null,"html_url":"https://github.com/emmadiblo/stand.php","commit_stats":null,"previous_names":["emmadiblo/stand","emmadiblo/stand.php"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmadiblo%2Fstand.php","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmadiblo%2Fstand.php/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmadiblo%2Fstand.php/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emmadiblo%2Fstand.php/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emmadiblo","download_url":"https://codeload.github.com/emmadiblo/stand.php/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248055269,"owners_count":21040157,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bibliotheque","burundi","crud","database","emmadiblo","framwork","numedev","php","sql","stand"],"created_at":"2025-04-09T15:17:05.068Z","updated_at":"2026-05-07T08:36:02.102Z","avatar_url":"https://github.com/emmadiblo.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Explication sur l'utilisation de `stand.php`\r\n\r\nLe fichier `stand.php` est une bibliothèque PHP complète pour faciliter la gestion des bases de données et des sessions. Voici une documentation détaillée des fonctionnalités disponibles dans ce fichier.\r\n\r\n\u003e [!IMPORTANT]  \r\n\u003e Télécharger d'abord le fichier et incluez le dans votre  projet.\r\n\r\n```php\r\nrequire_once 'stand.php';\r\n```\r\n## Table des matières\r\n\r\n1. [Gestion de bases de données](#gestion-de-bases-de-données)\r\n   - [Connexion à la base de données](#connexion-à-la-base-de-données)\r\n   - [Requêtes SQL](#requêtes-sql)\r\n   - [Opérations CRUD](#opérations-crud)\r\n   - [Transactions](#transactions)\r\n   - [Pagination](#pagination)\r\n   - [Fonctions avancées](#fonctions-avancées)\r\n\r\n2. [Gestion de sessions](#gestion-de-sessions)\r\n   - [Initialisation et destruction](#initialisation-et-destruction)\r\n   - [Manipulation des données de session](#manipulation-des-données-de-session)\r\n   - [Messages flash](#messages-flash)\r\n\r\n3. [Fonctions de sécurité](#fonctions-de-sécurité)\r\n   - [Sanitization](#sanitization)\r\n   - [Protection CSRF](#protection-csrf)\r\n   - [Gestion des mots de passe](#gestion-des-mots-de-passe)\r\n   - [Génération de jetons](#génération-de-jetons)\r\n\r\n## Gestion de bases de données\r\n\r\n### Connexion à la base de données avec  `ConnDB()`\r\n\r\nLa fonction `ConnDB()` permet d'établir une connexion à la base de données en supportant à la fois `MySQLi` et `PDO`.\r\n\r\n#### syntaxe\r\n```php\r\n$variable = ConnDB('host', 'username', 'password', 'database', 'connType');\r\n```\r\n\r\n#### Options\r\n- `host`: Adresse de l'hôte de la base de données\r\n- `username`: Nom d'utilisateur\r\n- `password`: Mot de passe\r\n- `database`: Nom de la base de données\r\n- `connType`: Type de connexion ('mysqli' ou 'PDO', par défaut 'PDO')\r\n\r\n\r\n#### exemple\r\n```php\r\n$conn = ConnDB('localhost', 'root', '', 'contacts', 'mysqli');\r\n```\r\n\r\n\r\n### Executer les requetes SQL avec la fonction `Query()` \r\n\r\nLa fonction `Query()` exécute une requête SQL personnalisée avec des paramètres.\r\n\r\n`syntaxe:`\r\n```php\r\n$variable = Query(\"requete\", [parametres], $conn);\r\n```\r\n\r\n#### Options\r\n- `requete`: Requete SQL\r\n- `parametres`: Parametres d'une requete\r\n- `$conn`: Variable de connexion à la base de données\r\n\r\n\r\n`exemple:`\r\n```php\r\n$results = Query(\"SELECT * FROM contacts WHERE id = ?\", [1], $connexion);\r\n```\r\n\r\n`exemple avec plus d'un paramètre:`\r\n```php\r\n$results = Query(\"SELECT * FROM contacts WHERE id = ? and nom = ?\", [1,'uwizeyimana'], $connexion);\r\nif ($results) {\r\n    foreach ($results as $row) {\r\n        echo \"ID: \" . $row['id'] . \" - Name: \" . $row['nom'] . \"\u003cbr\u003e\";\r\n    }\r\n} else {\r\n    echo \"Aucun résultat trouvé.\";\r\n}\r\n```\r\n\r\n\r\n### Opérations CRUD\r\n\r\n#### Insertion avec Insert() \r\n\r\nLa fonction `Insert()`permet d'inserer des données dans la bse de données.\r\n\r\n`syntaxe:`\r\n```php\r\n$variable = Insert('table', [data], $conn);\r\n```\r\n\r\n#### Options\r\n- `table`:  Nom de la table\r\n- `data`:  Tableau associatif des données à insérer (clé =\u003e valeur).\r\n- `$conn`: Variable de connexion à la base de données\r\n\r\n`exemple:`\r\n```php\r\n$userId = Insert('users', [\r\n    'username' =\u003e 'emmadiblo',\r\n    'email' =\u003e 'emmadiblo@gmail.com',\r\n    'password' =\u003e HashPassword('secure_password')\r\n], $conn);\r\n```\r\n\r\n\r\n\r\n#### Sélection\r\n\r\n`exemple:`\r\n```php\r\n// Sélectionner plusieurs lignes\r\n$users = Select('users', $conn, ['status' =\u003e 'active'], 'id, username, email', 'username ASC', 10, 0);\r\n\r\n// Sélectionner une seule ligne\r\n$user = SelectOne('users', $conn, ['id' =\u003e 123]);\r\n```\r\n\r\n#### Mise à jour\r\n\r\n`exemple:`\r\n```php\r\n// Mettre à jour avec condition\r\n$affected = Update('users', \r\n    ['status' =\u003e 'inactive'], \r\n    ['id' =\u003e 123], \r\n    $conn\r\n);\r\n\r\n// Mettre à jour toutes les lignes\r\n$affected = UpdateAll('users', ['status' =\u003e 'pending'], $conn);\r\n```\r\n\r\n#### Suppression\r\n\r\n`exemple:`\r\n```php\r\n// Supprimer avec condition\r\n$affected = Delete('users', ['id' =\u003e 123], $conn);\r\n\r\n// Supprimer toutes les lignes (avec confirmation obligatoire)\r\n$affected = DeleteAll('users', $conn, true);\r\n```\r\n\r\n### Transactions\r\n\r\n`exemple:`\r\n```php\r\nBeginTransaction($conn);\r\n\r\ntry {\r\n    // Opérations sur la base de données...\r\n    \r\n    CommitTransaction($conn);\r\n} catch (Exception $e) {\r\n    RollbackTransaction($conn);\r\n    // Gestion de l'erreur...\r\n}\r\n```\r\n\r\n### Pagination\r\n\r\n`exemple:`\r\n```php\r\n$result = Paginate('articles', $conn, 2, 10, ['status' =\u003e 'published']);\r\n\r\n// $result contient 'data' (les articles) et 'pagination' (informations sur la pagination)\r\n$articles = $result['data'];\r\n$pagination = $result['pagination'];\r\n```\r\n\r\n### Fonctions avancées\r\n\r\n#### Vérifier l'existence d'un enregistrement\r\n\r\n`exemple:`\r\n```php\r\nif (Exists('users', ['email' =\u003e 'john@example.com'], $conn)) {\r\n    // L'utilisateur existe déjà\r\n}\r\n```\r\n\r\n#### Comptage\r\n\r\n`exemple:`\r\n```php\r\n$count = Count('users', $conn, ['status' =\u003e 'active']);\r\n```\r\n\r\n#### Recherche avec LIKE\r\n\r\n`exemple:`\r\n```php\r\n$results = SearchLike('users', \r\n    ['username' =\u003e 'john', 'email' =\u003e 'example'], \r\n    $conn,  \r\n    'id, username, email', \r\n    'OR'\r\n);\r\n```\r\n\r\n#### Upsert (Insert ou Update)\r\n\r\n`exemple:`\r\n```php\r\n$id = Upsert('users', \r\n    ['email' =\u003e 'john@example.com', 'username' =\u003e 'john_doe', 'last_login' =\u003e date('Y-m-d H:i:s')], \r\n    ['email'], \r\n    $conn\r\n);\r\n```\r\n\r\n#### Insert ou Update (MySQL)\r\n\r\n`exemple:`\r\n```php\r\n$result = InsertOrUpdate('users', \r\n    ['email' =\u003e 'john@example.com', 'username' =\u003e 'john_doe', 'status' =\u003e 'active'], \r\n    null, \r\n    $conn\r\n);\r\n```\r\n\r\n## Gestion de sessions\r\n\r\n### Initialisation et destruction\r\n\r\n`exemple:`\r\n```php\r\n// Initialiser une session sécurisée\r\nInitSession([\r\n    'cookie_lifetime' =\u003e 86400, // 24 heures\r\n    'cookie_secure' =\u003e true\r\n]);\r\n\r\n// Régénérer l'ID de session\r\nRegenerateSessionId();\r\n\r\n// Détruire la session\r\nDestroySession();\r\n```\r\n\r\n### Manipulation des données de session\r\n\r\n`exemple:`\r\n```php\r\n// Définir une valeur\r\nSetSession('user_id', 123);\r\n\r\n// Récupérer une valeur\r\n$userId = GetSession('user_id');\r\n\r\n// Vérifier si une clé existe\r\nif (HasSession('user_id')) {\r\n    // La clé existe\r\n}\r\n\r\n// Supprimer une valeur\r\nRemoveSession('user_id');\r\n\r\n// Vider la session\r\nClearSession();\r\n```\r\n\r\n### Messages flash\r\n\r\n`exemple:`\r\n```php\r\n// Définir un message flash\r\nSetFlash('success', 'Votre profil a été mis à jour avec succès.');\r\n\r\n// Vérifier s'il y a des messages flash\r\nif (HasFlash()) {\r\n    // Il y a des messages flash\r\n}\r\n\r\n// Récupérer et supprimer les messages flash\r\n$flashMessages = GetFlash();\r\nforeach ($flashMessages as $flash) {\r\n    echo '\u003cdiv class=\"alert alert-' . $flash['type'] . '\"\u003e' . $flash['message'] . '\u003c/div\u003e';\r\n}\r\n```\r\n\r\n## Fonctions de sécurité\r\n\r\n### Sanitization\r\n\r\n`exemple:`\r\n```php\r\n$cleanData = Sanitize($_POST);\r\n```\r\n\r\n### Protection CSRF\r\n\r\n`exemple:`\r\n```php\r\n// Dans le formulaire\r\n$token = GenerateCsrfToken('user_form');\r\necho '\u003cinput type=\"hidden\" name=\"csrf_token\" value=\"' . $token . '\"\u003e';\r\n\r\n// Lors de la soumission du formulaire\r\nif (ValidateCsrfToken($_POST['csrf_token'], 'user_form')) {\r\n    // Token valide, traiter le formulaire\r\n} else {\r\n    // Token invalide\r\n}\r\n\r\n// Nettoyer les jetons expirés\r\nCleanExpiredCsrfTokens();\r\n```\r\n\r\n### Gestion des mots de passe\r\n\r\n`exemple:`\r\n```php\r\n// Hacher un mot de passe\r\n$hashedPassword = HashPassword('secure_password');\r\n\r\n// Vérifier un mot de passe\r\nif (VerifyPassword('password_to_check', $hashedPassword)) {\r\n    // Mot de passe correct\r\n}\r\n\r\n// Vérifier si un rehachage est nécessaire\r\nif (PasswordNeedsRehash($hashedPassword)) {\r\n    $newHash = HashPassword('secure_password');\r\n    // Mettre à jour le hash dans la base de données\r\n}\r\n```\r\n\r\n### Génération de jetons\r\n\r\n`exemple:`\r\n```php\r\n// Générer un UUID\r\n$uuid = GenerateUUID();\r\n\r\n// Générer un jeton d'accès\r\n$accessToken = GenerateAccessToken(64);\r\n```\r\n\r\nCette bibliothèque offre un ensemble complet de fonctions pour simplifier le développement d'applications PHP en fournissant des abstractions pour les opérations courantes de base de données et de gestion des sessions, tout en intégrant les bonnes pratiques de sécurité.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmadiblo%2Fstand.php","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femmadiblo%2Fstand.php","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femmadiblo%2Fstand.php/lists"}