# Statische Webseiten erstellen aus MySQL Datenbank



## gulo92 (13. Dezember 2011)

Hallo,

ich steh gerade auf dem Schlauch und frage mich, wie es möglich wäre, automatisch aus neu hinzugefügten Daten in einer mySQL Datenbank, statische HTML Seiten, also mit festen Inhalten zu erstellen. Also ich füge einen neuen Datensatz in meiner MySQL Tabelle hinzu und es wird automatisch eine Datei z.B. .../neuer-datensatz-1.html erstellt, in der alle neuen Daten "für immer" gespeichert sind und nicht jedesmal neu aus der Datenbank geholt werden müssen. Ich weiß, schwer zu beschreiben. Auf jeden Fall suche ich da einen Ansatz oder einen Begriff wonach ich googlen könnte...

Danke euch!


----------



## sheel (13. Dezember 2011)

Hi

Mach einen Cronjob (etwas, was regelmäßig ausgeführt wird, zB. jede Minute),
lies im dazugehörenden PHP-Skript alle neuen Datensätze aus
(erkennbar zB. an der ID, doer Timestamp, oder...je nach DB unterschiedlich)
und erstell mit PHP passende Dateien.


Oder willst du vllt., dass:
Der Benutzer diese HTMl-Dateien aufrufen kann, aber sie in Wirklichkeit doch aus der DB kommen
(und es nur im Browser so ausschaut, als wären es echte Dateien)?
Für sowas: ModRewrite.

Gruß


----------



## Joe (13. Dezember 2011)

> Also ich füge einen neuen Datensatz in meiner MySQL Tabelle hinzu und es wird automatisch eine Datei z.B. .../neuer-datensatz-1.html erstellt, in der alle neuen Daten "für immer" gespeichert sind und nicht jedesmal neu aus der Datenbank geholt werden müssen.



Wieso sollte man .html-Dateien in einer Datenbank speichern anstatt auf dem Server?
Was meint 





> nicht jedesmal neu aus der Datenbank geholt werden


 ?
Datenbanken machen nur Sinn wenn man sie benutzt um die darin gelagerten Daten wieder zu verwenden. Das wäre ja als würdest du dir was auf einen Zettel schreiben damit du es nicht vergisst und legst den Zettel für immer weg.

Ich frag nur mal nach weil so richtig hab ich nicht vertsanden was du vorhast.

Gruss Joe.


----------



## gulo92 (13. Dezember 2011)

Danke erstmal!
Nein ich möchte halt aus Performancegründen und zur Archivierung immer neue HTML Dateien erstellen, sobald ein neuer Datensatz hinzugefügt wird. Kann man das irgendwie so machen, dass man alles in einer Variable speichert, dann mit fopen() eine neue Datei erstellt und die Variable dann in diese Datei schreibt und in nem 777 Ordner speichert. Wie müsste man sowas coden? Hat da jemand nen Script?

Beste Grüße
Paul


----------



## sheel (13. Dezember 2011)

Ob da die Datei messbar schneller ist als die DB...nicht sicher.
Würde mich auch gar nicht wundern, wenn (nicht in jedem Fall,
aber durchschnittlich) die DB schneller ist.

Und jetzt versteh ich das auch so, dass du komplette HTMLs in der DB hast.
Warum? Der Aufbau etc. wird doch immer gleich sein, oder?
Oder falsch verstanden?

Und ein Verzeichnis mit 777-Rechten ist nicht so ideal.
Warum soll jeder alles dürfen?
Wenns ein Webserver ist, muss in den meisten Fällen nur root/Apache(+PHP) dran.

edit: Zur Archvierung kannst du doch auch Backups von der DB machen...


----------



## gulo92 (13. Dezember 2011)

Wie komplette HTMLs in der DB? ja, 777 ist vielleicht zu viel, ich mein nur vom Ansatz her, wie ich es geschrieben habe.


----------



## sheel (13. Dezember 2011)

Kannst du mal ein Beispiel machen,
wie ein DB-Eintrag aussieht, und wie das als HTML-Datei dann sein soll?


