Scusa ma quel codice è terrificante... rifare la connessione al database per ogni elemento dell'array è come usare una pentola d'acqua per ogni spaghetto da cuocere. Togli dal ciclo tutta la parte relativa alla connessione.

Detto questo, non è semplice capire da dove deriva il tuo problema. Ti vengono segnalati errori? Hai la visualizzazione di tutti i tipi di errore attiva?

Nell'istruzione in cui effettui la connessione usi la variabile "connection" senza $ davanti. E' solo un errore di trascrizione o hai davvero il codice così? (immagino la prima..)

Se il campo 'categoria' è una select a selezione multipla, come è definito sul form html? Deve chiamarsi 'categoria[]', altrimenti php riceverà sempre solo l'ultimo dato selezionato