Felix Riesterer: Innerhalb von php-while-schleife datensatz mit javascritp

Beitrag lesen

Lieber Simon P.,

wir bleiben bei der Grundsatzfrage: "Welche Inhalte sollen auf welcher Seite angezeigt werden?"

Die zwei möglichen Antwort-Szenarien beschränken sich auf:

1.) auf dieser einen Seite (und noch auf dieser einen anderen) (und noch...)
2.) auf allen Seiten

Im Fall von 2. ist klar, dass Du einen Platzhalter im Template einbaust, der in der index.php befüllt wird (durch Ersetzung - klar).

Im Fall von 1. braucht es eines dieser spezialisierten Zusatzscripte, die mit einer ausgeklügelten Prüfung auf eben nur die Seite(n) reagieren, für die sie angelegt wurden.

Nun zur Frage nach der Technik, wie Du welche Inhalte an welcher Stelle im Quelltext einfügen kannst.

a) Einfache Methode (Platzhalter): einfache String-Ersetzung

b) Kompliziertere Methode: String-Ersetzung mit regulären Ausdrücken (preg_replace u.ä.)

c) Objekt-orientierte Methode: DOMDocument bauen und modifizieren (mache ich gerade in meinem Projekt)

Ich denke, wie a) funktioniert, haben wir geklärt.

Wenn Du mit HTML-Kommentaren arbeitest, dann ist es vielleicht schlauer, sogenannte reguläre Ausdrücke zu benutzen. Aber noch bin ich mir nicht sicher, dass Du das im Moment tatsächlich benötigst... mal schauen.

Die Methode mit DOMDocument ist für Anfänger sehr komplex. Im Grunde wird aus dem HTML-Code ein großes Objekt gebaut, welches den Elementenbaum (DOM tree) abbildet und dabei Methoden definiert, wie ich Elemente darin finden und manipulieren kann. Zum Schluss wandelt man das DOMDocument in seine Textrepräsentation um (konvertiert zurück in HTML-Code) und gibt das Ergebnis an den Browser aus.

Ich habe in der Apache Config unter dem Punkt:
<IfModule mime_module>

folgendes hinzugefügt gehabt:
AddType application/x-httpd-php php php4 php3 html htm

Anscheinend gibt es das Problem schon öfters. Ich werde mal schauen ob ich eine Fehlerquelle finde, es kann ja nicht sein, dass ich kein Includes mehr benutzen kann -.-; .

Du willst allen Ernstes keine HTML-Dokumente vom PHP-Parser auf PHP-Code untersuchen lassen! Wie Du siehst, wird in unserem Verfahren auch keinerlei PHP-Code in den HTML-Dateien benötigt. Das Includieren von weiteren Dateien machst Du auch auf transparente Weise, indem Du eine include-Anweisung als eigenständige Anweisung notierst, und nicht innerhalb einer Wertzuweisung, einer Array-Definition oder ähnlichem.

... Ich habe nach einer Möglichkeit gesucht, Mehrere Inhalte wegen meiner Subnavi an unterschiedlichen Stellen ein und auszuschneiden. So kam ich auf dieses konstruckt ->>

Aha. Jetzt wird es für mich konkreter. Wir reden jetzt von einer Sub-Navi. OK. Wie soll der finale HTML-Code denn mit der Subnavi aussehen? Ist das ein eigenes <nav>-Element innerhalb des <main>-Elements, oder willst Du das bestehende <nav>-Element des Templates erweitern?

Ist es vielleicht sogar sinnvoller, alle Navigationsmöglichkeiten in einer eigenen Struktur abzubilden, die anhand von $pages abgeleitet werden kann?

$line = "<!-- HEADaf"; //Die Startposition in der HTML

$anf = strpos($head, $line); //Anfangsposition in dem jeweiligen String
    $head = substr($head, $anf); //Vom Anfang wird nun ausgegben
$end = strpos($head, "<!-- HEADe -->"); //Endposition wird angegebn
    $head = substr($head, 0, $end); //Dort hört es auf, auszugeben

  
Arrrgh. Das liest sich nicht schön. Ich baue einmal einen HTML-Code, den Du gemeint haben könntest:  
  
~~~html
<!-- HEADaf -->  
    <ul><li><a href="?p=serien">Serien</a></li></ul>  
<!-- HEADe -->

Wenn man jetzt den Teil mit <ul>...</ul> haben möchte, dann bietet es sich anhand der HTML-Kommentare an, das mit einem regulären Ausdruck zu machen:

$html = file_get_contents('./pages/anime.html');  
  
$pattern = '~(?is)<!--[\n\r\t ]*HEADaf[\n\r\t ]*-->[\n\r\t ]*(<ul>.*?</ul>)[\n\r\t ]*<!--[\n\r\t ]*HEADe[\n\r\t ]*-->~';  
  
preg_match($pattern, $html, $nav); // defines $nav = array([0] => string, [1] => string)  
  
$content = preg_replace($pattern, '', $html);

Nun (sollte: habe nichts getestet) stehen in $nav[0] der komplette Teil mit beiden HTML-Kommentaren und dem <ul>...</ul> dazwischen, in $nav[1] der Code mit <ul>...</ul> alleine und in $content der Rest, ohne den durch HTML-Kommentare markierten Teil.

if (array_key_exists("p", $_GET) // Gibt es in der Superglobalen Variable $_GET einen Schlüssel p ?
    && array_key_exists($_GET["p"], $pages) // Und gibt es in dem Schlüssel eine Seite aus dem Array $pages ?
) {
    $contents = file_get_contents('./pages/'.$pages[$_GET["p"]]);
    $nav = file_get_contents('./pages/'.$pages[$_GET["p"]]);
    $head = file_get_contents('./pages/'.$pages[$_GET["p"]]);
} // Wenn beides "True", lade die gewünschte Seite in die Variable $contents etc.


>   
> ... Jetzt wird mit dem Code von oben jedes dieser Elemente "beschnitten".  
  
Aha... jetzt wird mir klarer, wie Du vorgehst. Vielleicht ist da eine andere Vorgehensweise besser. Dazu müsste ich allerdings erst verstehen, was Du alles jetzt in Deinen Seiten zusammenpuzzlen willst! Mein Vorschlag beschränkte sich auf $nav und $content innerhalb des Templates. Von mehr "weiß" ich momentan noch nichts!  
  

> Das hier möchte ich in genau einer HTML Datei einfügen:  
>   
> ~~~php
  

> <?php  
>     $db = mysqli_connect("localhost", "Benutzer", "Passwort", "homepage");  
>     if(!$db){  
>     exit("Verbindungsfehler: ".mysqli_connect_error());  
>     }  
>     $db->query("SET NAMES 'utf8'");  
> ?>  
> <?php  
> if (array_key_exists('p', $_GET) && 'p' == 'animes_geschaut') {

Gut. Eine neue Seite, heißt 'animes_geschaut'. OK.

1.) Du sammelst die Daten in ein zuvor initialisiertes Array. Dann schließt Du die DB-Verbindung wieder. Sollte es bei der DB-Ausleserei zu Fehlern kommen, bleibt das Array halt leer.

2.) Du nimmst die Array-Daten und bastelst Dir damit (analog zu "serien") einen HTML-Code.

3.) Deine exit-Anweisung im Fehlerfall ist eine ganz schlechte Idee!

~~~php

$ergebnisAnfang = 0;