----------



## Joe (13. Dezember 2011)

Verwirrend.
Also normal ist ein Server via FTP-Upload zum verwalten und archivieren von HTML Dateien (aller möglichen Dateien). Wenn sich der Code (Datensatz ist was andres) ändert überschreibt man mit seinem FTP-Clienten zumeist die ältern Datein. Zu Sicherheitszwecken macht man sich daher Backups und speichert sie wohl eher lokal auf dem Rechner.

Datenbanken können das sicher auch evtl leisten aber so ist das nicht gedacht. Daher die Frage was das ganze bezweckt? Wie gesagt eine neuere HTML-Datei würde man doch auf dem Server einfach updaten/aktualisieren nach dem man Code hinzufügt.

(Komm mir grad bissel doof vor  ist nur ne ungewöhliche Frage des TE)

MFG Joe


----------



## gulo92 (13. Dezember 2011)

Naja ...: Ein User gibt per Formular 10-15 Werte pro Datensatz ein. Dies wird dann in einer mySQL Tabelle gespeichert. Parallel dazu wäre es notwendig, diese Daten in einer neuen HTML Datei zu schreiben und in einem Ordner zu speichern. Ich weiß schon, dass man das auch einfach per Datenbankabfrage machen könnte. Aber in meinem Fall macht es aus SEO-Sicht so mehr Sinn.


----------



## Joe (13. Dezember 2011)

Und warum fragt die "HTML"-Datei nicht via PHP die DB ab ob sich was geändert hat und schreibt dann die HTML-Ausgabe entsprechend so wie es angezeigt werden soll?


----------



## gulo92 (13. Dezember 2011)

Jaaa ... ich merk schon ... so langsam überzeugt ihr mich ... aber die PHP Datei muss ja auch irgendwie automatisch erstellt werden und nen bestimmten Namen etc. haben.. das kann doch sicher irgendwie automatisieren, oder? Nochmal zur Info: Die neuen Werte die immer wieder hinzukommen überschreiben nie alte Datensätze, sondern sind immer separat zu betrachten. Also quasi wie wenn man hier im Forum ein neues Thema aufmacht, wird ja auch eine neue Datei erstellt, die dann die DB Werte ausliest... wie mache ich das?


----------



## Joe (13. Dezember 2011)

Dann wird diese Datei wohl eine .PHP-Datei werden  Die Ausgabe ist aber dennoch HTML und daher SEO. Deine PHP.Datei (INDEX.php ****) müsste dann in <? php> Code Tags die Datenbank auslesen und deine Datensätze aus der DB anzeigen.
Ich empfehle dir mal ein einfaches Tutorial zu PHP anzuschauen. Und mal nen Hello World zu machen.
Ich hoffe das kommt nicht unhöflich aber ich habe den Eindruck das es etwas an Grundwissen fehlt. Was gennerell nicht schlimm ist sondern nur verwirrend 

MFG Joe


----------



## gulo92 (13. Dezember 2011)

Nein nein, das Grundwissen ist schon da  wie ich die Datenbank auslese und so weiß ich doch. Ich überlege nur, wie ich es umsetze, dass ich Formular-Input-Daten, welche ich verarbeite und in der MySQL Datenbank speicher noch weiter verarbeiten kann. Denn ich möchte folgendes: Ich möchte, dass sobald ein neuer Datensatz (Name: Input_001) in der MySQL Tabelle abgelegt wird. Eine Datei namens input_001.php erstellt und auf dem Server abgelegt wird. 

Das ist doch das gleiche wie hier im Forum. Ich lege ein neues Thema an und schon wird eine neue Datei erstellt welche, wie jetzt unter http://www.tutorials.de/php/383220-statische-webseiten-erstellen-aus-mysql-datenbank.html erreichbar ist. Ich möchte wissen, wie ich das umsetze.


----------



## sheel (13. Dezember 2011)

Da gibts in Wirklichkeit keine Dateien,
die Uri wird nur umgeschrieben.

