diff --git a/api.js b/api.js
index 6dcb769918e8deeb05b57d8c7b87770824647c7b..291659ab85f8232d6b6307e54baa8e0a21e2035b 100644
--- a/api.js
+++ b/api.js
@@ -108,7 +108,45 @@ module.exports = (passport) => {
                         return;
                     })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'fournisseur';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du fournisseur existe déjà.';
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -124,7 +162,45 @@ module.exports = (passport) => {
                     return;
                 })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'fournisseur';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du fournisseur existe déjà.';
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -142,13 +218,54 @@ module.exports = (passport) => {
                 req.body.email,
                 req.body.telephone,
             ).then(fournisseur => {
-                res.set('Content-type', 'plain/text');
-                res.status(200).send('fournisseur créé');
+                res.status(200); // Ca aurait été plus malins de faire un form qui fait un fetchJS plutot qu'un form html qui ne prend pas de réponse...
+                res.redirect('/fournisseurs'); // Théo, change la route si besoin
+                res.end();
                 return;
-            }).catch(err => {
-                res.status(500).send('' + err);
-                return;
-            });
+            })
+                .catch(err => {
+                    let method = 'post';
+                    let api = 'fournisseur';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du fournisseur existe déjà.';
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
+                    return;
+                });
+
         }
     );
 
@@ -173,11 +290,50 @@ module.exports = (passport) => {
                 req.body.email,
                 req.body.telephone,
             ).then(fournisseur => {
-                res.set('Content-type', 'plain/text');
-                res.status(200).send('fournisseur modifié');
+                res.status(200);
+                res.redirect('/fournisseurs'); // Théo, change si besoin
+                res.end();
                 return;
             }).catch(err => {
-                res.status(500).send('' + err);
+                let method = 'put';
+                let api = 'fournisseur';
+                let html_code = 500;
+                let redirect_code = '';
+
+                switch (err.code) {
+                    case 'SQLITE_CONSTRAINT':
+                        if (err.message.includes('UNIQUE')) {
+                            redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du fournisseur existe déjà.';
+                            html_code = 409; // Conflict
+                        }
+                        else if (err.message.includes('FOREIGN KEY')) {
+                            redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                            html_code = 400; // Bad Request
+                        }
+                        break;
+
+                    case 'SQLITE_BUSY':
+                        redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                        html_code = 503; // Service Unavailable
+                        break;
+
+                    case 'SQLITE_READONLY':
+                        redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                        html_code = 403; // Forbidden
+                        break;
+
+                    // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                    default:
+                        redirect_code = '&erreur_raw=' + err;
+                        break;
+                }
+
+                res.status(html_code);
+                console.log(err);
+
+                res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                res.end();
                 return;
             });
         }
@@ -190,11 +346,51 @@ module.exports = (passport) => {
         function (req, res) {
             dbHelper.fournisseur.delete(req.params.nom_fournisseur)
                 .then(fournisseur => {
-                    res.set('Content-type', 'plain/text');
-                    res.status(200).send('fournisseur supprimé');
+                    res.status(200);
+                    res.redirect('/fournisseurs'); // Théo, change si besoin
+                    res.end();
                     return;
-                }).catch(err => {
-                    res.status(500).send('' + err);
+                })
+                .catch(err => {
+                    let method = 'delete';
+                    let api = 'fournisseur';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du fournisseur existe déjà.';
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -216,7 +412,45 @@ module.exports = (passport) => {
                         return;
                     })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'produit';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -232,7 +466,45 @@ module.exports = (passport) => {
                     return;
                 })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'produit';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -254,7 +526,45 @@ module.exports = (passport) => {
                 res.status(200).send('produit créé');
                 return;
             }).catch(err => {
-                res.status(500).send('' + err);
+                let method = 'post';
+                let api = 'produit';
+                let html_code = 500;
+                let redirect_code = '';
+
+                switch (err.code) {
+                    case 'SQLITE_CONSTRAINT':
+                        if (err.message.includes('UNIQUE')) {
+                            redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                            html_code = 409; // Conflict
+                        }
+                        else if (err.message.includes('FOREIGN KEY')) {
+                            redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                            html_code = 400; // Bad Request
+                        }
+                        break;
+
+                    case 'SQLITE_BUSY':
+                        redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                        html_code = 503; // Service Unavailable
+                        break;
+
+                    case 'SQLITE_READONLY':
+                        redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                        html_code = 403; // Forbidden
+                        break;
+
+                    // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                    default:
+                        redirect_code = '&erreur_raw=' + err;
+                        break;
+                }
+
+                res.status(html_code);
+                console.log(err);
+
+                res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                res.end();
                 return;
             });
         }
@@ -288,7 +598,45 @@ module.exports = (passport) => {
                 res.status(200).send('produit modifié');
                 return;
             }).catch(err => {
-                res.status(500).send('' + err);
+                let method = 'put';
+                let api = 'produit';
+                let html_code = 500;
+                let redirect_code = '';
+
+                switch (err.code) {
+                    case 'SQLITE_CONSTRAINT':
+                        if (err.message.includes('UNIQUE')) {
+                            redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                            html_code = 409; // Conflict
+                        }
+                        else if (err.message.includes('FOREIGN KEY')) {
+                            redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                            html_code = 400; // Bad Request
+                        }
+                        break;
+
+                    case 'SQLITE_BUSY':
+                        redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                        html_code = 503; // Service Unavailable
+                        break;
+
+                    case 'SQLITE_READONLY':
+                        redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                        html_code = 403; // Forbidden
+                        break;
+
+                    // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                    default:
+                        redirect_code = '&erreur_raw=' + err;
+                        break;
+                }
+
+                res.status(html_code);
+                console.log(err);
+
+                res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                res.end();
                 return;
             });
         }
