chiave numerica nell'array $_SESSION

ciao,

<?php
$numItem  = count($cartContent);
    $subTotal = 0;
       for ($i = 0; $i < $numItem; $i++) {
          extract($cartContent[$i]);
            $subTotal += $pd_price * $ct_qty;
?>
        <tr>
            <td><?php echo "$ct_qty x $pd_name"; ?></td>
            <td><?php echo $lang_name; ?></td>
            <td style="text-align:right"><?php echo displayAmount($pd_price); ?></td>
            <td style="text-align:right"><?php echo displayAmount($ct_qty * $pd_price); ?></td>
        </tr>
        <?php


$_SESSION[$i]['quantita'] = $ct_qty;
$_SESSION[$i]['nome_pd'] = $pd_name;
$_SESSION[$i]['lingua_pd'] = $lang_name;
$_SESSION[$i]['prezzo_unitario'] = displayAmount($pd_price);
$_SESSION[$i]['lordo'] = displayAmount($ct_qty * $pd_price);

}

$i = 0;
foreach($_SESSION[$i] as  $value) {
   echo $value."<br />";
  $i++;
}
?>

mettiamo caso che nel carrello ho inserito 3 prodotti, quindi l'array $_SESSION[$i] contiene 3 elementi.

perchè il foreach me ne stampa solo uno?

inviato 9 anni fa
iTek
iTek
1
modificato 9 anni fa
Gianni Tomasicchio
X 0 X
/* foreach example 4: multi-dimensional arrays */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach ($a as $v1) {
   foreach ($v1 as $v2) {
       echo "$v2\n";
   }
}

Manuale php

risposto 9 anni fa
LonelyWolf
X 0 X

si il manuale lo guardo sempre, però non sempre capisco se ho a che fare con un array multidimensionale... :D

non sono riuscito a risolvere per bene il problema, nel senso che mi stampa i risultati che voglio, però all'inizio ho una serie di

Warning: Invalid argument supplied for foreach()

nella riga

