Datenbank lesen und schreiben und dann URL ausführen geschlossen 

  • Ersteller Ersteller yannikst
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
Y

yannikst

Hallo Leute!

Ich möchte auf meine Website ein kleines Spiel integrieren. Nix dolles, ist auch nicht Thema, doch dazu brauche ich eine kleine "Funktionalität" und ich kenne mich mit PHP nicht so gut aus:

Also, hier der Vorgang:

1. Die PHP-Datei wird aufgerufen
2. Aus der MaySQL-Datenbank wird nun ein Wert gelesen (z.B. eine Zahl)
3. Jetzt wird diese Zahl überprüft (z.B. was gerechnet)
4. Je nach Ergebnis (If-Abfrage ist kein Problem!) soll nun die entsprechende Website aufgerufen werden

- Beispiel: Wenn ZAHL = 1, dann öffne www.seite.de/seite1.html BZW: wenn ZAHL = 2, dann öffne www.seite.de/seite2.html

5. VOR dem Seiten-Aufruf soll die ZAHL dann um 1 erhöht werden und wieder in die DB geschrieben werden!

Kurz: Wir mache ich das LESEN aus der DB, das SCHREIBEN in die DB und den URL-Aufruf?

Ich würde mich sehr über Hilfe freuen - vielen Dank im Voraus!!
 
Zuletzt bearbeitet:
Hallo yannikst,

für dein Vorhaben brauchst du die mySQL-Funktionen von PHP. Sie sind im PHP-Manual aufgeführt.

Zunächst musst du eine Verbindung zum SQL-Server aufbauen
PHP:
$db = mysql_connect([string $Server [, string $Benutzername [, string $Benutzerkennwort]]]);

Auf dem Server wird die Datenbank ausgewählt:
PHP:
mysql_select_db (string $database_name, $db);

Jetzt soll die Zahl (oder was auch immer) aus der Datenbank ausgelesen werden
Dazu wird eine Anfrage gestellt.
PHP:
$query = 'SELECT column_name FROM tbl_name';
Und ausgeführt:
PHP:
$result = mysql_query($query, $db);
$dataset = mysql_fetch_object($result);

$filename = 'seite' . $dataset->column_name . '.html';

mysql_free_result($result);
mysql_close($db);

Das funktioniert so ähnlich auch mit dem Speichern in der Datenbank. Die Anfrage sieht jedoch anders aus, etwa so: 'UPDATE tbl_name SET column_name = new_value'

Selbstverständlich kann das alles auch schief laufen oder keine Ergebnisse zurückliefern. Entsprechende Anweisungen müssen noch eingebaut werden. Im PHP-Manual finden sich aber auch gute Beispiele.

Falls du Wert auf Objektorientierung legen solltest, kannst du mal einen Blick in die mysqli-Funktionen von PHP werfen.

Viel Erfolg

underattack
 
Zuletzt bearbeitet von einem Moderator:
Ok, danke, das werde ich mal testen! Ich hoffe ich bekomme das hin! :(

Aber noch etwas: Wie rufe ich jetzt eine Website auf??
 
Hallo,

ich hoffe, du hast es einigermaßen gut hinbekommen :)

Der Aufruf der Seite erfolgt mit
PHP:
include($filename);
Wenn die Dateien in einem anderen Verzeichnis liegen, musst du das eventuell noch voranstellen.
PHP:
include('../directory/subdirectory/' . $filename);

Include() bewirkt, dass die HTML-Seite so an den Browser gesendet wird, als wäre sie direkt aufgerufen worden. Das PHP-Skript übernimmt ja nur die Logik, die entscheidet, welche Seite aufgerufen werden soll.

Weiterhin viel Erfolg

underattack
 
Zuletzt bearbeitet von einem Moderator:
Hm... also so weit so gut. Aber ich musste deine Zeilen oben etwas umschreiben und korrigieren, damit sie funktionierten.

Den Aufruf der Websites ging viel einfacher:

header("Location:http://www.seite.de/unterseite.php");

Das funktioniert eigentlich prima...
 
Hi yannikst,

header() funktioniert selbstverständlich auch. Es gibt aber Unterschiede zwischen den Methoden.

Der Browser fordert die PHP-Datei an. Mit header() wird ein HTTP-Statuscode an den Browser zurückgesendet. Im Falle von Location ist das die 302 REDIRECT. Der Browser fordert daraufhin die vom Server mitgeteilte unterseite.php an. Header darf daher auch nur dann im PHP-Skript stehen, wenn noch nichts an den Browser ausgeliefert wurde. Denn sobald das geschieht, wird ein Frame mit Statuscode 200 OK gesendet.

Include() funktioniert serverseitig und bindet die gewünschte Seite ein. Das heißt, der Browser fordert die PHP-Datei an und bekommt automatisch die unterseite.php ausgeliefert, die per include() eingefügt wurde. Include() kann auch stehen, wenn das PHP-Skript schon vorher Ausgaben erzeugt hat.

