- Reaction score
- 112
- EasyCred
- 3,814
Objectif:
Créer un carnet d'adresses en PHP et MySQL, inclus la gestion des utilisateurs, la sécurité, la manipulation de données, et une interface utilisateur.
On vous explique comment vous pouvez le faire, y compris la création d'un formulaire de connexion et d'enregistrement sécurisés avec reCAPTCHA, ainsi qu'un calculateur de force du mot de passe.
Structure du Projet
```
/carnet_adresse/
|-- index.php
|-- login.php
|-- register.php
|-- contacts.php
|-- logout.php
|-- db.php
|-- header.php
|-- footer.php
|-- style.css
|-- password_strength.js
|-- recaptcha.php (inclure la clé secrète)
```
1. Fichier de Configuration et Connexion à la Base de Données (`db.php`)
2. En-tête et Pied de Page (`header.php` et `footer.php`)
*header.php*
*footer.php*
3. Page d'Accueil (`index.php`)
4. Formulaire de Connexion (`login.php`)
5. Formulaire d'Inscription (`register.php`)
6. Gestion de contacts (`contacts.php`)
7. Calculateur de Force du Mot de Passe (`password_strength.js`)
8. Style CSS (`style.css`)
9. Déconnexion (`logout.php`)
Réglages de la Base de Données
Vous devrez créer une base de données MySQL avec les tables nécessaires (`users`, `contacts`). Voici un exemple de requêtes SQL pour créer ces tables.
Conclusion
Ce projet est un bon exemple d'un carnet d'adresses de base utilisant PHP et MySQL. Vous pouvez l'étendre avec des fonctionnalités supplémentaires, y compris la validation plus poussée des formulaires, le tri et le filtrage des contacts, ainsi que des fonctionnalités de messagerie. Veillez à toujours garder la sécurité à l'esprit, en particulier lors de la manipulation de données utilisateurs.
EnjoyCoding
Créer un carnet d'adresses en PHP et MySQL, inclus la gestion des utilisateurs, la sécurité, la manipulation de données, et une interface utilisateur.
On vous explique comment vous pouvez le faire, y compris la création d'un formulaire de connexion et d'enregistrement sécurisés avec reCAPTCHA, ainsi qu'un calculateur de force du mot de passe.
Structure du Projet
```
/carnet_adresse/
|-- index.php
|-- login.php
|-- register.php
|-- contacts.php
|-- logout.php
|-- db.php
|-- header.php
|-- footer.php
|-- style.css
|-- password_strength.js
|-- recaptcha.php (inclure la clé secrète)
```
1. Fichier de Configuration et Connexion à la Base de Données (`db.php`)
PHP:
[/B]```php
<?php
$servername = "localhost";
$username = "root";
$password = ""; // Remplacez par votre mot de passe
$dbname = "carnet_adresse";
// Création de la connexion
$conn = new mysqli($servername, $username, $password, $dbname);
// Vérifie la connexion
if ($conn->connect_error) {
die("Erreur de connexion: " . $conn->connect_error);
}
?>
```
2. En-tête et Pied de Page (`header.php` et `footer.php`)
*header.php*
PHP:
[/B]
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<title>Carnet d'adresses</title>
</head>
<body>
<header>
<h1>Carnet d'adresses</h1>
<nav>
<a href="index.php">Accueil</a>
<a href="login.php">Connexion</a>
<a href="register.php">S'inscrire</a>
<a href="contacts.php">Contacts</a>
<a href="logout.php">Déconnexion</a>
</nav>
</header>
*footer.php*
PHP:
[/B]
<footer>
<p>© 2023 Carnet d'adresses</p>
</footer>
</body>
</html>
```
3. Page d'Accueil (`index.php`)
PHP:
[/B]<?php include 'header.php'; ?>
<h2>Bienvenue dans votre carnet d'adresses</h2>
<p>Veuillez vous connecter ou vous inscrire pour commencer !</p>
<?php include 'footer.php'; ?>
4. Formulaire de Connexion (`login.php`)
PHP:
[/B]<?php
session_start();
include 'db.php';
include 'header.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$email = $conn->real_escape_string($_POST['email']);
$password = $_POST['password'];
// Recherche de l'utilisateur
$query = "SELECT * FROM users WHERE email='$email'";
$result = $conn->query($query);
if ($result->num_rows > 0) {
$user = $result->fetch_assoc();
// Vérification du mot de passe
if (password_verify($password, $user['password'])) {
$_SESSION['user_id'] = $user['id'];
header("Location: contacts.php");
exit();
} else {
$error = "Mot de passe invalide.";
}
} else {
$error = "Aucun utilisateur trouvé.";
}
}
?>
<h2>Connexion</h2>
<form method="post" action="">
<label>Email:</label>
<input type="email" name="email" required>
<br>
<label>Mot de passe:</label>
<input type="password" name="password" required>
<br>
<button type="submit">Se connecter</button>
</form>
<?php if (isset($error)) echo "<p style='color:red;'>$error</p>"; ?>
<?php include 'footer.php'; ?>
5. Formulaire d'Inscription (`register.php`)
PHP:
[/B]<?php
session_start();
include 'db.php';
include 'header.php';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$email = $conn->real_escape_string($_POST['email']);
$password = $_POST['password'];
$password_hash = password_hash($password, PASSWORD_DEFAULT);
// Vérification ReCAPTCHA
$recaptchaResponse = $_POST['g-recaptcha-response'];
$secretKey = "votre_clé_secrète"; // Remplacez par votre clé secrète
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$secretKey&response=$recaptchaResponse");
$responseKeys = json_decode($response, true);
if(intval($responseKeys["success"]) !== 1) {
$error = "Veuillez confirmer que vous n'êtes pas un robot.";
} else {
// Insertion de l'utilisateur
$query = "INSERT INTO users (email, password) VALUES ('$email', '$password_hash')";
if ($conn->query($query) === TRUE) {
header("Location: login.php");
exit();
} else {
$error = "Erreur: " . $conn->error;
}
}
}
?>
<h2>S'inscrire</h2>
<form method="post" action="">
<label>Email:</label>
<input type="email" name="email" required>
<br>
<label>Mot de passe:</label>
<input type="password" name="password" id="password" required onkeyup="checkPasswordStrength()">
<span id="password-strength"></span>
<br>
<div class="g-recaptcha" data-sitekey="votre_clé_site"></div>
<button type="submit">S'inscrire</button>
</form>
<?php if (isset($error)) echo "<p style='color:red;'>$error</p>"; ?>
<script src='https://www.google.com/recaptcha/api.js'></script>
<script src="password_strength.js"></script>
<?php include 'footer.php'; ?>
6. Gestion de contacts (`contacts.php`)
PHP:
[/B]<?php
session_start();
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}
include 'db.php';
include 'header.php';
// Ajout et mise à jour de contact ici
// Exemple : Afficher les contacts
$result = $conn->query("SELECT * FROM contacts WHERE user_id = " . $_SESSION['user_id']);
?>
<h2>Mes Contacts</h2>
<table>
<tr>
<th>ID</th>
<th>Nom</th>
<th>Email</th>
<th>Actions</th>
</tr>
<?php while ($contact = $result->fetch_assoc()): ?>
<tr>
<td><?php echo $contact['id']; ?></td>
<td><?php echo $contact['name']; ?></td>
<td><?php echo $contact['email']; ?></td>
<td>
<a href="edit_contact.php?id=<?php echo $contact['id']; ?>">Éditer</a>
<a href="delete_contact.php?id=<?php echo $contact['id']; ?>">Supprimer</a>
</td>
</tr>
<?php endwhile; ?>
</table>
<?php include 'footer.php'; ?>
7. Calculateur de Force du Mot de Passe (`password_strength.js`)
JavaScript:
[/B]
function checkPasswordStrength() {
var password = document.getElementById("password").value;
var strengthText = document.getElementById("password-strength");
var strength = 0;
if (password.length > 7) strength++;
if (password.match(/[a-z]/)) strength++;
if (password.match(/[A-Z]/)) strength++;
if (password.match(/[0-9]/)) strength++;
if (password.match(/[\W_]/)) strength++;
switch (strength) {
case 0:
case 1:
strengthText.innerHTML = "<span style='color:red;'>Très faible</span>";
break;
case 2:
strengthText.innerHTML = "<span style='color:orange;'>Faible</span>";
break;
case 3:
strengthText.innerHTML = "<span style='color:yellow;'>Moyenne</span>";
break;
case 4:
case 5:
strengthText.innerHTML = "<span style='color:green;'>Forte</span>";
break;
}
}
8. Style CSS (`style.css`)
CSS:
[/B]
body {
font-family: Arial, sans-serif;
line-height: 1.6;
margin: 0;
padding: 0;
}
header {
background: #333;
color: #fff;
padding: 10px 0;
text-align: center;
}
nav a {
color: #fff;
padding: 10px;
text-decoration: none;
}
nav a:hover {
background: #555;
}
footer {
text-align: center;
padding: 10px 0;
background: #333;
color: #fff;
position: absolute;
bottom: 0;
width: 100%;
}
table {
width: 100%;
border-collapse: collapse;
}
table, th, td {
border: 1px solid #dddddd;
}
th, td {
padding: 8px;
text-align: left;
}
```
9. Déconnexion (`logout.php`)
PHP:
[/B]
<?php
session_start();
session_destroy();
header("Location: index.php");
exit();
?>
Réglages de la Base de Données
Vous devrez créer une base de données MySQL avec les tables nécessaires (`users`, `contacts`). Voici un exemple de requêtes SQL pour créer ces tables.
PHP:
[/B]
CREATE DATABASE carnet_adresse;
USE carnet_adresse;
CREATE TABLE users (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL
);
CREATE TABLE contacts (
id INT(11) AUTO_INCREMENT PRIMARY KEY,
user_id INT(11) NOT NULL,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id)
);
```
Conclusion
Ce projet est un bon exemple d'un carnet d'adresses de base utilisant PHP et MySQL. Vous pouvez l'étendre avec des fonctionnalités supplémentaires, y compris la validation plus poussée des formulaires, le tri et le filtrage des contacts, ainsi que des fonctionnalités de messagerie. Veillez à toujours garder la sécurité à l'esprit, en particulier lors de la manipulation de données utilisateurs.
EnjoyCoding
Last edited: