# 🚀 Améliorations - Mini Site de Vente Digitale

## 📋 Vue d'ensemble

La démo a été enrichie avec des fonctionnalités essentielles pour un vrai site de vente :

---

## 1️⃣ INSCRIPTION AMÉLIORÉE

### Champs ajoutés :
- **Informations personnelles** :
  - Nom complet *
  - Email * (avec note sur réception des liens)
  - Téléphone (optionnel)
  - Mot de passe * (min 6 caractères)

- **Adresse de livraison** :
  - Rue * (adresse complète)
  - Code postal * (validation 5 chiffres)
  - Ville *
  - Pays * (sélection: France, Belgique, Suisse, Luxembourg, Canada, Autre)

### Validations PHP :
```php
// Chaque champ a une validation spécifique
- Email: filter_var() + vérification unicité
- Code postal: regex ^\d{5}$
- Adresse: non-vide + min 2 caractères
- Mot de passe: min 6 caractères
```

### Stockage :
```php
$users[$user_id] = [
    'id' => $user_id,
    'name' => $name,
    'email' => $email,
    'phone' => $phone,
    'address' => [
        'street' => $street,
        'zipcode' => $zipcode,
        'city' => $city,
        'country' => $country
    ],
    'password' => hashPassword($password),
    'created_at' => date('Y-m-d H:i:s')
];
```

### Design :
- Sections clairement séparées (infos personnelles / adresse)
- Champs groupés (CP + Ville côte à côte)
- Validation en temps réel (HTML5 + PHP)
- Messages d'erreur clairs avec listes

---

## 2️⃣ PANIER AMÉLIORÉ

### Nouvelles fonctionnalités :

#### A) **Gestion des quantités**
```php
// Structure: permet plusieurs fois le même produit
$_SESSION['cart'] = [1, 1, 2, 3, 3, 3] // 2x produit 1, 1x produit 2, 3x produit 3
```

- Champ input quantité par produit
- Bouton "Mettre à jour" pour recalculer
- Quantité min 1, max 10

#### B) **Affichage enrichi**
```
Product Card:
├─ Image (emoji)
├─ Nom + Description
├─ Prix unitaire × Quantité
├─ Sous-total produit
├─ Bouton Retirer (✕)
└─ Input quantité
```

#### C) **Calcul du total détaillé**
```
Sous-total:         XXX€
Livraison:          Gratuit ✓
Taxe estimée (20%): XXX€
────────────────────────
TOTAL TTC:          XXX€
```

#### D) **Actions du panier**
- 💾 Mettre à jour → récalcule le panier avec les nouvelles quantités
- Procéder au paiement PayPal → validation et checkout

#### E) **Infos supplémentaires**
```
✓ Votre adresse de facturation (celle enregistrée à votre profil)
✓ Les liens restent valides 30 jours
✓ Email immédiat après paiement
✓ Téléchargements instantanés (pas de livraison physique)
```

---

## 3️⃣ DASHBOARD ENRICHI

### 4 Cartes d'information :

#### **👤 Profil**
- Nom complet
- Email
- Téléphone (si fourni)
- Date d'inscription

#### **📍 Adresse de livraison**
- Adresse formatée complète
- Bouton "Modifier" pour édition future
- Message si pas d'adresse

#### **📦 Commandes**
- Nombre total de commandes
- Total dépensé (en rouge accent)

#### **💾 Téléchargements**
- Nombre de fichiers disponibles
- Info: "Durée de validité: 30 jours"

---

## 4️⃣ FLUX D'ACHAT COMPLET

```
1. INSCRIPTION
   ↓
2. CONNEXION (auto après inscription)
   ↓
3. PARCOURIR PRODUITS (home)
   ↓
4. AJOUTER AU PANIER
   ↓
5. VOIR PANIER + modifier quantités
   ↓
6. CHECKOUT (simulation PayPal)
   ↓
7. PAIEMENT VALIDÉ
   ↓
8. EMAIL + TOKENS DE TÉLÉCHARGEMENT
   ↓
9. ACCÈS DANS DASHBOARD (30j validité)
```

---

## 5️⃣ INTÉGRATIONS FUTURES (Production)

### Base de données MySQL
```sql
CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(255),
  email VARCHAR(255) UNIQUE,
  phone VARCHAR(20),
  address_street VARCHAR(255),
  address_zipcode CHAR(5),
  address_city VARCHAR(100),
  address_country VARCHAR(100),
  password_hash VARCHAR(255),
  created_at TIMESTAMP
);

CREATE TABLE carts (
  id INT PRIMARY KEY,
  user_id INT,
  product_id INT,
  quantity INT,
  added_at TIMESTAMP
);

CREATE TABLE orders (
  id VARCHAR(50) PRIMARY KEY,
  user_id INT,
  total DECIMAL(10, 2),
  status ENUM('pending','completed','cancelled'),
  created_at TIMESTAMP
);

CREATE TABLE downloads (
  token VARCHAR(50) PRIMARY KEY,
  user_id INT,
  product_id INT,
  order_id VARCHAR(50),
  expires_at TIMESTAMP,
  created_at TIMESTAMP
);
```

### Intégration PayPal réelle
```php
// Au checkout:
1. Créer session de paiement via API PayPal
2. Rediriger vers formulaire de paiement PayPal
3. Webhook retour: payment.capture.completed
4. Créer tokens de téléchargement
5. Envoyer email avec liens
```

### Email transactionnel
```php
// Après paiement validé:
$subject = "Votre achat - Liens de téléchargement";
$body = "
Merci pour votre achat!

Vos téléchargements:
" . implode("\n", $download_links) . "

Valides jusqu'au: " . $expiry_date . "
";

mail($user['email'], $subject, $body);
```

### Stockage sécurisé des fichiers
```
/root/            (hors accès web)
├── private/
│   └── downloads/
│       ├── ebook-seo.pdf
│       ├── template-wp.zip
│       └── tools-pack.zip

/public_html/     (accès web)
└── shop.php       (validation token)
```

---

## 6️⃣ CODE CLÉS

### Hachage mot de passe
```php
function hashPassword($pwd) {
    return password_hash($pwd, PASSWORD_BCRYPT);
}
// Vérification: password_verify($input, $hash)
```

### Génération token téléchargement
```php
$token = bin2hex(random_bytes(16)); // 32 caractères hex
// Unique, sécurisé, impossible à deviner
```

### Validation adresse email
```php
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $error = "Email invalide";
}
```

### Validation code postal
```php
if (!preg_match('/^\d{5}$/', $zipcode)) {
    $error = "Code postal invalide (5 chiffres)";
}
```

---

## 7️⃣ NEXT STEPS

### Court terme (cette semaine)
- [ ] Connexion à base de données MySQL OVH
- [ ] Remplacer simulations JSON par PDO
- [ ] Intégrer API PayPal en SANDBOX

### Moyen terme (semaine 2-3)
- [ ] Email transactionnel (SendGrid ou mail natif)
- [ ] Stockage fichiers sécurisé
- [ ] Page d'édition du profil
- [ ] Historique de commandes

### Long terme
- [ ] Mode LIVE PayPal
- [ ] Analyses / stats (ventes, clients)
- [ ] Coupons de réduction
- [ ] Abonnements / accès continu
- [ ] API REST pour intégrations

---

## 📞 Support

Pour des questions sur l'implémentation :
- Validations : voir bloc PHP en début du fichier
- Design : CSS variables `--accent`, `--bg`, etc.
- Stockage : fonctions `loadData()` et `saveData()`

Bonne chance ! 🚀