Dein Link schaut in Wirklichkeit so aus:
http://tutorials.de/forum/showthread.php?t=383220
Die Nummer ist gleich, daran wird das festgemacht.
Alle Threads kommen aus dieser einen PHP-Datei.

Mit _ModRewrite_ kann man die Uri so umändern lassen.


----------



## Joe (13. Dezember 2011)

So ein Forum als komplexes Werk hat ein Grundgerüst. Es wird geprüft ob ein neuer Eintrag hinzugekommen ist und stellt den neuen Inhalt miittels echo dar. Daz wird aber keine neue Datei erstellt sondern nur der Inhalt wird dynamisch angezeigt. Die Datei ändert absolut nix an ihren Code selber -> es wird also keine neue Datei gebraucht oder aktualisiert. NUR die Datenbankeinträge ändern sich.


----------



## Kyôya (13. Dezember 2011)

Hi,

da hat dich dein Auge veräppelt .

Es werden keine neuen HTML-Seiten angelegt. Viel mehr wird die URL vom Web-Server intern umgeschrieben.

Ein Beispiel dazu:
die Seite http://www.example.com/php/seite-1.html kann intern zu http://www.example.com/index.php?category=php&page=1 umgeschrieben werden.
Dieses erfolgt beim Apache HTTP-Server über das Modul mod_rewrite. Ein paar Beispiele dazu findest du unter http://www.modrewrite.de/.

Gruß Kyôya Stefan


----------



## Joe (13. Dezember 2011)

Also Normal wird nun deine Index.php eine Datenbankabfrage machen. Dann eben diese Daten ausgeben. Gibt es keine Daten dann schreibt er nix neues. Falls es neue Daten gibt wird er die neuen Daten genauso anzeigen wie du es programmierst. Meinetwegen Fett unterstrichen und Rot. Ändern tut sich der Code selbst rein garnicht. Lediglich die Ausgabe ändert sich so wwie von dir programmiert.


----------



## gulo92 (14. Dezember 2011)

Okay, muss man das mod_rewrite modul dann auf jeder unterseite machen? nein, oder? Also kann man auch noch normale .html seiten haben?!


----------



## jannicars (14. Dezember 2011)

Das musst du einfach nur in einer .htaccess konfigurieren.

Erst dachte ich am Anfang des Threades, dass du cachen möchtest.


----------



## gulo92 (14. Dezember 2011)

Wie würde das dann theoretisch funktionieren und wann wendet man das an?


----------



## Kyôya (14. Dezember 2011)

Caching ist ein groooooooooooooßes Thema. Das fängt beim Byte-Code-Cache an und geht bis zum Speichern kompletter Seiten. Aber all das passiert für den Anwender unsichtbar im Hintergrund und hat auch nichts mit dem ursprünglichen Thema des Threads zu tun.


----------



## gulo92 (14. Dezember 2011)

Und wie muss ich meine .htaccess datei konfigurieren, dass der mod_rewrite nur bei manchen Seiten bzw. in bestimmtenFällen erfolgt?


----------



## Kyôya (14. Dezember 2011)

Siehe meinen vorherigen Post:



Kyôya hat gesagt.:


> Ein Beispiel dazu:
> die Seite http://www.example.com/php/seite-1.html kann intern zu http://www.example.com/index.php?category=php&page=1 umgeschrieben werden.
> Dieses erfolgt beim Apache HTTP-Server über das Modul mod_rewrite. Ein paar Beispiele dazu findest du unter http://www.modrewrite.de/.


----------



## gulo92 (14. Dezember 2011)

Aber um nochmal auf das ursprüngliche Problem zurückzukehren ... eigentlich wollte ich auf jeder Unterseite eine Facebook-Kommentarbox einbinden. Diese könnte doch dann die jeweiligen Kommentare nicht mehr korrekt denjenigen Seite zuordnen, die der Benutzer zum Zeitpunkt des Kommentars durch mod_rewrite vor sich hatte, oder? Also ich könnte doch nicht die Facebook Kommentarbox die eingeblendet wird auf der Seite index.php abhängig von den get-URL Parametern machen, die ich via mod_rewrite "unsichtbar" mache ... oder?


----------



## sheel (14. Dezember 2011)

Kenn mich mit FB nicht wirklich aus.

Du kannst also quasi beliebig viel verschiedene Kommentarboxen ahben?
Kannst du mir mal zeigen, was du von FB dafür auf deiner Seite einbinden musst?


----------



## gulo92 (14. Dezember 2011)

Also das besteht aus zwei Teilen:

1.
	
	
	



```
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/de_DE/all.js#xfbml=1&appId=210649149005114";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
```

und 2.

```
<div class="fb-comments" data-href="http://example.com" data-num-posts="2" data-width="500"></div>
```

Da man die Domain variabel gestalten kann und dort auch GET-Daten etc. anhängen kann, könnte es vielleicht doch gehen, oder?


----------



## sheel (14. Dezember 2011)

So wie ich das seh, muss data-href eben eindeutig sein.
Und ja, da kannst du je nach aufgerufener Seite
mit PHP etwas anderes reinschreiben/anhängen.


----------



## gulo92 (14. Dezember 2011)

ich kann ja mal kurz erläutern, was ich plane: momentan gebe ich über eine Schleife auf einer Seite ausgabe.php untereinander je 5 Werte von 10 verschiedenen Datensätzen aus. Nun möchte ich bei jedem Datensatz einen Link für "Details" einbinden. Nun dachte ich, dass ich den Link z.B. auf details.php?id=10 verlinke und dann über die ID wiederum die "Detaildaten" aus der MySQL Datenbank lade. Diesen Link würde ich gern via mod_rewrite "verschönern" zu /details.php/datensatz_10.html  ... ich bin gerade absolut planlos wie ich meinen Ansatz gestalten sollte...


----------



## sheel (14. Dezember 2011)

Kannst du die bereits vorhandene Seite mit den Detail-Links einmal zeigen?
Würde die Sache einfacher für uns machen.


----------



## gulo92 (14. Dezember 2011)

nein, dass ist alles nur zusammengeschossen und nicht formatiert und nix ... mir geht es ja nur um den ansatz..


----------



## jannicars (14. Dezember 2011)

Das steht doch schon in dem anderen Thema...


----------



## sheel (14. Dezember 2011)

Ja...Ansatz...was soll ich dazu schreiben 

Wenn du die einzelnen Datensätze ausgibst, kommt erstens Mal ein HTML-Link dazu

```
<a href="detail1234.html">Details</a>
```
Als PHP-echo:

```
echo "<a href=\"detail1234.html\">Details</a>";
```
Und jetzt die id aus der DB statt 1234 da reinhängen

```
echo "<a href=\"detail" . $id . ".html\">Details</a>";
```
Mehr ists in PHP nicht.

Und dann in .htacces-Datei des Verzeichnisses sowas (ungetestet):

```
RewriteEngine on
RewriteRule ^detail{[0-9]*}\.html$ detail.php?id=$1
```

Gruß


----------



## gulo92 (14. Dezember 2011)

danke!
habs grad probiert, funktioniert erstmal nicht ... was bewirkt dieses 0-9? Müsste in der php Datein nicht der Link zu ner *.php gesetzt werden und dann erst in html im Browser geschrieben werden?


----------



## sheel (14. Dezember 2011)

Nein, der Link passt schon auf die HTML.
ModRewrite kann die rausgehenden Linkangaben nicht ändern,
nur die eingehenden Anfragen auf andere Ziele umleiten.

Zum nicht funktioneieren...was passiert denn genau?

Wenn du die Detailseite aufrufst und in den Quelltext vom Browser schaust
(also die HTML-Ausgabe von PHP), wie schaut denn da ein Link aus (und welche ID gehört dazu)?

Hast du Zgriff auf die Apachelogdatei?
Schau nach, wohin umgeleitet wird.


----------

