0% ont trouvé ce document utile (0 vote)
12 vues18 pages

Structure des fichiers de virement bancaire

Transféré par

Gil
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
12 vues18 pages

Structure des fichiers de virement bancaire

Transféré par

Gil
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

Structure des fichiers

/bank_transfer/

├── css/

│ └── [Link]

├── includes/

│ ├── [Link]

│ ├── [Link]

│ ├── [Link]

│ └── [Link]

├── [Link]

├── [Link]

├── [Link]

├── [Link]

├── [Link]

└── [Link]

[Link]

<?php

// Configuration de la base de données

define('DB_HOST', 'localhost');

define('DB_USER', 'votre_utilisateur');

define('DB_PASS', 'votre_mot_de_passe');

define('DB_NAME', 'bank_transfer');

// Clé secrète pour les tokens CSRF


define('CSRF_SECRET', 'votre_clé_secrète');

// Configuration de l'envoi d'emails

define('SMTP_HOST', '[Link]');

define('SMTP_PORT', 587);

define('SMTP_USER', 'votre_email@[Link]');

define('SMTP_PASS', 'votre_mot_de_passe_smtp');

[Link]

<?php

require_once '[Link]';

function getDbConnection() {

static $conn;

if ($conn === null) {

$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

if ($conn->connect_error) {

die("Erreur de connexion à la base de données : " . $conn->connect_error);

return $conn;

[Link]

<?php

require_once '[Link]';

require_once '[Link]';
function effectuerVirement($expediteurId, $destinataireId, $montant) {

$conn = getDbConnection();

// Vérifier les soldes

$stmt = $conn->prepare("SELECT solde FROM comptes WHERE id = ?");

$stmt->bind_param("i", $expediteurId);

$stmt->execute();

$result = $stmt->get_result();

$soldeExpediteur = $result->fetch_assoc()['solde'];

if ($soldeExpediteur < $montant) {

throw new Exception("Solde insuffisant");

// Commencer la transaction

$conn->begin_transaction();

try {

// Débiter l'expéditeur

$stmt = $conn->prepare("UPDATE comptes SET solde = solde - ? WHERE id = ?");

$stmt->bind_param("di", $montant, $expediteurId);

$stmt->execute();

// Créditer le destinataire
$stmt = $conn->prepare("UPDATE comptes SET solde = solde + ? WHERE id = ?");

$stmt->bind_param("di", $montant, $destinataireId);

$stmt->execute();

// Enregistrer la transaction

$stmt = $conn->prepare("INSERT INTO transactions (expediteur_id, destinataire_id, montant, date)


VALUES (?, ?, ?, NOW())");

$stmt->bind_param("iid", $expediteurId, $destinataireId, $montant);

$stmt->execute();

$conn->commit();

// Envoyer une notification

envoyerNotification($expediteurId, "Virement effectué", "Vous avez effectué un virement de


$montant €");

envoyerNotification($destinataireId, "Virement reçu", "Vous avez reçu un virement de $montant


€");

return true;

} catch (Exception $e) {

$conn->rollback();

throw $e;

function envoyerNotification($userId, $sujet, $message) {

// Implémentation de l'envoi d'email (utiliser une bibliothèque comme PHPMailer)


// ...

function verifierToken($token) {

if (!isset($_SESSION['csrf_token']) || $token !== $_SESSION['csrf_token']) {

die("Token CSRF invalide");

function genererToken() {

if (!isset($_SESSION['csrf_token'])) {

$_SESSION['csrf_token'] = bin2hex(random_bytes(32));

return $_SESSION['csrf_token'];

[Link]

<?php

session_start();

function estConnecte() {

return isset($_SESSION['user_id']);

function connecterUtilisateur($id, $nom) {

$_SESSION['user_id'] = $id;
$_SESSION['user_name'] = $nom;

function deconnecterUtilisateur() {

session_unset();

session_destroy();

function obtenirUtilisateurId() {

return $_SESSION['user_id'] ?? null;

[Link]

<?php

require_once 'includes/[Link]';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

$email = $_POST['email'];

$password = $_POST['password'];

$conn = getDbConnection();

$stmt = $conn->prepare("SELECT id, nom, mot_de_passe FROM utilisateurs WHERE email = ?");

$stmt->bind_param("s", $email);

$stmt->execute();

$result = $stmt->get_result();
if ($user = $result->fetch_assoc()) {

if (password_verify($password, $user['mot_de_passe'])) {

connecterUtilisateur($user['id'], $user['nom']);

header("Location: [Link]");

exit;

$erreur = "Email ou mot de passe incorrect";

?>

<!DOCTYPE html>

<html lang="fr">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Connexion</title>

<link rel="stylesheet" href="css/[Link]">

</head>

<body>

<div class="container">

<h1>Connexion</h1>

<?php if (isset($erreur)): ?>

<div class="erreur"><?= htmlspecialchars($erreur) ?></div>


<?php endif; ?>

<form method="post">

<div>

<label for="email">Email :</label>

<input type="email" id="email" name="email" required>

</div>

<div>

<label for="password">Mot de passe :</label>

<input type="password" id="password" name="password" required>

</div>

<button type="submit">Se connecter</button>

</form>

<p>Pas encore de compte ? <a href="[Link]">S'inscrire</a></p>

</div>

</body>

</html>

tableau de [Link]

<?php

require_once 'includes/[Link]';

if (!estConnecte()) {

header("Location: [Link]");

exit;

}
$userId = obtenirUtilisateurId();

$conn = getDbConnection();

// Récupérer le solde du compte

$stmt = $conn->prepare("SELECT solde FROM comptes WHERE utilisateur_id = ?");

$stmt->bind_param("i", $userId);

$stmt->execute();

$result = $stmt->get_result();

$solde = $result->fetch_assoc()['solde'];

// Récupérer les dernières transactions

$stmt = $conn->prepare("SELECT * FROM transactions WHERE expediteur_id = ? OR destinataire_id = ?


ORDER BY date DESC LIMIT 10");

$stmt->bind_param("ii", $userId, $userId);

$stmt->execute();

$transactions = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);

?>

<!DOCTYPE html>

<html lang="fr">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Tableau de bord</title>

<link rel="stylesheet" href="css/[Link]">

</head>
<body>

<div class="container">

<h1>Bienvenue, <?= htmlspecialchars($_SESSION['user_name']) ?></h1>

<p>Votre solde : <?= number_format($solde, 2) ?> €</p>

<h2>Dernières transactions</h2>

<table>

<thead>

<tr>

<th>Date</th>

<th>Type</th>

<th>Montant</th>

</tr>

</thead>

<tbody>

<?php foreach ($transactions as $transaction): ?>

<tr>

<td><?= htmlspecialchars($transaction['date']) ?></td>

<td><?= $transaction['expediteur_id'] == $userId ? 'Envoyé' : 'Reçu' ?></td>

<td><?= number_format($transaction['montant'], 2) ?> €</td>

</tr>

<?php endforeach; ?>

</tbody>

</table>
<a href="[Link]" class="button">Effectuer un virement</a>

<a href="[Link]" class="button">Se déconnecter</a>

</div>

</body>

</html>

[Link]

<?php

require_once 'includes/[Link]';

if (!estConnecte()) {

header("Location: [Link]");

exit;

$userId = obtenirUtilisateurId();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

verifierToken($_POST['csrf_token']);

$destinataireId = $_POST['destinataire'];

$montant = floatval($_POST['montant']);

try {

effectuerVirement($userId, $destinataireId, $montant);

$succes = "Virement effectué avec succès";


} catch (Exception $e) {

$erreur = $e->getMessage();

$conn = getDbConnection();

$stmt = $conn->prepare("SELECT id, nom FROM utilisateurs WHERE id != ?");

$stmt->bind_param("i", $userId);

$stmt->execute();

$destinataires = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);

?>

<!DOCTYPE html>

<html lang="fr">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Effectuer un virement</title>

<link rel="stylesheet" href="css/[Link]">

</head>

<body>

<div class="container">

<h1>Effectuer un virement</h1>

<?php if (isset($succes)): ?>

<div class="succes"><?= htmlspecialchars($succes) ?></div>


<?php endif; ?>

<?php if (isset($erreur)): ?>

<div class="erreur"><?= htmlspecialchars($erreur) ?></div>

<?php endif; ?>

<form method="post">

<input type="hidden" name="csrf_token" value="<?= genererToken() ?>">

<div>

<label for="destinataire">Destinataire :</label>

<select id="destinataire" name="destinataire" required>

<?php foreach ($destinataires as $destinataire): ?>

<option value="<?= $destinataire['id'] ?>"><?= htmlspecialchars($destinataire['nom']) ?


></option>

<?php endforeach; ?>

</select>

</div>

<div>

<label for="montant">Montant (€) :</label>

<input type="number" id="montant" name="montant" step="0.01" min="0.01" required>

</div>

<button type="submit">Effectuer le virement</button>

</form>

<a href="[Link]">Retour au tableau de bord</a>

</div>

</body>

</html>

dé[Link]
<?php

require_once 'includes/[Link]';

deconnecterUtilisateur();

header("Location: [Link]");

exit;

[Link]

body {

font-family: Arial, sans-serif;

line-height: 1.6;

margin: 0;

padding: 0;

background-color: #f4f4f4;

.container {

width: 80%;

margin: auto;

overflow: hidden;

padding: 20px;

h1, h2 {

color: #333;

}
form {

background: #fff;

padding: 20px;

margin-bottom: 20px;

border-radius: 5px;

input[type="email"],

input[type="password"],

input[type="number"],

select {

width: 100%;

padding: 10px;

margin-bottom: 10px;

button {

display: inline-block;

background: #333;

color: #fff;

padding: 10px 20px;

border: none;

cursor: pointer;

}
button:hover {

background: #555;

.erreur {

background: #ffecec;

color: #721c24;

padding: 10px;

margin-bottom: 10px;

border: 1px solid #f5c6cb;

border-radius: 5px;

.succes {

background: #d4edda;

color: #155724;

padding: 10px;

margin-bottom: 10px;

border: 1px solid #c3e6cb;

border-radius: 5px;

table {

width: 100%;
border-collapse: collapse;

margin-bottom: 20px;

table, th, td {

border: 1px solid #ddd;

th, td {

text-align: left;

padding: 10px;

th {

background-color: #f2f2f2;

.button {

display: inline-block;

background: #333;

color: #fff;

padding: 10px 20px;

text-decoration: none;

margin-right: 10px;

}
.button:hover {

background: #555;

Vous aimerez peut-être aussi