Simon P.: Innerhalb von php-while-schleife datensatz mit javascritp

Beitrag lesen

Hallo Felix,

dann sollte man sich genauer überlegen, wie man diese Puzzlelei einfacher gestalten kann. Bitte definiere doch einfach und klar die einzelnen Teile! Offensichtlich benötigst Du das <title> Element aus dem <head>-Bereich ebenso, wie die Subnavi. Aber was noch und wie ist es in einer HTML-Datei abgelegt?

Bis jetzt gibt es nur die 3 großen Teile die zusammengepuzzlet werden. Dazu kommen dann die Neuigkeiten, die einfach auf jede Seite kommen und die file_mtime, die auf manchen Seiten hinzugfügt wird.
Zu file_mtime kurz:
Ich habe es so gelöst, dass ich einfach auf in alle HTML-Seiten die Variable $mtime eingefügt habe wo ich wollte (nicht ins Template).
In die index.php habe ich dann das in die str_replace geschrieben:

  
$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  
);  

Bei diesem System ist mir aufgefallen, dass wenn ich zum ersten mal die Seite aufrufe, und damit noch nichts in meinem Schlüssel "p" drinne stehen habe, dass ich dann noch eine else Bedingung benötige, damit der mir keinen Fehler ausspuckt. Das sieht dann so aus:

  
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.  
else  
{  
    $_GET = array("p" => "home");  
}  

Okay, bis jetzt puzzle ich den HEAD, die "Sub-Navi" (in meiner Index, die ich dir geschickt habe, links an der Seite die Navi) und den Text (also Kontent) zusammen. Mit head meine ich sowas, was (soweit wie ich verstanden habe), wichtig ist für jede Seite einzelnd zu bestimmen:

<title>Meine Website / Animes / Geschaut</title>
    <meta charset="UTF-8">
    <meta name="description" content="Eine Liste aller Animes die ich geschaut habe.">
    <meta name="author" content="Simon P.">


>   
> Das wird dann tatsächlich eine Aufgabe für einen HTML-Parser (Methode c). Man kann es auch mit der Methode b) machen, aber sicherer ist es mit einem Parser. Das schauen wir uns demnächst an.  
  
Bis jetzt ist mir natürlich nicht klar weswegen (ich kenne Methode C und ihre Vorteile noch nicht). Das einzige was ich mich frage ist, warum ich nicht weiterhin meine Methode benutzen kann, die ja funktioniert und wirklich nur 1 zu 1 das von meinen HTML Seiten ins Template übertragt, was ich möchte. Damit weiß ich 1. wie es funktioniert und 2. ist es (meiner Ansicht nach) sehr übersichtlich. Aber ich bin gespannt, was Methode C mit sich bringt.  
  

> > > 3.) Deine exit-Anweisung im Fehlerfall ist eine ganz schlechte Idee!  
> >   
> > Habe ich geändert in:  
> > ~~~php

<?php  

> >      $db = mysqli_connect("localhost", "Benutzer", "Passwort", "homepage");  
> >      if(!$db){  
> >      exit("Verbindungsfehler: Es konnte keine Verbindung zur Datenbank aufgenommen werden.");  
> >      }  
> >      $db->query("SET NAMES 'utf8'");  
> > ?>

Ach, und da steht jetzt kein exit-Statement mehr? Ein Programmabbruch ist eine sehr schlechte Idee!

Dieses exit bewirkt, dass _kein_ korrekt zusammengesetztes HTML-Dokument an den Browser gesandt wird. Probiere es doch einmal aus, indem Du die Login-Daten absichtlich verfälschst! Was Du in einem solchen Fall willst, ist eine Seite, die ebenso ein vollständiges HTML-Dokument ist, wie alle anderen auch. Nicht nur eine (egal wie aussagekräftige) Fehlermeldung in einer simplen Text-Datei. Was soll denn der Seitenbesucher machen, wenn ein Fehler auftritt? Kann er den Fehler beheben oder vermeiden? Nein, kann er nicht, aber vielleicht kann er aus der Navi einen anderen Link auswählen... halt, kann er nicht, da ist ja gerade keine Navi.

Verstanden?

Ja, hab es jetzt mal ausprobiert, was passiert, wenn es einen Fehler mit dem Login gibt... meine Seite wird komplett nicht mehr angezeigt. Nun gut, werde ich mal versuchen, das zu beheben.

Besser, Du erstellst Deinen HTML-Code erst nachdem Du alles aus der DB ausgelesen hast. [...]
Hm, habe ich bisher noch nicht gemacht, weil es einfach nicht funktioniert hat (habe es noch nicht richtig getestet und dran rumgebastelt, weswegen ich dir jetzt keinen Fehlercode oder meinen Code etc. geben kann).

Es fällt leichter, Fehler beim DB-Zugriff im Vorfeld abzufangen. Beispiel:

$data = array();

if ($db) {
    // read DB into $data array
}

// default (in case of error)
$html = '<p class="error">Sorry, no data available.</p>';

if (!empty($data)) {

$html = '<dl>';

foreach ($data.....) {}
}


>   
> Wenn der Zugriff auf die DB aus welchen Gründen auch immer nicht geklappt hat, enthält $data keine Daten. Dafür landet auf der Seite genau der Hinweis, der für den Besucher relevant ist. Der Hinweis wird korrekt in den Platzhalter eingefügt und steht an genau der Stelle, an die er soll.  
  
Muss ich mal rumprobieren. Bis jetzt verstehe ich nicht so richtig, was genau die IF-Anweisung prüft, was dann in der IF-Verzweigung stehen soll... und was die foreach macht.  
  

> > Irgendwas stimmt mit dieser Schleife nicht:  
> >   
> > ~~~php
  

> > if (array_key_exists('p', $_GET) && 'p' == 'animes_geschaut')  
> > 

Das ist keine Schleife, das ist eine Verzweigung. ;-)

Stimmt.

Du willst also prüfen, ob der String-Wert "p" ungefähr das gleiche ergibt wie "animes_geschaut". Das ist aber nicht das gleiche, auch nicht ungefähr.

Hm, ich habe die Verzweigung von dir "abgeschrieben". Die hattest du in deinem Post vom 28.07. um 01:18 Uhr mir als Vorschlag genannt. Nun bin ich mir nicht sicher, ob ich das da falsch verstanden habe oder nicht.

Tipp: In PHP gibt es zwei verschiedene "ist das gleiche wie"-Operatoren. Entweder "==" (ungefähr gleich) oder "===" (exakt gleich). Schau mal nach, was da wie genau funktioniert. Das kann in manchen Fällen sehr zur Verwirrung führen.

Okay, mache ich.

Liebe Grüße,

Simon P.

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