Das dürfte wohl nur technisch relevant sein und sich in der Praxis kaum niederschlagen, da die Verzögerungszeiten sich im kaum wahrnehmbaren Bereich befinden. Dennoch ist die include()-Funktion in meinen Augen die elegantere Lösung in deinem Problem -- und schwieriger als header() dürfte include() eigentlich auch nicht zu verstehen oder zu implementieren sein...

Viele Grüße

underattack
 
Hm, jetzt bin ich leicht verwirrt. Was bedeutet das jetzt genau? Wann funktioniert header nicht? Nicht, dass es da plötzlich Probleme gibt!?
 
Hm, jetzt bin ich leicht verwirrt. Was bedeutet das jetzt genau? Wann funktioniert header nicht? Nicht, dass es da plötzlich Probleme gibt!?
header funktioniert nicht mehr, wenn du vorher was an den client gesendet hast, sprich, du darfst vor header nichts ausgeben (zb mit echo)
 
Ah, ok, das betrifft aber wirklich nur Ausgaben usw... Würde header dann NIE funktionieren oder nur nicht zuverlässig?

Falls nämlich nie, dann haben Tests gezeigt, dass es funktioniert und es scheint dem Ganzen nichts im Wege zu stehen! :)

Ich habe eben vor "header" nur den Verbindungsaufbau zur DB und deren Abfragen sowie einige Zuweisungen, IF-Abfragen und Vergleiche!

Dann müsste es ja gehen, oder?
 
yannikst schrieb:
Ah, ok, das betrifft aber wirklich nur Ausgaben usw... Würde header dann NIE funktionieren oder nur nicht zuverlässig?

Falls nämlich nie, dann haben Tests gezeigt, dass es funktioniert und es scheint dem Ganzen nichts im Wege zu stehen! :)
komisches testergebnis. dürfte eigentlich nie gehen.
normalerweise kann man header nur benutzen, wenn noch keiner gesendet wurde.
dazu mal ein auszug aus'm manual:
Hinweis: Die HTTP-Status-Headerzeile wird immer die erste zum Client gesendete sein, egal ob der aktuelle header()-Aufruf der erste ist oder nicht. Der Status kann mittels header() jederzeit mit einer neuen Statuszeile überschrieben werden, sofern die HTTP-Header noch nicht gesendet wurden.
andern falls gibt es so ein fehler:
Code:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\index.php:2) in C:\xampp\htdocs\index.php on line 3
ob ein header gesendet wurde, kannst du damit prüfen:
PHP:
if (headers_sent()) ...

das heißt du kannst machen was du lustig bist vor dem header befehl, solange du nichts an den client via http schickst.
dazu die passenden links:
http://de.php.net/manual/de/function.header.php
http://de.php.net/manual/de/function.headers-list.php
http://de.php.net/manual/de/function.headers-sent.php
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich include verwende, reicht dann folgende Zeile aus??:

PHP:
include "seite1.php"

Und wird diese Seite "seite1.php" dann komplett so ausgeführt als würde sie normal aufgerufen? Funktioniert "include" IMMER? Denn ich MUSS vorher noch Prüfungen machen und Anweisungen etc...

Außerdem: Was ist, wenn die "seite1.php" NICHT im selben Verzeichnis liegt? Dann scheint es nämlich nicht zu funktionieren. Was tue ich dann?

Danke..
 
also ersmal vorweg:
immer geht nie etwas

Und wird diese Seite "seite1.php" dann komplett so ausgeführt als würde sie normal aufgerufen? Funktioniert "include" IMMER? Denn ich MUSS vorher noch Prüfungen machen und Anweisungen etc...

Außerdem: Was ist, wenn die "seite1.php" NICHT im selben Verzeichnis liegt? Dann scheint es nämlich nicht zu funktionieren. Was tue ich dann?
prügungen und anweisungen kannst du ja gerne machen ist gar kein problem
wenn sie nicht im selben verzeichnis liegt bekommst du ein problem, da der php code zwar funktioniert(bei mir wars so), aber die absoluten pfade nicht mehr, da nun von einem anderem verzeichnis gesucht wird. du kannst mal ein URL-include dann ausprobieren. also so was wie
PHP:
include ('http://freesoft-board.to/index.php');
wenn das nicht funktioniert, dann hast du echt ein problem^^
denn jetzt kannst du dich mal mit proxy-programmierung auseinander setzten, so dass du alle absoluten pfade umschreiben kannst/musst, dann funktionierts auch^^

warum benutzt du nicht einfach header?
das ist einfacher und unkomplizierter.

@underattack
ich würd von dir gern mal wissen, warum include "eleganter" ist
 
Wieso soll ich denn jetzt doch header nutzen??? Fakt ist, dass es nicht mehr funktionierte, als ich vor dem Aufruf IF-Abfragen und Vergleiche bzw. Zuprdnungen hatte - da hatte ich mich weiteroben vertan. Als es funktionierte, waren diese Sachen noch nicht drin...

Also was ist jetzt an "include" falsch bzw. auszusetzen? Wann und warum funktioniert denn das nicht?

Ich dachte das geht nur wenn ich nichts davor mache!?! Und was soll dein Google-Fake-Link? Wenn das deine Art von hilfe ist - Fragende zu beleidigen - dann bitte...

