Skip to content

Reload einer PHP Seite verhindern

PHP
  • Ihr kennt vielleicht das Problem, ihr habt Euer erstes kleines Projekt geschrieben. Ihr speichert was usw.

    Auf einmal fällt Euch auf, ihr könnt die Seite reloaden und der Eintrag in der DB wird nochmal geschrieben. Ähnliches könnte passieren, wenn man die Seite von extern aufruft, jemand hat sich den Link gespeichert usw. Nicht schön....

    Beispiel

    Seite 1 test.php

    <?php
    session_start();
    
    $_SESSION['reload'] = time();
    echo $_SESSION['reload'];
    ?>
    
    
    <form id="absenden" method="post" action="test2.php">
    <input type="submit" class="btn btn-success btn-lg" value="Absenden">
    <input type="hidden" name="foo" value= "<?php echo $_SESSION['reload'] ?>" />
    </form>
    

    Was machen wir hier? Wir eröffnen eine Session

    session_start();
    

    Darin erzeugen wir eine Session Variable und geben diese zu Kontrollzwecken aus.

    $_SESSION['reload'] = time();
    echo $_SESSION['reload'];
    

    Die Variable $_SESSION['reload'] wird mit der aktuelle Zeit time() gefüllt. Danach zu Testzwecken ausgegeben.
    Danach erzeugen wir mit HTML einen Absenden Button.

    Wenn wir nun diese Seite aufrufen, wird die Session-Variable mit der aktuellen Zeit gefüllt. Es ist eigentlich egal, was da drin steht, es könnte auch irgendeine Zufallszahl sein. Wenn wir nun auf den Absenden Button klicken, gelangen wir zur 2. Seite.

    Seite 2 test2.php

    <?php
    session_start();
        
    if(!isset($_SESSION['reload'])) {
      die('Bitte nicht direkt aufrufen!');
         }
    $reload = htmlspecialchars($_SESSION['reload']);
     
    echo $reload;
    unset($_SESSION['reload']);
    ?>
    

    Wir eröffnen wieder eine Session, damit können wir nun auf die Session Variable zugreifen.

    Mit

     if(!isset($_SESSION['reload'])) {
      die('Bitte nicht direkt aufrufen!');
         }
    

    überprüfen wir jetzt, ob die Variable bei Aufruf der Seite gefüllt ist. Das geschieht mit dem Befehl isset Wenn sie gefüllt ist, wird nach den {} Klammern weiter gemacht. Ist sie nicht gefüllt, wird der Text

    Bitte nicht direkt aufrufen!
    

    ausgegeben. Diese beiden Befehle dienen nur der Kontrolle!

    $reload = htmlspecialchars($_SESSION['reload']);
    echo $reload;
    

    Jetzt das Wichtigste. Mit

     unset($_SESSION['reload']);
    

    wird die Session Variable, direkt nach der Überprüfung gelöscht. Wenn wir nun die Seite reloaden (F5) oder ähnliches, ist die Variable leer und wir bekommen keinen Zugang auf die Funktionen der Seite!

    Fertig! ☺

  • PHP - ChatGPT

    PHP
    1
    0 Stimmen
    1 Beiträge
    63 Aufrufe
    Niemand hat geantwortet
  • PHP Webseite lokal einhängen mit sshfs

    PHP
    1
    0 Stimmen
    1 Beiträge
    39 Aufrufe
    Niemand hat geantwortet
  • PHP Installation

    Angeheftet PHP
    3
    0 Stimmen
    3 Beiträge
    517 Aufrufe
    FrankMF

    Falls jemand auch die Warnung in Joomla! bezüglich der php Version 7.4 loswerden möchte, installiert kein php8.1. Damit habe ich eine dicke Fehlermeldung. Es müssen wohl sämtliche Erweiterungen und Templates 8.1 unterstützen, was wohl derzeit noch nicht der Fall ist. Nehmt 8.0, das läuft bei mir aktuell.

    apt install php8.0-common php8.0-mysql php8.0-opcache php8.0-readline php8.0-xml php8.0-xsl php8.0-zip apt install php8.0-cli php8.0-curl php8.0-gd php8.0-intl php8.0-mbstring php8.0-redis apt install php8.0-bcmath php8.0-gmp php8.0-imagick apt install php8.0-fpm
  • PHP Data Objects

    Linux
    4
    0 Stimmen
    4 Beiträge
    271 Aufrufe
    FrankMF
    Datensatz löschen

    Voraussetzung ist, das man die ID des zu löschenden Eintrages kennt.

    $statement = $pdo->prepare("DELETE FROM feinstaub WHERE id = ?"); $statement->execute(array($id)); if ($statement->execute()) { echo "Der DB-Eintrag wurde erfolgreich gelöscht!"; } else { echo "Bitte den Administrator informieren!"; }
  • Yubikey als 2FA

    PHP
    3
    0 Stimmen
    3 Beiträge
    256 Aufrufe
    FrankMF

    Die ersten 12 Stellen eines Yubikeys sind immer gleich. Diese 12 Stellen speichern wir in einer Datenbank.

    $otp = substr ($otpKey, 0, 12);

    In der Datenbank speichern.

    //SQL $statement = $pdo->prepare("UPDATE users SET otpKey = :otpKey_neu WHERE id = :id"); $statement->execute(array('otpKey_neu' => $otp, 'id' => $userid)); //Überwachung auf Erfolg if ($statement->execute()) { // DB Eintrag erfolgreich geschrieben echo "YubiKey Passwort erfolgreich gespeichert!"; } else { echo "Datenbank Fehler! Bitte informieren Sie den Administrator."; }

    Ich hoffe, es hilft dem ein oder anderen sich mit diesem Thema etwas zu beschäftigen.

  • Eingabefeld aktivieren

    PHP
    1
    0 Stimmen
    1 Beiträge
    189 Aufrufe
    Niemand hat geantwortet
  • Wichtige Info

    Angeheftet PHP
    1
    0 Stimmen
    1 Beiträge
    195 Aufrufe
    Niemand hat geantwortet
  • PHPMailer

    Verschoben PHP
    1
    0 Stimmen
    1 Beiträge
    412 Aufrufe
    Niemand hat geantwortet