@@ -303,7 +651,45 @@ module.exports = (passport) => {
                     res.status(200).send('produit supprimé');
                     return;
                 }).catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'delete';
+                    let api = 'produit';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -325,7 +711,45 @@ module.exports = (passport) => {
                         return;
                     })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'stock';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -341,7 +765,45 @@ module.exports = (passport) => {
                     return;
                 })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'stock';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -363,7 +825,45 @@ module.exports = (passport) => {
                 res.status(200).send('stock créé');
                 return;
             }).catch(err => {
-                res.status(500).send('' + err);
+                let method = 'post';
+                let api = 'stock';
+                let html_code = 500;
+                let redirect_code = '';
+
+                switch (err.code) {
+                    case 'SQLITE_CONSTRAINT':
+                        if (err.message.includes('UNIQUE')) {
+                            redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                            html_code = 409; // Conflict
+                        }
+                        else if (err.message.includes('FOREIGN KEY')) {
+                            redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                            html_code = 400; // Bad Request
+                        }
+                        break;
+
+                    case 'SQLITE_BUSY':
+                        redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                        html_code = 503; // Service Unavailable
+                        break;
+
+                    case 'SQLITE_READONLY':
+                        redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                        html_code = 403; // Forbidden
+                        break;
+
+                    // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                    default:
+                        redirect_code = '&erreur_raw=' + err;
+                        break;
+                }
+
+                res.status(html_code);
+                console.log(err);
+
+                res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                res.end();
                 return;
             });
         }
@@ -394,7 +894,45 @@ module.exports = (passport) => {
                 res.status(200).send('stock modifié');
                 return;
             }).catch(err => {
-                res.status(500).send('' + err);
+                let method = 'put';
+                let api = 'stock';
+                let html_code = 500;
+                let redirect_code = '';
+
+                switch (err.code) {
+                    case 'SQLITE_CONSTRAINT':
+                        if (err.message.includes('UNIQUE')) {
+                            redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                            html_code = 409; // Conflict
+                        }
+                        else if (err.message.includes('FOREIGN KEY')) {
+                            redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                            html_code = 400; // Bad Request
+                        }
+                        break;
+
+                    case 'SQLITE_BUSY':
+                        redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                        html_code = 503; // Service Unavailable
+                        break;
+
+                    case 'SQLITE_READONLY':
+                        redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                        html_code = 403; // Forbidden
+                        break;
+
+                    // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                    default:
+                        redirect_code = '&erreur_raw=' + err;
+                        break;
+                }
+
+                res.status(html_code);
+                console.log(err);
+
+                res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                res.end();
                 return;
             });
         }
@@ -409,7 +947,45 @@ module.exports = (passport) => {
                     res.status(200).send('stock supprimé');
                     return;
                 }).catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'delete';
+                    let api = 'stock';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -494,7 +1070,45 @@ module.exports = (passport) => {
                         return;
                     })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'produit';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -549,7 +1163,45 @@ module.exports = (passport) => {
                         return;
                     })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'produit';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -625,7 +1277,45 @@ module.exports = (passport) => {
                         return;
                     })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'fournisseur';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }
@@ -681,7 +1371,45 @@ module.exports = (passport) => {
                         return;
                     })
                 .catch(err => {
-                    res.status(500).send('' + err);
+                    let method = 'get';
+                    let api = 'fournisseur';
+                    let html_code = 500;
+                    let redirect_code = '';
+
+                    switch (err.code) {
+                        case 'SQLITE_CONSTRAINT':
+                            if (err.message.includes('UNIQUE')) {
+                                redirect_code = `&sqlite3_code=SQLITE_CONSTRAINT:UNIQUE&message=Le nom du ${api} existe déjà.`;
+                                html_code = 409; // Conflict
+                            }
+                            else if (err.message.includes('FOREIGN KEY')) {
+                                redirect_code = '&sqlite3_code=SQLITE_CONSTRAINT:FOREIGN_KEY&message=Violation de clé étrangère.';
+                                html_code = 400; // Bad Request
+                            }
+                            break;
+
+                        case 'SQLITE_BUSY':
+                            redirect_code = '&sqlite3_code=SQLITE_BUSY&message=La base de données est occupée.';
+                            html_code = 503; // Service Unavailable
+                            break;
+
+                        case 'SQLITE_READONLY':
+                            redirect_code = '&sqlite3_code=SQLITE_READONLY&message=La base de données est en mode lecture seule.';
+                            html_code = 403; // Forbidden
+                            break;
+
+                        // Ajouter d'autres codes d'erreur SQLite pour chaque type de requête
+
+                        default:
+                            redirect_code = '&erreur_raw=' + err;
+                            break;
+                    }
+
+                    res.status(html_code);
+                    console.log(err);
+
+                    res.redirect(`/erreur/api=${api}&method=${method}&html_code=${html_code}${redirect_code}`);
+                    res.end();
                     return;
                 });
         }