Sommairement : ton schéma se tient à deux petits détails près :
- Le numéro de téléphone devrait être dans une table à part, va faire un tour dans le forum FAQ et cherche un mini-tuto sur les jointures, tu vas tout de suite comprendre pourquoi je dis ça;
- ton entité catégorie client me semble erronée. Tu as différentes catégories : OK. Mais autant un client appartient à une et une seule catégorie, autant une catégorie peut comprendre 0 à n clients. CQFD, la cardinalité n'est pas bonne. Dans ton entité categcli, tu as deux colonnes, l'identifiant et le libellé, mais avec le type de relation que je décris, tu vas te retrouver avec une clé étrangère dans ton entité client.
Enfin je dirais quand même une chose : facilite-toi un peu la vie pour travailler : je préconise (ce n,est pas une règle obligatoire) de préfixer systématiquement les noms des propriétés, donc toutes les propriétés de l'entité produit devraient commencer par pro_..., pour client, cli_..., pour commande, cde_... etc... et comme ça, tu peux utiliser le même nom en clé primaire dans une entité et en clé étrangère dans une autre entité. Ça permet entre autres choses les jointures naturelles avec USING au lieu de WHERE... Enfin bon, même si tu n'utilises pas les jointures naturelles, tu vas rapidement réaliser qu'à la lecture, c'est infiniment plus facile à suivre.
On ne matérialise pas les cardinalités en SQL : ça se traduit par la présence ou non de clés étrangères dans telle ou telle table.
Et pour envoyer la commande au serveur, pas dur : ton panier est stocké dans un tableau : tu peux donc facilement construire une requête dynamique avec toutes les informations nécessaires en une seule fois, il suffit d'une boucle foreach() par exemple. Ton client une fois identifié, tu as la clé primaire du client, pour chaque article, tu as son identifiant aussi. Dans ton panier, tu dois avoir la quantité pour chaque article. Partant de là, le début de la requête est pas vraiment compliqué :
-1- Créer une nouvelle commande avec un statut "En attente" par exemple et la date du jour + l'identifiant du client. Là, tu récupère la clé primaire générée (mysql_insert_id de mémoire)
-2- Créer la requête d'insertion des articles pour la commande:
À ce stade, tu vas stocker dans un tableau chaque ligne SQL correspondant à un article, chaque ligne sera :
Où
- xyz est l'identifiant du produit que tu devrais avoir dans ton panier;
- abc est l'identifiant de la commande récupéré lors de la précédente requête;
- 1 est la quantité de l'article que tu dois trouver dans ton panier aussi.
Là dessus, un implode du tableau en mettant une virgule entre chaque élément et tu concatène le résultat au début de la requête commencée juste avant. Et tu exécutes.
Digère tout ça tranquillement, tu vas voir que tout ça n'est que logique et chronologie des évènements.