Ich will dir mal was sagen: Man kann so gut wie alles googeln, nur eine Frage der Zeit. Aber nicht jeder hat diese und weiß, wonach genau er suchen soll.

Wenn man alles googeln soll und muss, dann ist dieses Forum (wie auch alle anderen dieser Art) vollkommen nutzlos!

Aber es ist mal wieder wie so oft in letzter Zeit hier: Hier wird lieber beleidigt, statt zu helfen... Ist es Post-Hascherei für die Warez-Sektions? Ist es einfach Boshaftigkeit? Ich weiß es nicht, aber das ist einfach lächerlich, sorry...

Wenn jeder alles wüsste, wo wären wir dann? Aber ist gut, ich werde sicher auch woanders Rat finden...
 
Zuletzt bearbeitet:
kannst mir ja gerne mal per pn schreiben, was du an der letzten post denn so aus zu setzten hattest^^
Wieso soll ich denn jetzt doch header nutzen???
wer sagt denn so was? dir werden hier nur lösungsansätze gegeben, welchen du nimmst, ist dein sache

Also was ist jetzt an "include" falsch bzw. auszusetzen? Wann und warum funktioniert denn das nicht?
steht in meiner letzten post: absolute pfade werden übernommen

speicher doch einfach alles was du ausgeben möchtest als variable und gib das am ende aus, dann hast du auch kein problem mit header()
oder du machst (fällt mir grad ein) eine html meta umleitung
 
Zuletzt bearbeitet von einem Moderator:
Wie ich deutlich beschrieben hatte, geht es doch darum, dass dann eine entsprechende URL aufgerufen werden muss, die eben nicht immer die selbe ist!

Und mit einer HTML META Weiterleitung geht das ja wohl nicht, oder doch? Wie geht die denn in php und dann noch wahlweise abhängig von einem Wert?
 
na wenn header und include nicht functioniert, dann musst du wohl anderwaltig nach umleitungen suchen

Sag mal, liest du meine Beiträge wirklich durch?? Sorry, aber langsam fühle ich mich von dir auf den Arm genommen!

Ich habe nie geschrieben, dass die beiden Funktionen generell nicht funktionieren. Es geht mir nur darum endlich mal gesagt zu bekommen, welche nun die bessere ist, weil sich heir alle widersprechen!

Du schreibst ich soll "include" nutzen. Später schreibst du wieder, dass es nicht das Richtige ist und kommst mir dann mit einem HTML-Refresh, also langsam...
 
Hallo,

hier geht es ja drunter und drüber! Ich wollte mit meinem letzten Post keine so große Verwirrung auslösen. Leider hatte ich letzte Woche ziemlich viel zu tun und daher keine Zeit, vorbeizuschauen, zumal ich eigentlich dachte, das Thema wäre geklärt:
yannikst schrieb:
Das funktioniert eigentlich prima...

Mein Post sollte lediglich die technischen Unterschiede der Funktionen header() und include() aufzeigen.

Womit wir wieder beim Thema wären:
corema schrieb:
ich würd von dir gern mal wissen, warum include "eleganter" ist
Gerne beantworte ich diese Frage. Auch das ist rein technischer Natur. include() arbeitet rein serverseitig und liefert gleich die vom Autor gewünschte Seite aus, während header() den Browser auffordert, diese Seite selbst anzufordern. include() hat zudem den Vorteil, dass man die Seiten an beliebigen Stellen einbinden kann, also auch, wenn vorher bereits Ausgaben wie zum Beispiel mit echo() erfolgt sind.
An sich spricht aber in vielen Fällen nichts gegen die Verwendung von header(). Es ist nur meine Meinung, dass das "eleganter" ist.
In diesem Falle würde ich auch ohne zu überlegen include() verwenden.
Wenn ich hingegen feste Umleitungen einrichten wollte, wie zum Beispiel "301 Moved Permanently". Da wird dem Browser mitgeteilt, dass die Seite ab sofort immer unter einer anderen Adresse erreichbar ist. Unter Umständen kann er dann das angeklickte Bookmark anpassen.
header('Location:[...]') sendet ein "302 Found", das dem Browser mitteilt, dass die Seite momentan unter einer anderen URI zu erreichen ist.

yannikst schrieb:
Wieso soll ich denn jetzt doch header nutzen??? Fakt ist, dass es nicht mehr funktionierte, als ich vor dem Aufruf IF-Abfragen und Vergleiche bzw. Zuprdnungen hatte - da hatte ich mich weiteroben vertan. Als es funktionierte, waren diese Sachen noch nicht drin...

Poste doch mal deinen Code, dann können wir genauer auf eventuelle Fehler eingehen und sie zusammen mit dir korrigieren :)
Es wäre auch interessant, zu wissen, nach welchen Kriterien die Seite ausgewählt wird, die angezeigt werden soll.
includes auf Dateien in anderen Verzeichnissen funktionieren übrigens auch wunderbar mit relativen Pfadangaben.
PHP:
include('./unterverzeichnis/zieldatei.html');

Ich hoffe auch sehr, dass wir dann nicht weiter in dieser doch recht angespannten Atmosphäre miteinander kommunizieren müssen ;)

Viele Grüße

underattack
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten