[SUCHE] SW um Inhalte einer Datenbank(?) in HTML-Datei zu exportieren

  • #1
P

Perle

Bekanntes Mitglied
Themenersteller
Dabei seit
12.01.2002
Beiträge
208
Reaktionspunkte
0
Hallo!

Weiss leider nicht so recht wie ich die Frage stellen soll, da ich mich mit Datenbanken oder ähnlichem noch nie befasst habe :-[

Habe ca. 300 Datensätze (bis jetzt noch auf Papier) die ich einzeln aus einer Datenbank(??) in eine Tabelle einer HTML-Datei-Vorlage exportieren möchte.

Hat das wer verstanden? ::)

Damit meine ich jetzt nicht das z.B. aus eine Excel-Datei mit 300 Zeilen eine einzige HTML-Seite gestrickt wird, sondern das jeder einzelne Datensatz in eine HTML-Datei exportiert wird, wobei die HTML-Datei ne fertige (aber änderbare) Vorlage mit Platzhaltern ist.

Hab sowas beim Programm Geocache-Scanner gesehen. Hier mal ein kleiner Ausschnitt aus der HTML-Vorlage vom Geocache-Scanner, dann ist vielleicht klarer was ich meine:

Code:
<p><b><!-- #LATLON# --></b> - <!-- #LOCATION# --> - Hidden: <!-- #DATEHIDDEN# --> - Use Waypoint: <b><!-- #WAYPOINTNAME# --></b><BR>
Difficulty: <!-- #DIFFICULTY# -->   Terrain: <!-- #TERRAIN# --> - Cachesize: <!-- #CACHESIZE# --></p>

<p><!-- #SHORTDESCRIPTION# --></p>

<img src=<!-- #CACHEMAPFILENAME# --> border=0 vspace=5 hspace=5>
<p><small>Beschreibung erstellt am: <!-- #CREATIONDATE# --> / Originalseite geladen am: <!-- #ORIGCREATIONDATE# --></small></p>
<p><!-- Langbeschreibung Start -->
<!-- #LONGDESCRIPTION# -->
<!-- Langbeschreibung Ende --></p>

Was für SW brauche ich um das zu realisieren?

Gruß,
Perle


[blue]Verschoben aus Software Empfehlungen & Gesuche[/blue]
 
  • #2
Theoretisch mit PHP/MySQL machbar, hier passiert ja nix anderes als die Werte aus der DB in die HTML-Templates zu schreiben.

Soll das Dynamisch (zur Laufzeit) geschehen, oder willst du die HTML-Dateien einmal erstellen und fertig ???
 
  • #3
Conny schrieb:
Theoretisch mit PHP/MySQL machbar, hier passiert ja nix anderes als die Werte aus der DB in die HTML-Templates zu schreiben.

Soll das Dynamisch (zur Laufzeit) geschehen, oder willst du die HTML-Dateien einmal erstellen und fertig ???

Einmal, bzw. des öfteren neu erstellen und fertig! Also nicht im laufenden Betrieb oder so....
 
  • #4
Anyway, bau dir ne lokale Testumgebung PHP/MySQL,
Script zusammenschustern und fertig (Das war die Kurzform ;D).

Also,

Testumgebung einrichten:
http://www.wintotal.de/Artikel/lokaletestumgebung/lokaletestumgebung.php
oder
Webentwicklung FAQ =>http://www.wintotal-forum.de/index.php/topic,58065.0.html

Ich gehe jetzt mal davon aus, dass es 1 Vorlage (Template) geben soll, und dieses immer andere Daten bekommt.
Das Design bleibt davon unberührt. RICHTIG ???

Jetzt brauchst du noch ein PHP-Script das folgendes kann:
- Daten aus der DB holen
- Template öffnen und die Platzhalter mit den Daten der DB füllen
- Template als Datei xyz.html wegschreiben
- Nächster Datensatz, gleiches Spiel
- usw.

Eigentlich ganz einfach ;) Oder ;D

gruss conny
 
  • #5
Yep, das siehst Du RICHTIG :)

Is ganz schön viel Text auf die Nacht, daher werd ich mir die Seite zur Testumgebung morgen in Ruhe reinziehn.

Dann muss ich jetzt nur noch eben mal PHP lernen - gibts da n gutes Buch zu? Sowas wie PHP in 21 Tagen oder besser in 21 Stunden 8)

Also danke schonmal - ich meld mich wieder wenn ich die Links durchgearbeitet habe...

Gute N8
 
  • #6
Noch ne Kleinigkeit vor dem Schlafengehn....

Falls jemand meint das günstig realisieren zu können, würd ich da auch mit mir Reden lassen :D
 
  • #7
Warum wurde das Thema jetzt nach Webentwicklung verschoben??

Das sollte eigentlich auf meinem PC laufen, nur die Augabe soll als HTML Datei erfolgen weils besser zu formatieren ist - könnte aber auch in eine Textdatei geschrieben werden....ausser dem HTML-Template hat das doch nix mit dem Web zu tun. Oder liege ich jetzt völlig daneben?

Gruß,
Perle
 
  • #8
HTML = Web = Forum Webentwicklung ;)

Kannste mir mal ein paar Bsp. Datensätze sowie ein HTML-Template schicken, mal sehn was sich da machen lässt ;)

BTW:
Wenn die Daten in einer *.csv Datei vorliegen würden, könnte man sich den Umweg über die Datenbank sparen ;)
 
  • #9
Aber gerne ;)

In welcher Form sollen die Platzhalter sein?
So OK?
<!-- #Platzhalter# -->
Oder anders?

Ich schicke es dann [email protected].
 
  • #10
Perle schrieb:
Aber gerne ;)

In welcher Form sollen die Platzhalter sein?
So OK?
<!-- #Platzhalter# -->
Oder anders?

Ich schicke es dann [email protected].

Am einfachsten währe, wenn es in dieser Form ist:
Code:
<var>Platzhaltername</var>

Für diese Form hab ich nämlich schon ne Funktion auf Halde liegen ;) :D
Ist aber Theoretisch auch egal, das währe schnell geändert.

gruss conny
 
  • #11
Kein Problem, ich muss es ja eh neu schreiben :)

Bin eben mal kurz weg.....
 
  • #12
Sodele, Mail ist unterwegs....

Hab 9 Datensätze in Excel eingegeben und es dann als csv abgespeichert.
So würde das ganze recht gut funktionieren und wäre für meine Zwecke völlig ausreichend.

Als var(iablen?) hab ich die Spaltenüberschriften von Excel übernommen.

Hoffe das passt alles so wie ich es jetzt zusammengebastelt habe.
Bei den Bildern und dem Seitentitel bin ich mir aber nicht sicher ob das so geht.

Als Dateiname wäre var Name gut :)

Schonmal ein fettes Dankeschön für deine Bemühungen.

Gruß,
Perle
 
  • #13
Jup, ich schau mir's an wenn ich zurück bin, hab jetzt erstmal einen äußerst wichtigen Auftrag zu erledigen ;)

gruss conny
 
  • #14
OK,

hier mal das Script.
(es wird noch ne Template-Klasse benötigt, aber die währe für das Forum zu groß ;D)

Code:
<?php
$csv_datei 	= Testdaten.csv;		// *.csv Datei
$trenn		= ;;					// Trennzeichen in der *.csv
$html_tpl	= TestTemplate.html;	// HTML-Template
$dateiname 	= ds_;				// Name der neuen Datei (ohne .html)
$dir 		= html_new;			// Zielverzeichnis

#--------------------------------------
# Ab hier nix mehr nix ändern
#--------------------------------------
$i = 0;
$arr_var 	= array();
$arr_data 	= array();

require_once(tpl.class.php);
$_TPL =& new phpEngine;

$fh = fopen ($csv_datei,r);

while(($data = fgetcsv ($fh, 1000, ;)) !== FALSE ) { 
	if($i == 0) {
        // Hier werden die Variablennamen vergeben (1. Zeile in der *.csv)
		$arr_var = $data;
	}
	else {
        // Hier werden den Variablen die Werte zugewiesen
		for($x = 0; $x < count($data); $x++) {
			$_TPL->assign($arr_var[$x], $data[$x]);
		}
		$out = $_TPL->output($html_tpl, false);
		if($fh2 = fopen($dir./.$dateiname.$i..html, w)) {
			fwrite($fh2, $out);
			fclose($fh2);
		}	
	}
	++$i;
}
fclose ($fh);

echo DONE;
?>

Nun brauchst du eigentlich nur noch PHP auf deiner Kiste.
Auf den Webserver wollen wir mal (vorerst) verzichten.

Dazu einfach die neueste PHP-Version Downloaden:
http://de3.php.net/downloads.php

Hier die Version => PHP 5.0.4 zip package

Dieses entpackst du nach z.B. c:\PHP5


Wie PHP Konfiguriert wird, steht hier (!! Pfade anpassen !!):
http://www.wintotal.de/Artikel/lokaletestumgebung/lokaletestumgebung.php

Installation PHP => Kapitel 5

Anschließend muss noch ein Pfad zum PHP-Verzeichnis in den Umgebungsvariablen gesetzt werden.

Umgebungsvariablen => Kapitel 7
(Das Bsp. ist zwar für Apache, aber bei PHP ist's das gleiche !!Pfad anpassen!!)

Anschließend kannst du eine DOS-Box öffnen und php -version eingeben.
Zeigt er dir die PHP-Version an, stimmt der Pfad ;)

Das Script kannst du jetzt ganz einfach mit
Code:
php pfad_zum_script/test.php
in einer DOS-Box aufrufen.

DONE ;)

gruss conny

PS:
Warum hab ich nicht VAR->Name als Dateiname genommen ???
Ganz einfach, wenn du mal einen Namen mit Umlauten, Leerzeichen, Sonderzeichen o.ä. hast, siehts dunkel aus im Staate Florida ;) ;)
 
  • #15
Wow, danke, dachte das dauert etwas länger :)

Ich glaub PHP in 21 Tagen hätte mir nicht gereicht....

Werd mich morgen mal dahinter klemmen und schaun das ich das hin kriege.

Beste Grüße und Gute N8
 
  • #16
Genial!  :D :D :D

Danke für deinen Einsatz, hast mir wirklich sehr geholfen!

Hab mir gleich die ganze Testumgebung eingerichtet und alles läuft perfekt :)

Finde dass das ganze Paket auch recht universell einsetzbar ist, zumindest fallen mir unzählige verwendungsmöglichkeiten ein.....

Könnte man das auch so umbauen, das alles in eine Datei geschrieben wird?

Hat es evtl. etwas mit folgender Zeile zu tun?
Code:
if($fh2 = fopen($dir./.$dateiname.$i..html, w)) {

Gruß,
Perle
 
  • #17
Wenn's denn sein soll ;D ;D

Code:
<?php
$csv_datei 	= Testdaten.csv; // *.csv Datei
$trenn		= ;; // Trennzeichen in der *.csv
$d_name 	= datensaetze; // Name der neuen Datei (ohne .html)
$siteName	= Datensätze; // Seiten Titel
$dir 		= html_new; // Zielverzeichnis
$max_ds		= 0; // Max. Datensätze in einer Datei ( 0 = Alle )

#--------------------------------------
# Ab hier nix mehr nix ändern
#--------------------------------------

require_once(tpl.class.php);
// Instanz der Template-Klasse erzeugen
$_TPL =& new phpEngine;

function printData($start,$max_ds,$arr) {
	// Globale Variablen übernehmen
	global $d_name, $siteName, $dir, $_TPL;
	// Festlegen wieviele Datensätze gelesen werden
	$end = ($max_ds == 0) ? count($arr) : ($start + $max_ds);
	// HTML-String mit MAX Datensätzen erzeugen 
	for($i = $start; $i < $end; $i++) {
		if($i >= count($arr)) break;
		$data = $arr[$i];
		foreach($data as $key => $value) {
			$_TPL->assign($key, $value);
		}
		$out_c .= $_TPL->output(content.html, false);
	}
	// Seitenname und HTML-String der Datensätze an VAR übergeben
	$_TPL->assign(SiteName, $siteName .($start+1). - $i);
	$_TPL->assign(Content, $out_c);
	$out = $_TPL->output(body.html, false);
	// Dateiname mit Nummer des Startdatensatzes und End-Datensatzes erzeugen
	$dateiname = $d_name._.($start+1).-$i.html;
	// Schreiben der Daten in die Datei
	if($fh2 = fopen($dir./.$dateiname, w)) {
		fwrite($fh2, $out);
		fclose($fh2);
	}	
	// Rekursiver Aufruf der Funktion
	if(count($arr) > $i) {
		printData($end,$max_ds,$arr);
	}
}
// Hilfsvariablen
$i = 0;
$arr_var 	= array();
$arr_data 	= array();
// Handle auf *.csv erzeugen
$fh = fopen ($csv_datei,r);
// Daten in ein Array einlesen
while(($data = fgetcsv ($fh, 1000, ;)) !== FALSE ) { 
	if($i == 0) {
		$arr_var = $data;
	}
	else {
		for($x = 0; $x < count($data); $x++) {
			$arr_data[$arr_var[$x]] = $data[$x];
		}
		$arr[] = $arr_data;
	}
	++$i;
}
fclose ($fh);

// Funktion zum schreiben der Daten aufrufen
printData(0,$max_ds,$arr);

echo DONE;
?>

Hier kannst du unter $max_ds festlegen wieviele Datensätze in eine Datei geschrieben werden sollen. ( 0 = alle )

Is doch einfach ;) Oder ???


gruss conny

PS:
Wenn die *.csv gewaltig groß sein sollte, könnte es u.U. Probleme mit der Laufzeit des Scripts geben, in diesem Fall könntest du die Laufzeit des Scripts erhöhen.
Dazu fügst du als erste Zeile folgendes ein.
Code:
<?php
// Laufzeit des Scripts verlängern (Standard = 30)
ini_set(max_execution_time, wert_in_sekunden);

$csv_datei = ........
.....
.....
?>
 
  • #18
Danke! :)

Die Pfade habe ich alle angepasst aber es will einfach nicht laufen. :-[

Für was sind denn die Dateien content.html und body.html zuständig?
Sollte ich die vorher anlegen?

Gruß,
Perle
 
  • #19
Ähm, du solltest mal in deinem Mail-Postfach nachschauen, da ist das komplett renovierte Projekt drinn ;)

content.html => Template für 1 Datensatz
body.html => HTML-Gerüst, hier werden die Datensätze reingeschrieben


gruss conny
 
  • #20
Oops 8) 8) 8)

Hatte extra nochmal vorher abgerufen, aber das liegt an meinem Router.
Ab 25°C Aussentemperatur macht der neuerdings schlapp - da muss man ihm ein Gelpack aus der Gefriertruhe auflegen und es geht ihm wieder besser..... :D
 
Thema:

[SUCHE] SW um Inhalte einer Datenbank(?) in HTML-Datei zu exportieren

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.838
Beiträge
707.961
Mitglieder
51.491
Neuestes Mitglied
haraldmuc
Oben