foreach($v as $value2 => $v1) {

perchè?

risposto 9 anni fa
iTek
iTek
1
X 0 X

$_SESSION[$i]['lordo']

2 indici ($i e 'lordo') = 2 dimensioni = multidimensione :D

risposto 9 anni fa
LonelyWolf
X 0 X

azz che pirla!

mi sono dimenticato nel post precedente di postare il codice.

ah, ok  adesso ho capito perchè si chiama multidimensionale... O0

come dicevo, ho fatto così:

<?php
$a = $_SESSION;
foreach($a as  $value => $v) {
   foreach($v as $value2 => $v2) {
    echo $v2;

}
}
?>

mi stampa i valori, ma prima mi restituisce una serie di warning che ho descritto sopra....

risposto 9 anni fa
iTek
iTek
1
X 0 X

ma il session_start() non l'hai messo?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ciao Gianni!

si ovvio!  il session_start c'è.

risposto 9 anni fa
iTek
iTek
1
X 0 X

E sei sicuro che in sessione ci sia qualcosa?

prima del foreach prova a mettere print_r($_SESSION); così visualizzi subito il contenuto della sessione.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

si gianni, già fatto e controllato.

le sessioni ci sono e funzionano tutte.

cmq adesso per prova, ho inserito 2 prodotti nel carrello e con print_r($_SESSION) mi da questo:

Array
(
    [subtotale] => 75.00 
    [spese] => 5.00 
    [totale] => 80.00 
    [lingua] => it
    [p] => 42
    [a] => 0
    [id_pag] => 2
    [0] => Array
        (
            [quantita] => 1
            [nome_pd] => prova multilingua
            [lingua_pd] => Multilingua
            [prezzo_unitario] => 43.00 
            [lordo] => 43.00 
        )

    [1] => Array
        (
            [quantita] => 1
            [nome_pd] => prova multilingua
            [lingua_pd] => Multilingua
            [prezzo_unitario] => 32.00 
            [lordo] => 32.00 
        )

)

forse perchè ho altre sessioni attive?

risposto 9 anni fa
iTek
iTek
1
X 0 X

non capisco...

perchè mi esce quell'errore?

tutto quello che voglio è stamparmi il contenuto di array[0] e [1]

 >:(

risposto 9 anni fa
iTek
iTek
1
X 0 X

Prova questo:

$a =  $_SESSION[0];

foreach ($a as $v1) {
   foreach ($v1 as $v2) {
       echo "$v2\n";
   }
}

Poi se funziona (anche io non sono pratico con questa struttura) non ti resta altro da fare che il ciclo sulla session[];

Cmq suppongo che l'errore ti esca perchè in sessione hai sia array a multidimensione che singoli valori.

risposto 9 anni fa
LonelyWolf
X 0 X

macchè, avevo già provato così e non stampa proprio nulla.....

almeno prima avevo i dati oltre ai warning...

ma perchè la vita è così duraa??  :crazy:

risposto 9 anni fa
iTek
iTek
1
X 0 X

Sai una cosa? Siccome mi incuriosiva ho fatto una prova, una pagina creava la sessione e ci buttava i dati, poi con un link passavo alla seconda pagina che doveva farmeli vedere.

Ebbene, finché i dati in sessione erano tipo:

$_SESSION[0]["a"]

$_SESSION[0]["b"]

$_SESSION[0]["c"]

(quindi in sostanza come i tuoi) l'array della sessione non veniva passato, nemmeno print_r($_SESSION[0]) (anche senza indice) veniva stampato, risultava vuoto.

Invece togliendo l'indice[0]:

$_SESSION["a"]

$_SESSION["b"]

$_SESSION["c"]

Tutto va correttamente, è molto strano.

risposto 9 anni fa
LonelyWolf
X 0 X

dalle info che sono riuscito a trovare in rete, forse dipende dal fatto che

$_SESSION ha per i suoi indici, le stesse limitazioni dei nomi delle variabili

quindi niente indici numerici per $_SESSION....

ma quindi dalle tue prove come dovrei maneggiare sto benedetto array?

risposto 9 anni fa
iTek
iTek
1
modificato 9 anni fa
X 0 X

Di getto: serializzalo e usa un indice non numerico, tipo a1 dove a lo lasci costante e 1 lo puoi rendere variabile in un ciclo.

risposto 9 anni fa
LonelyWolf
X 0 X

Dal manuale di PHP:

http://it.php.net/manual/en/ref.session.php

The keys in the $_SESSION associative array are subject to the same limitations as regular variable names in PHP, i.e. they cannot start with a number and must start with a letter or underscore. For more details see the section on variables in this manual.

 :bye:

P.S.: ho modificato il titolo della discussione per renderlo più adatto al reale problema riscontrato.

risposto 9 anni fa
Gianni Tomasicchio
modificato 9 anni fa
X 0 X

avrei risolto così:

<?php
 foreach($_SESSION as  $key =>$value ){
      if (is_array($value)) {
        foreach($value as $key2 =>$value2)
           echo $value2;
  }
}
?>

adesso estraggo tutto il contenuto dell'array di seguito.

ma se volessi estrarre dall'array solo un dato invece?

risposto 9 anni fa
iTek
iTek
1
X 0 X

echo $_SESSION['chiave1']['chiave2'];

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

scusate, ma ancora non è chiaro come funzionano gli array mutidimensionali.

<?php
 foreach($_SESSION as  $key =>$value ){
      if (is_array($value)) {
        foreach($value as $key2 =>$value2)
?>

in questo modo estraggo tutto il contenuto dell'array $_SESSION e fin qua tutto bene.

Però in questo modo estraggo tutto il contenuto di seguito.

ma se io volessi estrarre un dato alla volta ( tipo un ciclo while) e visualizzarli in questo modo:

prodotto: $value2['nome_pd']

quantità: $value2['quantita']

etc

lo so che è sbagliato quel metodo, solo per far capire.

non ho proprio capito come si fa...

 :(

risposto 9 anni fa
iTek
iTek
1
X 0 X

Allora blur, il discorso penso sia semplice, tu hai due indici e due cicli per fare tutto in automatico, per accedere al secondo indice in manuale elimina il secondo ciclo, una cosa tipo:

<?php
 foreach($_SESSION as  $key =>$value ){
      if (is_array($value)) {
        echo "Prodotto: ".$value[['nome_pd'];
        echo "Quantita: ".$value[['quantita'];
?>

Edit:

Scusa, iTek

Ri-edit:

Ogni dimensione ha un indice, i bidimensionali e tridimensionali sono concepibili in modo astratto anche mentalmente, ma immaginarsi un array a quattro dimensioni....

risposto 9 anni fa
LonelyWolf
modificato 9 anni fa
X 0 X

LonelyWolf,

che tu ci creda o no, avevo già provato a fare in quel modo e non funzionava.

ho capito che con le sessioni non si scherza, perchè mi rimangono attive anche dopo altre modifiche.

la cosa migliore è sempre chiudere il browser e riaprirlo, così sono sicuro che si sono resettate.... >:(

adesso funziona...mi riservo di fare tutte le prove possibili...

intanto grazie mille!!

sei veramente molto gentile! O0

 :bye:

Ps: azz..mi hai scoperto...adesso mi vengono le crisi di identità... :-*

risposto 9 anni fa
iTek
iTek
1
X 0 X
Ps: azz..mi hai scoperto...adesso mi vengono le crisi di identità... :-*

Beh io ho iniziato la e ogni tanto ci bazzico ancora, poi ho visto il post identico!

Cmq io cerco di usare sempre lo stesso nick.

E per le sessioni è meglio sempre usare destroy quando non c'è + nulla che serve o unset se bisogna "sopprimere" solo alcuni valori.

risposto 9 anni fa
LonelyWolf
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda