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

Beitrag lesen

Lieber Simon P.,

ich habe mal versucht Irgendwas zu includieren, auch wenn ich in die Datum.php nur das mache:

"irgendwas" ist meistens falsch. Wenn Du nicht genau weißt, was Du tust, dann läufst Du Gefahr, dass unvorhersehbare Dinge geschehen, denn die Abarbeitung des Codes folgt der Logik der PHP-Sprache, und dann heißt es "works as designed" oder "garbage in, garbage out".

<?php

date('d.m.Y, H:i:s', filemtime('./pages/'.$pages[$_GET['p']]));
?>

  
Dieser Code sorgt dafür, dass \_sofort\_ Daten an den Browser gesendet werden. Das bedeutet, dass der vom Browser empfangene HTML-Code mit dieser Datumsangabe beginnt... noch vor einem <!DOCTYPE...> oder <html>-Element. Das willst Du nicht. Du willst ein HTML-Dokument mit möglichst validem Code.  
  
Das Prinzip, dass ich Dir nahelegen wollte, sammelt erst allen HTML-Code, um ihn am Ende(!) komplett(!!) an den Browser zu senden. Und das habe ich nicht zufällig oder aus Bequemlichkeit so vorgeschlagen, sondern aus der Erfahrung heraus, dass manchmal im Code Dinge unmöglich werden, wenn bereits Teile des zusammenzusetzenden HTML-Codes an den Browser versandt wurden. Das hat insbesondere im Zusammenhang mit meinem GB-Script immer wieder zu Hilfe-Anfragen geführt, weil Leute HTML-Code schon ausgegeben hatten, bevor sie mein Script includiert hatten.  
  

> und in die index.php dann einfach das hinzufüge:  
>   
> ~~~php

$tmp = str_replace(  

>     array('$contents', '$news', '$nav', '$head', '$mtime'),  
>     array($contents, $news, $nav, $head, include("script_date.php")),  
>     $tmp  
> );

Prüfen wir einmal die Logik hinter diesem Code. Die include-Anweisung sorgt dafür, dass ein Code-Schnipsel an exakt der Stelle eingefügt wird, an der sie steht. Aus Deinem obigen Code entsteht nach dem Inkludieren folgendes Konstrukt:

$tmp = str_replace(  
    array('$contents', '$news', '$nav', '$head', '$mtime'),  
    array($contents, $news, $nav, $head, date('d.m.Y, H:i:s', filemtime('./pages/'.$pages[$_GET['p']]))),  
    $tmp  
);

Das mag in diesem Fall vielleicht sogar zu sinnvollem Code führen, ist aber hochgradig fehleranfällig, denn wie sehe ich einem Script an, dass es im Wesentlichen nur eine Variable mit einem Wert befüllen soll, damit dieser dann als Ersatz für diese verwendet werden kann? Vergleiche folgende beiden Beispiele:

<?php  
$a = '';  
  
include 'a.php'; // sets $a to a string value e.g. $a = "hello world!";  
  
$b = include('b.php'); // date('d.m.Y')  
  
echo "$b: $a";  
  
?>

Solcherlei include-Anweisungen (wie hier bei $b) sind in meinen Augen nicht sinnvoll. Mach' es lieber so, wie ich es Dir mit dem Einbinden von spezialisierten Zusatzscripts vorgeschlagen habe. Da sieht man auf den ersten Blick, dass da umfangreicherer PHP-Code kommt, der nicht nur einen Wert ermittelt, damit man die include-Anweisung ersatzweise für einen Variablennamen notieren kann.

Der Fehlercode von apache/logs/error.log sieht dann wie folgt aus:

[Mon Jul 28 13:48:27.098617 2014] [include:error] [pid 5000:tid 1664] [client 127.0.0.1:51060] unable to include potential exec "include/top.html" in parsed file D:/HTML__/Xampp/apache/error/HTTP_NOT_FOUND.html.var, content type not text/*, referer: http://localhost/homepage/index.php?p=home
[Mon Jul 28 13:48:27.099617 2014] [include:error] [pid 5000:tid 1664] [client 127.0.0.1:51060] unable to include potential exec "include/bottom.html" in parsed file D:/HTML__/Xampp/apache/error/HTTP_NOT_FOUND.html.var, content type not text/*, referer: http://localhost/homepage/index.php?p=home

Ist das jetzt wirklich so überraschend? Die Fehlermeldungen scheinen davon zu handeln, dass der Parser nicht includieren kann, weil er nicht sicher ist, dass es sich nur um simplen Text handelt, den er so einbinden kann, wie er ist. Es könnte ja zu parsender PHP-Code enthalten sein, der vom Parser an dieser Stelle anscheinend nicht geparst werden kann. Das mag eine Folge Deiner Server-Konfiguration sein, die HTML-Dokumente als zu parsende PHP-Scripte ermöglicht.

Dein Vorschlag mit dem generellen Datum funktioniert leider nicht,

Deine Fehlerbeschreibung ist leider keine. Aber immerhin lieferst Du einen Code-Schnipsel, den es sich anzuschauen lohnt, sodass wir doch vielleicht weiter kommen:

$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

$line2 = "<!-- NAVaf";
$anf2 = strpos($nav, $line2);
    $nav = substr($nav, $anf2);
$end2 = strpos($nav, "<!-- NAVe -->");
    $nav = substr($nav, 0, $end2);

$line3 = "<!-- MAINaf";
$anf3 = strpos($contents, $line3);
    $contents = substr($contents, $anf3);
$end3 = strpos($contents, "<!-- MAINe -->");
    $contents = substr($contents, 0, $end3);

  
Na, das hat mit meinem Code nun überhaupt nichts mehr zu tun. Warum nimmst Du keine Platzhalter? Gibt es einen Grund, warum Du hier umständlich nach Anfang und Ende von etwas suchst?  
  
Auch ich habe schon HTML-Kommentare dazu benutzt, Inhalte dort einzufügen, oder ganze Teile "wegzuschneiden". Grundsätzlich ist das schon clever. Aber auch schwieriger. Da eignen sich meiner Meinung nach bald schon diese extrem coolen regulären Ausdrücke, mit denen solche Ersetzungen fast als Einzeiler möglich sind. Aber ist das in Deinem Projekt jetzt an dieser Stelle notwendig? Was genau willst Du eigentlich erreichen?  
  

> Es funktioniert so (noch nicht perfekt verstanden). Aber wenn ich dein generellen Vorschlag annehme, dann funktioniert es nicht mehr.  
  
Wiebitte? Bratwurst mit Abfahrt?  
  

> Ich hatte auch mal versucht meine Datenbank zu includieren, aber es wir einfach alles ganz an den Anfang des Dokumentes gesetzt.  
  
Das könnte damit zu tun haben, dass Du Funktionen benutzt, deren Rückgabewert Du nicht in einer Variablen speicherst, sodass deren Rückgabewert sofort an den Browser gesendet werden (siehe weiter oben).  
  

> man müsste ja im Prinzip auch includes in der index.php in eine Variable schreiben können und die dann abrufen können oder? Aber es funktioniert nicht. [...]  
> `$mtime = include("date.php");`{:.language-php}  
  
Zuerst initialisierst Du eine Variable, dann includierst Du ein Script, das diese Variable mit einem anderen Wert überschreiben soll:  
  
~~~php
$mtime = time(); // now  
  
include 'mtime.php'; // sets $mtime e.g. $mtime = filemtime('file.php');

Damit erreichst Du, dass das hauptsächliche Script (hier index.php) "ungestört" weiterlaufen kann, auch wenn mtime.php die gewünschte Variable überhaupt nicht kennt und dafür eine andere definiert.

Hab ich wiedermal was übersehen?

Du versuchst technische Lösungen für Probleme zu finden, ohne die Natur der Probleme aus PHP-Sicht genau verstanden zu haben. Das ist für Anfänger typisch. Aus genau diesen Fehlern lernt man ja die Denkweise der Programmiersprache kennen und kann daran wachsen.

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