PDA

View Full Version : [PHP] Problema salvare in sessione contenuto array


andrea46r
20-11-2020, 21:38
Buona sera, premetto che sono alle prime armi e potrebbe anche essere uno "stupido" errore ma non riesco a venirne a capo. Questo è il codice che ho scritto fino ad ora:

-- file ricercacalorie.php --


<?php include 'rdatabase.php' ?>
<?php session_start(); ?>

<?php
.........
..........

if(isset($_POST['cerca'])){

// echo "tutto ok!";

// }else{

// echo "qualcosa non va!";
// }

$calorieMin = $_POST['calorie_min'];
$calorieMax = $_POST['calorie_max'];


$calorieMin = mysqli_real_escape_string($connessione , $calorieMin);
$calorieMax = mysqli_real_escape_string($connessione , $calorieMax);


$query = "SELECT * FROM ricetta WHERE calorie BETWEEN $calorieMin AND $calorieMax";

$result = mysqli_query($connessione , $query);
$array_titolo = array();
$array_calorie = array();
if($result)
{
if(mysqli_num_rows($result)>0){
echo "<table class='table table-stripped table-hover table-condensed table-bordered'>
<tr>
<th>Numero</th>
<th>Titolo</th>
<th>Tempo di cottura</th>
<th>Preparazione</th>
<th>Numero Proz.</th>
<th>Tipologia</th>
<th>Difficoltà</th>
<th>Ingredienti</th>
<th>Calorie</th>
</tr>
";
while($row = mysqli_fetch_assoc($result)){
echo "<tr>";
echo "<td>" . $row["id_ricetta"] . "</td>";
echo "<td>" . $row["titolo"] . "</td>";
echo "<td>" . $row["tempo_cottura"] . "</td>";
echo "<td>" . $row["modalita_prep"] . "</td>";
echo "<td>" . $row["n_porzioni"] . "</td>";
echo "<td>" . $row["tipologia"] . "</td>";
echo "<td>" . $row["difficolta"] . "</td>";
echo "<td>" . $row["ingredienti"] . "</td>";
echo "<td>" . $row["calorie"] . "</td>";
echo "</tr>";
$ricettaTitolo = $row['titolo'];
array_push($array_titolo,$ricettaTitolo);
$_SESSION['array_titoli'] = $array_titolo;
$ricettaCalorie = $row['calorie'];
array_push($array_calorie,$ricettaCalorie);
$_SESSION['array_calorie'] = $array_calorie;
}
echo "</table>";
}
}else{
//echo '<script type="text/javascript"> alert("Invio ricetta fallito!") </script>'; //NON FUNGE
//header('Location: rarea_autore.php');
echo "La ricerca non ha avuto successo";
}

print_r($_SESSION['array_titoli']);
echo "<br><br>";
print_r($_SESSION['array_calorie']);

//$_SESSION['array_titoli'] = $array_titolo;
//$_SESSION['array_calorie'] = $array_calorie;

/*echo "<br><br>Ti interessa qualche ricetta?<br>";
$temp = count($array_titolo);*/
}
?>
.......
.......



-- file home.php --

.....
.....

<?php
$prova1=array();
$prova2=array();
$prova1 = array_push($prova1, $_SESSION['array_titoli']);
$prova2 = array_push($prova2, $_SESSION['array_calorie']);
echo "<br>";
print_r($prova1);
echo "<br>";
print_r($prova2);
?>

.....
.....

(il secondo pezzo di codice l'ho scritto ora velocemente e sono fuso non so se sia paragonabile ad una "bestemmia" o meno :muro:

vorrei riuscire a salvare in SESSIONE sia $array_titolo che $array_calorie solo che se stampo direttamente così il contenuto funziona. Se invece torno alla home e faccio una seconda ricerca nel momento del secondo salvataggio mi sovrascrive il contenuto dei 2 array invece che aggiungere. Mi sapreste aiutare?
Grazie

zabnicola
21-11-2020, 20:35
[#1 soluzione]

array_push($array_titolo, $_SESSION['array_titoli'] );
array_push($array_titolo,$ricettaTitolo);
$_SESSION['array_titoli']=$array_titolo;

Il codice è corretto a mio avviso. Soltanto che le volte successive alla prima session_start andrebbe copiato il contenuto di $_SESSION, aggiunto cio che si voleva e quindi ricopiato nella $_SESSION per averli tutti nella successiva apertura della pagina nella stessa sessione.
Fammi sapere se è errato.

antonio338
22-11-2020, 21:34
Premetto che sono arrugginito in php, ma tenterò lo stesso di aiutarti.
Il problema del tuo codice risiede qui
$array_titolo = array();
$array_calorie = array();
dove sostanzialmente ogni volta crei un array nuovo e lo sovrascrivi in $_SESSION['il_tuo_array'], piuttosto che aggiungere valori a quello esistente.

Io avrei affrontato il problema cosi:
1) controllo se $_SESSION['nome_array'] esiste, con qualcosa del genere:
if (!isset($_SESSION['nome_array'])
{
$_SESSION['nome_array'] = [];
}
Se non esiste, creo il mio array.
2) una volta instanziato l'array aggiungo i miei dati

array_push($_SESSION['nome_array'], $dati_da_aggiungere);
o in alternativa $_SESSION['nome_array'][] = $dati_da_aggiungere