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

Beitrag lesen

Lieber Simon P.,

Im Zusammenhang damit habe ich nun auch endlich das System verstanden denke ich.

das klingt alles sehr fleißig und vielversprechend!

Ich werde jetzt auch besser darauf achten, wie ich mich ausdrücke, damit du meinen Standpunkt besser verstehen kannst.

Ja, vielleicht haben wir ein kleines Kommunikationsproblem nebenbei gehabt. Aber daran kann man wachsen.

if (array_key_exists("p", $_GET)

&& array_key_exists($_GET["p"], $pages)
) {
    $contents = file_get_contents('/pages/'.$_GET["p"]);
}

die if-Anweisung prüft als erstes ob in der Variable $_GET, der Wert 'p' vorhanden ist.

Prinzipiell hast Du schon Recht, genauer wird geprüft, ob im Array $_GET ein Schlüssel "p" angelegt ist, nicht ob der Wert "p" vorhanden ist. Für Deine Zwecke benötigst Du im Moment nur die drei Prüfungen:

1.) gibt es einen Schlüssel "p" in meinem Array?
2.) gibt es einen Wert "p" in meinem Array?
3.) wieviele Schlüssel-Wert-Paare enthält mein Array?

Und die Anweisung prüft ob eine Variable, die sich im Array $_GET befindet, ein Wert aus der Variable $pages ist.

Im Grunde hast Du schon Recht, genauer wird überprüft, ob der dem Schlüssel "p" zugewiesene Wert (Arrays enthalten Schlüssel-Wert-Paare) einem in $pages vorhandenen Schlüssel entspricht (damit später dann dessen Wert als Dateinamen benutzt werden kann).

Diese anscheinend umständliche Prüfung ist wichtig, damit hier keine Attacken über manipulierte Werte gestartet werden können, um Schadcode auf Deinen Server zu spielen, oder sensible Daten auszulesen (wie z.B. Dein DB-Passwort).

Sollte beides übereinstimmen, dann wird in die Variable $contents das eingefügt, was in der Datei, die den jeweiligen Variablenwert von $pages hat, steht. Zum Beispiel, die contact.html.

Exakt. Du hast alles verstanden.

So, in der template sind die links so:

<li><a href="/">Home</a></li>
<li><a href="?p=contact">Kontakt/Impressum</a></li>

Wenn ich nun in der Navigation auf "Kontakt" klicke, wird der Wert der Variable $_GET zu p=contact was dann in der if-Anweisung dazu führen sollte, dass nun die contact.html in die Variable $contents geschrieben wird und diese sollte dann ausgegebn werden.

Ja, im Grunde richtig. Wenn Du auf den Link klickst, dann fordert der Browser eine Ressource nach dem folgenden Schema an:

http://example.org/?p=contact
http://localhost/?p=contact

Das bedeutet aus Sicht von PHP, dass die Variablen $_GET (ein superglobales Array) einen Schlüssel "p" mit dem zugeordneten Wert "contact" enthält. Das könnte für diesen Query-String ("?p=contact&foo=bar&blah=blubb") so aussehen:

$_GET = array(  
    'p' => 'contact',  
    'foo' => 'bar',  
    'blah' => 'blubb'  
);

Leider kommt dann diese Fehlermeldung, da wo der Text dann eigentlich stehen sollte:

Warning: file_get_contents(/pages/contact): failed to open stream: No such file or directory in D:\HTML__\Xampp\htdocs\phptest\index.php on line 17

In anderen Worten: Der Pfad "D:\HTML__\Xampp\htdocs\phptest/pages/contact" führt im Dateisystem zu keiner Ressource. Wir wollen noch ein ".html" am Ende stehen haben. Dann klappt's auch mit der HTML-Datei. Warum da jetzt aber kein ".html" am Ende steht, muss im PHP-Code zu finden sein. Offensichtlich wird der Schlüssel von $pages (also $_GET['p']) benutzt, anstatt der ihm zugewiesene Wert ($pages[$_GET['p']]) - mein Fehler, da ich Dir ungetesten Code gegeben habe. Ändere folgende Zeile entsprechend:

  
    // $contents = file_get_contents('./pages/'.$_GET['p']);  
    $contents = file_get_contents('./pages/'.$pages[$_GET['p']]);  

Wie arbeitet php an dieser Stelle? Ich öffne die index.php und der Quelltext wird dann einmal eingelesen. Somit wird alles ausgegeben, wie es sein sollte (news.html, home.html, template.html). Wenn ich nun aber in der Navi auf einen link klicke, ändert sich ja die URL und die index.php wird nicht noch einmal ausgeführt, sprich der Quelltext wird nicht noch einmal eingelesen oder?

Wenn der Browser eine Ressource vom Server anfordert, muss der die Anfrage beantworten. Dazu benutzt er hier ein PHP-Script, da die Anfrage immer auf /index.php zeigt. Neue Seite bedeutet eine neue Anfrage des Browsers an den Server, also ein erneutes Aufrufen des PHP-Scripts.

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