$result = mysqli_query($db, "SELECT Name_Japanisch, ID, Name_Roomaji, Genre, Datum, Bewertung, Typ, Episoden FROM animes");
    while($row = mysqli_fetch_object($result))
    {
        $data .= sprintf(
        '<li><h2>' ."$row->ID. $row->Name_Roomaji". '<a href="#' ."$row->ID".'">Details</a></h2>'

  
Besser, Du erstellst Deinen HTML-Code erst nachdem Du alles aus der DB ausgelesen hast. Siehe oben und "exit"... Ansonsten schaust Du in meinen Beispielcode zu "serien". Dort trenne ich auch Daten von Markup, indem ich das Markup erst nach beendigter DB-Ausleserei zusammenbaue.  
  

>         ~~~php

if($row->Name_Roomaji == "Das Verschwinden der Haruhi Suzumiya")  

>         {  
>             $ergebnisNeu = 161;  
>         }  
>         else if($row->Name_Roomaji == "Saishuuheiki Kanojo: Another Love Song")  
>         {

Du willst das switch-Statement benutzen. Damit liest sich Dein Code schöner:

  
        switch ($row->Name_Roomaji) {  
            case 'Das Verschwinden der Haruhi Suzumiya':  
                $ergebnisNeu = 161; // [link:http://de.wikipedia.org/wiki/Magische_Zahl_%28Informatik%29#Magische_Zahlen_in_Code@title=magic number] - lieber anders  
            break;  
            case 'Saishuuheiki Kanojo: Another Love Song':  
                $ergebnisNeu = $row->Episoden*28;  
            break;  
            case '...':  
                $ergebnisNeu = ...;  
            break;  
            default:  
                $ergebnisNeu = 0;  
            break;  
        }

Warum steht eigentlich Dein Ergebniswert in PHP codiert und nicht in der DB? Kannst Du Deine Anfrage nicht so gestalten, dass die Berechnung von $ergebnisNeu bereits von der DB beantwortet wird? Dort steht doch sicherlich auch die Anzahl Episoden pro Staffel bei der entsprechenden Serie dabei...?

// $ergebnis_time = printf('<p id="time">Ich habe <span>'."$ergebnis".' Stunden</span> mit Animegucken verbracht.</p>');

// $animes_geschaut = str_replace('$animes_geschaut_datenbank', $data, $animes_geschaut);
        // $animes_geschaut = str_replace('$ergebnis_time', $ergebnis_time, $animes_geschaut);
}

  
Warum steht denn das <p>-Element mit der ID "time" nicht bereits in der HTML-Datei? printf spuckt sein Ergebnis sofort an den Browser. Du möchtest lieber [sprintf](http://php.net/manual/en/function.sprintf.php) benutzen. Dessen Ergebnis kann man in einer Variable speichern. Die Funktion [printf](http://php.net/manual/en/function.printf.php) dagegen gibt Dir nur einen Zahlenwert bezüglich der Länge des (an den Browser ausgegeben) Strings zurück.  
  

> Wenn ich dieses script jetzt mit include in meine index.php einfüge... dann passiert ... nichts.  
  
In anderen Worten: Kein Eintrag im Fehler-Log, keine Ausgabe im HTML-Quelltext der Seite.  
  

> Im Browser zeigt er mir einfach nur $animes\_geschaut\_datenbank und $ergebnis\_time an.  
  
Als sichtbare Ausgabe im Browserfenster, oder nur sichtbar im Quelltext? Du drückst Dich hier technisch betrachtet sehr vage aus...  
  

> (Ja ich bin ein großer Anime-Fan (^\_^), komme aber momentan nicht zum gucken, weil mich das oben beschriebene Problem wurmt und ich viel Freude an der Erstellung meiner Website habe.)  
  
Na, dann weiterhin viel Spaß damit!  
  
Liebe Grüße,  
  
Felix Riesterer.

-- 
"Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
0 78

Innerhalb von php-while-schleife datensatz mit javascritp

Simon P.
  • datenbank
  1. 0
    Felix Riesterer
    1. 0
      Simon P.
      1. 0
        Simon P.
        1. 0
          Felix Riesterer
          1. 0
            Simon P.
            1. 0
              Felix Riesterer
              1. 0
                Simon P.
                1. 0
                  Felix Riesterer
                  1. 0
                    Simon P.
                    1. 0
                      Felix Riesterer
                      1. 0
                        Simon P.
                        1. 0
                          Felix Riesterer
                          1. 0
                            Simon P.
                            1. 0
                              Simon P.
                              1. 0
                                Felix Riesterer
                                1. 0
                                  Simon P.
                                  1. 0
                                    Felix Riesterer
                                    1. 0
                                      Simon P.
                                      1. 0
                                        Simon P.
                                        1. 0
                                          Auge
                                          1. 0
                                            Simon P.
                                            1. 0
                                              Felix Riesterer
                                              1. 0
                                                Simon P.
                                            2. 0
                                              Martin_Online
                                              1. 0
                                                Felix Riesterer
                                                1. 0
                                                  Martin_Online
                                                  1. 0
                                                    M.
                                                    1. 0
                                                      Simon P.
                                            3. 0
                                              M.
                                        2. 0
                                          Felix Riesterer
                                          1. 0
                                            Simon P.
                                            1. 0
                                              Felix Riesterer
                                              1. 0
                                                Simon P.
                                                1. 0
                                                  Felix Riesterer
                                                  1. 0
                                                    Simon P.
                                                    1. 0
                                                      Simon P.
                                                    2. 0
                                                      Felix Riesterer
                                                      1. 0
                                                        Simon P.
                                                        1. 0
                                                          Felix Riesterer
                                                          1. 0
                                                            Simon P.
                                                            1. 0
                                                              Felix Riesterer
                                                              1. 0
                                                                Simon P.
                                                                1. 0
                                                                  Simon P.
                                                                  1. 0
                                                                    Felix Riesterer
                                                                    1. 0
                                                                      Simon P.
                                                                      1. 0
                                                                        Simon P.
                                                                        1. 0

                                                                          HTML5-Semantik

                                                                          Felix Riesterer
                                                                          • html
                                                                          1. 0
                                                                            Simon P.
                                                                            1. 0
                                                                              Felix Riesterer
                                                                              1. 0
                                                                                Simon P.
                                                                                1. 0
                                                                                  Felix Riesterer
                                                                                  1. 0
                                                                                    Simon P.
                                                                                    1. 0
                                                                                      Felix Riesterer
                                                                                      1. 0
                                                                                        Simon P.
                                                                                        1. 0
                                                                                          Simon P.
                2. 0
                  Simon P.
                  1. 1
                    Felix Riesterer
                    1. 0
                      Simon P.
                      1. 0
                        M.
                        1. 0
                          Matthias Apsel
                          1. 0
                            M.
                            1. 0
                              molily
                              1. 0
                                M.
                      2. 0
                        Felix Riesterer
                        1. 0
                          Simon P.
                          1. 0

                            Begriff Webseite

                            Tabellenkalk
                            • projektverwaltung
                            1. 0
                              Simon P.
                              1. 0
                                Gunnar Bittersmann
                          2. 0
                            Auge
      2. 0
        Felix Riesterer
        1. 1
          Matthias Apsel
          1. 0
            Felix Riesterer
            1. 0

              Browserverlauf bei seiteninternen Verweisen löschen

              Matthias Apsel
              • selfhtml-wiki
              1. 0
                Felix Riesterer
                1. 0
                  molily
              2. 0
                molily
  2. 0
    ChrisB