Użycie ciasteczek i zmiennych sesyjnych - problem z odświeżaniem

0

Witam mam problem, otóż mam do wykonania stronę która:
Wykorzystując mechanizm "sesji" stwórz prostą stronę, na której użytkownik:
podaje swoją nazwę (od tej chwili nazwa powinna się wyświetlać na stronie po każdym przeładowaniu strony)
w każdym kolejnym kroku wyświetlana jest suma i średnia podanych liczb, a użytkownik może albo podać kolejną liczbę, albo zakończyć sesję (na kolejnym ekranie wyświetlone zostanie podsumowanie zawierające: ostateczną średnią, sumę i listę podanych liczb, a sesja zakończona).
Dla uproszczenia można założyć, że maksymalnie będzie można podać 20 liczb. "

Szkielet kodu i pomysł mam ale natknąłem się na kilka problemów z którymi nie mogę sobie poradzić. Gdy wpisuję swoją nazwę i odświeżam stronę, zmienna sesyjna działa i wypisuje moją nazwę, ale w momencie w którym wpisuję liczbę do tablicy srednia moja nazwa zostaje usunięta (zmienna sesyjna traci przypisaną wartość), nie wiem jak temu zaradzić, próbowałem użyć do tego ciasteczek ale wynik był taki sam.
Drugim problemem jest zapisywanie liczb do tablicy srednia. W momencie jak zapiszę jedną wartość do tablicy wyświetla się ona normalnie, ale jak wpiszę drugą wartość to ta pierwsza zostaje nadpisana. Próbowałem zrobić array() z tablicy zmiennych sesyjnych ale wtedy przy wypisywaniu wypisuje się tylko pierwszy znak (tu potrzebowałbym tablicy intów). Pomyślałem, żeby użyć ciasteczek w których cyfry te byłyby zapisywane a skrypt php po prostu by je sczytywał i wypisywał średnią, sumę i listę, ale nie mam pojęcia jak mogę to zaimplementować. Wszelkie sugestie, strony na których mógłbym się czegoś więcej dowiedzieć mile widziane.

<!DOCTYPE  html>
<?php
session_start();
$nazwa;
$srednia = array();
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
<html lang="pl">
	<head>
			 <link rel="stylesheet" type="text/css" href="srednia.css">
			<meta charset="utf-8" />
			<title> Strona internetowa</title>
			<meta name = "description" content = "Pierwsza strona internetowa, cwiczenie 2.2" />
			<meta http-equiv = "X-UA-Compatible" content="IE=edge" />
			<meta name="keywords" content="HTML,CSS,CWICZENIA" />
			<meta http-equiv="expires" content="0">
			<meta http-equiv="cache-control" content="no-store, no-cache, must-revalidate">
			<meta http-equiv="cache-control" content="post-check=0, pre-check=0">
			<link rel="icon" href="favicon.jpg" sizes="16x16" type="image/png">
			<meta http-equiv="pragma" content="no-cache">
	</head>
<body>
<br/><br/>




<form action="srednia.php" method="get">
  <label for="name">Podaj swoją nazwę</label><br>
  <input type="text" id="name" name="name"><br>
  <input type="submit" value="Potwierdź">
</form> 
<br/>

<?php            
// $cookie_name = "ciasteczko";
// @$cookie_value = $_GET["name"];
// setcookie($cookie_name,$cookie_value, time() + (86400 * 30), "/"); 
// echo $_COOKIE['ciasteczko'];

$_SESSION['Nazwa'] = $_GET["name"];
if(isset($_SESSION['Nazwa']))
{
   echo "Witaj ".$_SESSION['Nazwa'];
}
?>



<br/><br/>

<form action="srednia.php" method="get">
  <label for="num">Podaj cyfrę</label><br>
  <input type="text" id="num" name="num"><br>
  <input type="submit" value="Potwierdź">
</form> 

<?php 

@$_SESSION['Srednia'] = $_GET["num"];
@$srednia[] += $_SESSION['Srednia'];
echo $srednia[0];
//echo $_SESSION['Srednia'];



?>


<br>
<form>
  <label for="endsess">Zakończ aktualną sesję</label><br>
  <input type="submit" value="Zakończ" name='endsess'>
</form> 




<?php


//echo $_SESSION['Nazwa']


?>
<br/>
</body>

screenshot-20200329161328.png
screenshot-20200329161400.png

1

Popatrz na tablicę $_GET, jaką wartość zawiera przy zapisywaniu nazwy, gdy wysyłasz liczbę. Wtedy wszystko stanie się jasne.

0
serek napisał(a):

Popatrz na tablicę $_GET, jaką wartość zawiera przy zapisywaniu nazwy, gdy wysyłasz liczbę. Wtedy wszystko stanie się jasne.

Wydaje mi się, że w momencie wysłania liczby to tablica $_GET["name"] przestaje istnieć, tzn index przestaje być zdefiniowany (NULL?). Z tego też wynika ten błąd
Notice: Undefined index: name in C:\xampp\htdocs\php\srednia.php on line 40
Tylko nie rozumiem dlaczego jest w ten sposób, jeśli się mylę to proszę mnie poprawić, może czegoś nie zauważam. Nie wiem dlaczego inna zmienna sesyjna zostaje zresetowana po wysłaniu informacji z innego submita. Próbowałem je numerować i nazywać ale to nic nie dało.

1

No, dobrze myślisz.

Nie ma znaczenia z jakiego submita wysyłasz. W zmiennej $_GET nie ma danych o nazwie, więc zmienna do której tego GETa przypisujesz przyjmuje pustą wartość, co powoduje nadpisanie sesji. Musisz użyć isset() by sprawdzać, czy dana wartość w sesji istnieje.

0
serek napisał(a):

No, dobrze myślisz.

Nie ma znaczenia z jakiego submita wysyłasz. W zmiennej $_GET nie ma danych o nazwie, więc zmienna do której tego GETa przypisujesz przyjmuje pustą wartość, co powoduje nadpisanie sesji. Musisz użyć isset() by sprawdzać, czy dana wartość w sesji istnieje.

Dziękuję bardzo za pomoc, teraz już wszystko działa! :) Zostało mi tylko wymyślenie jak zapisać tablicę w ciasteczkach/sesji i jak wyciągnąć z niej średnią, sumę i całą tablicę. Jeszcze raz bardzo dziękuję!

1 użytkowników online, w tym zalogowanych: 0, gości: 1