Kann man eine HTML Seite steuern?
Hallo ich werde an meiner Schule ein Arduino Workshop machen...
Mein Plan ist das man auf meiner Webseite den Code und Bilder zu dem entprechenen Projekt sind, aber zum schluss soll ein "weiter" Button da sein der erst gedrücht werden kann wenn ein anderes HTML Dokument (also der ADMIN) dies freigibt. Sodas alle gleichschnell sind und keiner einfach vorspringen kann...
Danke und Liebe Grüße
4 Antworten
Ja geht. Allerdings brauchst du dafür einen Server bzw. einen Webspace. Da reicht so ein Gratis-Webspace.
Da es ja intern ist, muss es vermutlich nicht höchsten Ansprüchen genügen. Es soll ja nur zu schnelle Schüler bremsen.
Du bastelst dir ein PHP-Script, womit eine Seite angefordert werden kann.
Angenommen, du bist bei Seite 5:
http://www.blabala.de/index.php?page=5
Dort verlinkst du den Weiter-Button entsprechend auf http://www.blabala.de/index.php?page=6
Jetzt kannst du ein zu-weit-gehen insofern verhindern, indem du dann wieder auf die vorherige Seite zurückleitest.
Als "Datenbank", um zu speichern, wie weit gegangen werden darf, schreibst du die entsprechende Seite einfach als Zahl in eine Datei.
Musst dir noch ein weiteres PHP-Script basteln, womit du diese Zahl ändern kannst, damit du die Seiten jeweils freigeben kannst.
Das geht relativ einfach mit PHP oder Javascript.
Du kannst zB mit PHP in einer Datenbank prüfen, ob ein bestimmter Eintrag auf true ist und nur wenn er true ist zeigst du das neue HTML an, wenn nicht machst du einen Redirekt auf die alte Seite.
Btw mit Javascript kannst du das ganze auch ohne Pagereload machen, du kannst zB das PHP Skript mit einem AJAX Request aufrufen und den Rückgabewert prüfen, nur wenn dieser true ist macht der Button irgendwas, ansonst zeigt er nur eine Fehlermeldung.
Und woher hast du diese Information?
Im Endeffekt kann die Datenbank aber natürlich auch nur eine Datei sein, sqllite machts ja am Ende auch nicht anders, das Programm ist quasi nur ein Wrapper um SQL Befehle auf eine Filewriteoperationen zu mappen.
Auch ein SQL Server benutzt schlussendlich Filewrite-Operationen, für einen einzelnen Wert ist eine Datenbank aber idR nicht der richtige Mechanismus
Kommt drauf an, wenn schon eine da ist, dann würd ich sie durchaus verwenden. Auf gemieteten Webservern ist meist schon eine drauf. Aber ja man kann natürlich auch mit PHP einfach ein Flag in einem File lesen.
Dei einfachste Lösung sieht so aus, dass Du einfach die noch nicht freigegebenen Dateien nicht auf den Server lädst. Erst wenn Du bestimmst, dass man sie lesen können soll, lädst du sie via FTP hoch.
Ein andere Lösung wäre, dass Du den Zugriff auf einzelne Dateien via .htaccess verbietest und nach und nach freigibst. Im Beispiel sind nur die Dateien seite1.html und seite2.html freigegeben, die Datei seite3.html ist noch nicht freigegeben
<Files seite1.html>
Allow from all
</Files>
<Files seite2.html>
Allow from all
</Files>
<Files seite3.html>
Deny from all
</Files>
Durch die genannten Methoden würdest du nicht nur verhindern, dass man mit einem Klick auf den "weiter"-Button zu früh weiterblättern kann; du würdest auch verhindern, dass man die Adresse "seite3.html" in den Browser eintippt.
Alex
Das würde zB mit SignalR gehen, ist aber aufwändig wenn du es nicht kennst
sonst kannst du auch einen kontinuierlichen Check auf eine bestimmte Url machen, ob dort zB eine Seite (Response 200) existiert, wenn das so ist dann wird der Button aktiviert, sonst nicht
Dann lädst du da eine leere Seite hoch sobald alle weiter dürfen
Danke :) Weißt du wie man das nennt... Damit ich Googlen kann?
Ja, genau das macht SignalR, inkl. Fallback auf SSE oder Long Polling, denn Websockets müssen sowohl der Server wie auch der Browser unterstützen
Es ist allerdings etwas „kompliziert“ einzurichten wenn man keine Erfahrung hat, eine einfache while Schleife die kontinuierlich abläuft geht in reinem Javascript ohne weitere Libraries oder Fallunterscheidungen
Nein, kompliziert ist es nicht. Für PHP bspw. reicht es aus, eine Bibliothek wie Ratchet einzubinden. WebSockets werden von allen modernen Browsern unterstützt, die nicht Opera Mini heißen.
Er scheint keine Datenbank zu haben...