2017-01-10 4 views
0

Wenn ich meine Spielautomaten laufen, den Jackpot gewinnen, und aktualisieren Sie die Seite oder klicken Sie auf den Button, heißt es:Session - Undefined index

Notice: Undefined index 'gokken'

Aber wenn er wieder aufgefrischt wird, verschwindet der Fehler, bis ich einen neuen Jackpot bekomme.
Warum passiert das?

<?php 
session_start(); 
//session_destroy(); 
class Player 
{ 

    public $name; 
    public $age; 

    function __construct() 
    { 
     $this->name = 'Harm'; 
     $this->age = 18; 
    } 

    public function setName($name) 
    { 
     return $this->name = $name; 
    } 

    public function setAge($age) 
    { 
     return $this->age = $age; 
    } 

    public function getAge($age) 
    { 
     if ($age < 18) 
     { 
      return "U mag niet spelen! <br/>"; 
     } else 
     { 
      return 'Welkom ' . $this->name . ', u bent 18 jaar of ouder! <br/><br/>'; 
     } 
    } 

} 

$player = new Player(); 

echo $player->getAge($player->age); 

class Gokautomaat 
{ 

    public function Automaat() 
    { 
     $r1 = rand(0, 1); 
     $r2 = rand(0, 1); 
     $r3 = rand(0, 1); 
     $inzet = 100; 
     echo $r1 . $r2 . $r3 . '<br/><br/>'; 


     if ($r1 == $r2 && $r3 == $r2) 
     { 
      echo 'U heeft de jackpot gewonnen!!<br><br> + €5000 <br/><br/>'; 
      $_SESSION["gokken"] = $_SESSION["gokken"] + 5000; 
      echo 'Cash: $' . $_SESSION["gokken"]; 
      session_destroy(); 
     } else 
     { 
      //$_SESSION["gokken"] = $_SESSION["gokken"]; 
      echo "U heeft niks gewonnen. <br/><br/> Bedrag - €$inzet" . '<br/><br/>'; 
      $_SESSION["gokken"] = $_SESSION["gokken"] - $inzet; 
      echo 'Cash: €' . $_SESSION["gokken"]; 
     } 
    } 

    public function Gokken() 
    { 
     if ($_GET["play"]) 
     { 
      if (!isset($_SESSION["gokken"])) 
      { 
       $_SESSION["gokken"] = 1000; 
      } 

      echo '<form action=' . $_SERVER['PHP_SELF'] . ' method=get>'; 
      echo '<input type=hidden name=play value=gokken> 
       <input type=submit value="Gok!"></form>'; 
     } else 
      { 
      echo '<form action=' . $_SERVER['PHP_SELF'] . ' method=get>'; 
      echo '<input type=hidden name=play value=gokken> 
       <input type=submit value="Gok!"></form>'; 
      } 

     exit(); 
    } 

} 

$gokautomaat = new Gokautomaat; 

echo $gokautomaat->Automaat(); 
echo $gokautomaat->Gokken(); 
?> 
+0

Sie haben nicht zu nennen session_destroy() aus dem üblichen Code. Bereinigen Sie das $ _SESSION-Array, anstatt die Sitzungsdaten zu zerstören. –

Antwort

0

Es ist, weil wenn Sie es das erste Mal, das $_SESSION["gokken"] starten ist nicht gesetzt. Und wie Sie sehen, gibt es Linien, die die nicht gesetzt Wert zu lesen versuchen:

$_SESSION["gokken"] = $_SESSION["gokken"] + 5000; 

und dieser Wert wird in Gokken() initialisiert, aber das führt nach Automaat():

echo $gokautomaat->Automaat(); 
echo $gokautomaat->Gokken(); 

und seit Dies ist eine Sitzungsvariable, sie bleibt beim nächsten Mal gesetzt. Sie können diese verschiedenen Möglichkeiten lösen. Stellen Sie zum Beispiel sicher, dass die Initialisierung zuerst ausgeführt wird.

Oder Sie können die Hinweise deaktivieren:

error_reporting(E_ALL & ~E_NOTICE); 

Oder Sie Fehler für die spezifischen Linien nur verstecken, mit dem ‚@‘ Operator:

@$_SESSION["gokken"] = $_SESSION["gokken"] + 5000;