kostenloser Webspace werbefrei: lima-city


SESSION Variable spinnt

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mehralsnurradio

    Kostenloser Webspace von mehralsnurradio

    mehralsnurradio hat kostenlosen Webspace.

    Hallo, ich habe einen Code, ein PHP Quizspiel. Nun gibt es eine Seite, wo man raufkommt wenn man fertig ist aber der Gegner noch nicht. Alles schön und gut, diese Seite aktualisiert sich sekündlich (um zu prüfen ob der Gegner fertig ist). Das funktioniert auch alles, war bisher das Problem dass ein Spieler einfach das Spiel verlassen konnte, und dann hörte der Gegner schloss der Gegner halt irgendwann auch das Spiel weil er keine Zeit oder Lust mehr hatte zu warten. Darum habe ich eine Automatik programmiert, die nach 13 Sekunden das Spiel automatisch beendet:
    Hier der Anfang
    <?php
      $id = $_GET["id"];
      $servername = "xxx";
      $username = "xxx";
      $password = "xxx";
      $dbname = "xxx";
      $base = new mysqli($servername, $username, $password, $dbname);
      $querya = "SELECT * FROM challenge WHERE name1='" . $_COOKIE['1logname'] . "' AND id='" . $_GET['id'] . "'";
       if ($result = $base->query($querya)) {while ($row = $result->fetch_assoc()) {$p1 = $row["p1"];$p2 = $row["p2"];if($row["Status"] == "set"){echo "<script>window.location = 'not.php?id=" . $id . "';</script>";}}}
      $queryb = "SELECT * FROM challenge WHERE name2='" . $_COOKIE['1logname'] . "' AND id='" . $_GET['id'] . "'";
       if ($result = $base->query($queryb)) {while ($row = $result->fetch_assoc()) {$p2 = $row["p1"];$p1 = $row["p2"];if($row["Status"] == "set"){echo "<script>window.location = 'not.php?id=" . $id . "';</script>";}}}
      $sql1 = "UPDATE challenge SET Status='" . $_COOKIE['1logname'] . "-maked' WHERE Status='joined' AND id='" . $_GET['id'] . "'";
      $sql2 = "UPDATE challenge SET Status='set' WHERE Status='" . $_GET['other'] . "-maked' AND id='" . $_GET['id'] . "'";
       if ($base->query($sql1) === TRUE) {}
       if ($base->query($sql2) === TRUE) {}

    Hier die Automatik und das Ende:
    session_start();
      if($_SESSION["gegner"] == $p2){
       $_SESSION["secs"] = $_SESSION["secs"] - 1;
       if($_SESSION["secs"] == "0"){
        $sqlsql = "UPDATE challenge SET Status='set' WHERE id='" . $_GET['id'] . "'";
        if ($base->query($sqlsql) === TRUE) {
         $ergo = "yes";
        }
       }
      }
      else{
       $_SESSION["secs"] = 13;
      }
      $_SESSION["gegner"] = $p2;
      ?>
    <meta http-equiv="refresh" content="1">
    <meta name="viewport" content="width=device-width">
    <body style="background-color: lightblue;">
     <h1>F E R T I G !</h1>
     <b>Warte, bis der andere fertig ist oder das Spiel verlässt!</b><br>
     <p>Deine errungenen Punkte: <b><?php echo $p1;?></b></p>
     <p>Aktuelle Gegner-Punkte: <b><?php echo $p2;?></b></p>
     <hr>
    <?php    echo "<p style='color:red;'>Kicktimer fuer den Gegner: noch " . $_SESSION['secs'] . " Sekunden.</p>"; 
             if($ergo == "yes"){
             echo "<script>window.location = 'not.php?id=" . $id . "';</script>";
             }
    ?>
    </body>

    Das Problem ist nur, dass Session "gegner" nicht gleich "p2" ist, obwohl sich bei meinem Test die "p2" (Punktzahl des Gegners) nicht veränderte und ja am Ende des letzten PHP Scripts vor dem ersten HTML Code immer gleichgesetzt wird.
    Daurch funktioniert das Script nicht.
    Vielen Dank und wenn ihr weitere Fehler (nicht Anmerkungen!) habt bitte auch bescheid sagen,
    HundretSix Apps

    Beitrag zuletzt geändert: 6.5.2019 18:53:11 von mehralsnurradio
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. horstexplorer

    horstexplorer hat kostenlosen Webspace.

    Okay also in kurz:
    <?php
    session_start();
    if($_SESSION["gegner"] == $p2){
    	$_SESSION["secs"] = $_SESSION["secs"] - 1;
    	if($_SESSION["secs"] == "0"){
    		$sqlsql = "UPDATE challenge SET Status='set' WHERE id='" . $_GET['id'] . "'";
    		if ($base->query($sqlsql) === TRUE) {
    			$ergo = "yes";
    		}
    	}
    }else{
    	$_SESSION["secs"] = 13;
    }
    $_SESSION["gegner"] = $p2;
    ?>


    $p2 bzw session_gegner wird vor der abfrage bereits gesetzt (evtl gehört da ein isset() noch rein) ? Alle anderen Session Variablen funktionieren? Session_start() gibt true zurück?
    Ab und an scheinen Sessions auf Lima nicht ganz zu funktionieren, eventuell ist das auch hier der Fall, kannst das ja mit 2 Seiten und ner Sessionvariable einfach überprüfen.

    Wenn ich mich recht erinnere musste session_start() ähnlich wie header() vor irgendeiner Ausgabe aufgerufen werden. Sollte das der Fall sein, kannst dir da mit JS sicherlich etwas hin schummeln.
    https://stackoverflow.com/questions/37219716/php-session-start-after-outputting-html

    weitere Fehler

    Deine MySQL abfragen sollten nicht einfach so zusammen gesetzt werden wenn Nutzer irgendwelche Daten übermitteln können welche dort eingesetzt werden. Auch nicht 'nur zum testen'. Da lässt sich ganz einfach deine Datenbank komplett auslesen, verändern und löschen. Nutze an den Stellen PreparedStatements damit nicht nachher die Augen groß sind. https://www.w3schools.com/php/php_mysql_prepared_statements.asp
    Das ganze ist einfacher einzubauen als es sich anhört.

    Und wo wir gerade von Datenbanken reden, solltest du dein Passwort für deinen Lima-Account, deine Emails und deine Website Logins endlich mal ändern. Die Passwörter und Adressen hast alle mit deinem DB Passwort rausgeblasen wo sie unverschlüsselt gespeichert waren/sind (D########6)

    Beitrag zuletzt geändert: 7.5.2019 1:00:51 von horstexplorer
  4. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!