Premesso che entrare nel tuo (o di chiunque) modo di ragionare non è facile, cmq:

Codice PHP:
...
for(
$i=0$i<count($cart); $i++){
   
$s += $cart[$i]->price $cart[$i]->quantity;
   
$qta $qta $cart[$i]->quantity;
   
$shipping++;

   
// QUA
   
$cart[$i]->gender $_GET['genere'];
   
$cart[$i]->color $_GET['colore'];
... 
Perchè fai questo ? Per ogni oggetto nel carrello vai a sovrascrivere gender e color con quello che hai passato. gender e color dovresti metterle in $item all'inizio del codice.
Inoltre, mi sorge un dubbio sul tuo carrello: come differisci le varianti? se non ho capito male una Maglietta uomo blu ha lo stesso id di una Maglietta uomo rossa. Ma tu quando trovi il prodotto nel carrello ($index != -1) incrementi solo la quantità ($cart[$index]->quantity++;)