'error', 'message' => 'Méthode HTTP non autorisée. Utilisez POST.' ], 405 ); } /* * ========================================================= * LECTURE DU JSON * ========================================================= */ $contenu = file_get_contents('php://input'); if ($contenu === false || trim($contenu) === '') { reponseJson( [ 'status' => 'error', 'message' => 'Aucune donnée reçue.' ], 400 ); } $data = json_decode( $contenu, true ); /* * Vérification JSON */ if ( !is_array($data) || json_last_error() !== JSON_ERROR_NONE ) { reponseJson( [ 'status' => 'error', 'message' => 'Les données JSON sont invalides.' ], 400 ); } /* * ========================================================= * RECUPERATION DES CHAMPS * ========================================================= */ $indice = isset($data['indice']) ? trim((string) $data['indice']) : ''; $nom = isset($data['nom']) ? trim((string) $data['nom']) : ''; $isin = isset($data['isin']) ? strtoupper(trim((string) $data['isin'])) : ''; $symbole = isset($data['symbole']) ? strtoupper(trim((string) $data['symbole'])) : ''; $actif = isset($data['actif']) ? (int) $data['actif'] : 1; $afficher = isset($data['afficher']) ? (int) $data['afficher'] : 1; /* * ========================================================= * VALIDATION * ========================================================= */ if ($indice === '') { reponseJson( [ 'status' => 'error', 'message' => 'Le champ indice est obligatoire.' ], 400 ); } if ($nom === '') { reponseJson( [ 'status' => 'error', 'message' => 'Le champ nom est obligatoire.' ], 400 ); } if ($isin === '') { reponseJson( [ 'status' => 'error', 'message' => 'Le champ ISIN est obligatoire.' ], 400 ); } if ($symbole === '') { reponseJson( [ 'status' => 'error', 'message' => 'Le champ symbole est obligatoire.' ], 400 ); } /* * ========================================================= * VALIDATION ISIN * ========================================================= * * Un ISIN comporte normalement 12 caractères. * * ========================================================= */ if (strlen($isin) !== 12) { reponseJson( [ 'status' => 'error', 'message' => 'Le code ISIN doit comporter exactement 12 caractères.' ], 400 ); } /* * Vérification du format général : * * 2 lettres pays * 9 caractères * 1 chiffre de contrôle */ if ( !preg_match( '/^[A-Z]{2}[A-Z0-9]{9}[0-9]$/', $isin ) ) { reponseJson( [ 'status' => 'error', 'message' => 'Le format du code ISIN est invalide.' ], 400 ); } /* * ========================================================= * NORMALISATION DES BOOLÉENS * ========================================================= */ $actif = $actif === 1 ? 1 : 0; $afficher = $afficher === 1 ? 1 : 0; /* * ========================================================= * INSERTION MYSQL * ========================================================= */ try { $sql = " INSERT INTO indice ( indice, nom, isin, symbole, actif, afficher ) VALUES ( :indice, :nom, :isin, :symbole, :actif, :afficher ) "; $stmt = $pdo->prepare($sql); $stmt->execute( [ ':indice' => $indice, ':nom' => $nom, ':isin' => $isin, ':symbole' => $symbole, ':actif' => $actif, ':afficher' => $afficher ] ); /* * ID créé */ $id = (int) $pdo->lastInsertId(); /* * ===================================================== * RELIRE L'ENREGISTREMENT CREE * ===================================================== */ $sqlLecture = " SELECT id, indice, nom, isin, symbole, actif, afficher, updated_at, created_at FROM indice WHERE id = :id LIMIT 1 "; $stmtLecture = $pdo->prepare( $sqlLecture ); $stmtLecture->execute( [ ':id' => $id ] ); $enregistrement = $stmtLecture->fetch(); /* * ===================================================== * REPONSE * ===================================================== */ reponseJson( [ 'status' => 'success', 'message' => 'Enregistrement créé avec succès.', 'id' => $id, 'data' => $enregistrement ], 201 ); } catch (PDOException $e) { /* * ===================================================== * GESTION ERREUR MYSQL * ===================================================== */ error_log( 'api_create_table_indice.php : ' . $e->getMessage() ); /* * Détection d'une contrainte UNIQUE */ if ((int) $e->errorInfo[1] === 1062) { reponseJson( [ 'status' => 'error', 'message' => 'Cet enregistrement existe déjà.' ], 409 ); } reponseJson( [ 'status' => 'error', 'message' => 'Erreur lors de la création de l\'enregistrement.' ], 500 ); }