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

Beitrag lesen

Lieber Felix,

hier mein Quelltext.

Mal schauen.

<h1><b>Serien</b></h1>

Wozu das <b>-Element? Du kannst doch im CSS Fettschrift einstellen! Schau in mein Fiddle (egal welches). Dort steht die Eigenschaft "font-weight:bold", was genau den visuellen Effekt des <b>-Elements erzeugt. Du hast eines noch nicht 100%ig verinnerlicht: Es ist HTML völlig egal, wie etwas aussehen soll, denn HTML regelt kein Aussehen, sondern nur Struktur und Beziehung. Löse also visuelle Probleme nicht mit HTML!!

Okay, soweit verstanden, also auch kein <i> oder <em> oder <strong> etc.. Wozu sind die Elemente dann gedacht? Und sparrt das nicht Quelltext = weniger Ladezeit (natürlich nur im geringen). Das in CSS nur Design und in HTML nur Text gemacht wird, ist mir klar, ich dachte, dass ich dennoch einfach dieses, wie eben <b> oder <i> der Einfachheit halber benutzen kann.

Was auch immer dieses Teil macht, es scheint mir, als solltest Du noch stärker zwischen DB-Abfrage und HTML-Ausgabe unterscheiden. Mal weiter sehen.

Die Login.php ist bei mir das hier:

<?php $db = mysqli_connect("localhost", "benutzername", "passwort", "datenbank"); if(!$db){    exit("Verbindungsfehler: ".mysqli_connect_error()); } $db->query("SET NAMES 'utf8'"); ?>

Jetzt sehe ich endlich die Struktur, die Du bisher verheimlicht hast. OK. Da lässt sich was draus machen.

Diese Struktur hatte ich nicht, ich habe deine Struktur übernommen. Aber so wie ich dich verstanden habe, ist das auch nicht die feine Art, da ich ja HTML code in PHP integriert habe. Ich möchte wirklich versuchen, ordentlich zu arbeiten, aber bis jetzt habe ich noch wenig PHP Kenntnisse, so dass ich nicht weiß, wie ich eine Webside auf PHP-Basis aufbaue und mein HTML Text (der ja dann die Webside sein soll) dort hineinfüge, so, dass alles schön getrennt ist.

Tja, wenn Du in einem Schleifendurchlauf zu Beginn eine Variable auf einen festen Wert setzt ("$s = 1;"), dann nützt es Dir überhaupt nichts, wenn Du an dieser Stelle den Wert kontinuierlich hochzählen lassen willst, denn im nächsten Durchlauf wird er ja wieder zurück gesetzt.

Als ich das gelesen habe, habe ich über meine eigene Dummheit lauthals gelacht ;-).

Das könntest Du sowieso. Es ist an dieser Stelle fraglich inwiefern der Einsatz eines Datenbankservers hier notwendig ist. Aus meiner Sicht hat er nur dann einen Sinn, wenn Du den Umgang mit MySQL aus PHP heraus lernen willst. Ansonsten ist Dein Problem völlig ohne DB lösbar - und das nicht nur deshalb, weil Du die Daten in einer "rohen" Form auch aus einer Datei einlesen könntest...

Ich habe in meiner Ausbildung gelernt (wir haben nur mit MS Access gearbeitet), dass der große Vorteil von Datenbanken die Beziehungen zueinander sind. Da ich nicht weiß, ob ich das nochmal benötige und der Ordentlichkeit halber, habe ich die Daten in die mySQL Datenbank gepackt. Außerdem möchte ich lernen, wie ich mit mySQL und PHP arbeite, da es mir unglaublich viel Freude bereitet. Leider beherrsche ich es noch nicht so, dass es das außschließlich tut, es bereitet mir momentan auch unglaublich viel Kopfzerbrechen hinter die Logik zu kommen.

Ist das logisch...? ;-)

Ich denke ja.

Ich probier mal in der Zwischenzeit weiter, vielleicht finde ich eine Lösung.

Ich habe deinen ersten Vorschlag umgesetzt und alles hat wunderbar funkioniert. Einziges Manko ist, dass wenn ich das Fenster mit "x" schließe, dass der Browser mir unter die <h2> springt. Das ist aber erstmal nicht weiter schlimm. (der macht das nicht, wenn ich ganz nach unten scrolle [ca. 50 Datensätze].

Ich mache Dir noch einen Vorschlag:

<?

> 
> // data to be received from DB
> $data = array();


> // connect to DB
> include 'login.php';
> 
> // get data from DB
> $result = mysqli_query(
>     $db,
>     'SELECT Name, ID, Genre, Datum, Bewertung, Typ, Episoden FROM Serien'
> );
> 
> while ($row = mysqli_fetch_object($result)) {
>     // add a set to our data
>     $data[] = array(
>         'date'     => $row->Datum,
>         'episodes' => $row->Episoden,
>         'eval'     => $row->Bewertung,
>         'genre'    => $row->Genre,
>         'id'       => $row->ID,
>         'name'     => $row->Name,
>         'type'     => $row->Typ
>     );
> }

Bis hierhin verstanden. -> Also erst wird ein leeres Array erstellt, dann eingeloggt, die Daten werden in $data[] geschrieben und den jeweiligen Key zugewiesen. Soweit so gut. Nun die erste Frage. Wird durch die Schleife für jeden Datensatz ein neues Array erstellt oder sind in z.B. "date" jetzt die Daten von allen Datensätzen hintereinander in dem Array?


> // now DB connection is no longer needed
> // FIXME close DB connection

FIXME?


> // create HTML
> $ul = '<ul>';
> 
> foreach ($data as $set) {

aus $data wird jetzt $set. Nur damit wir nun mit $set auf die Daten innerhalb der Schleife zugreifen können oder?


>     $ul .= [sprintf](http://de3.php.net/manual/en/function.sprintf.php)(
>         '<li>'

Ich habe mir sprintf durchgelesen... .


>         . '<h2>%2$s <a href="s%1$s">Details</a></h2>'

ab hier wird es schwierig für mich:

% = es müssen keine Daten enthalten sein
2 = verstehe ich nicht woher die kommt
$ = verstehe ich auch nicht woher das Zeichen kommt
s = wird als String ausgegeben

und was in href="" steht... sagt mir dann auch nichts mehr.


>         . '<dl id="s%1$s">'
>         . '<dt>Datenbank ID</dt><dd>%1$s</dd>'
>         . '<dt>Name</dt><dd>%2$s</dd>'
>         . '<dt>Genre</dt><dd>%3$s</dd>'
>         . '<dt>Datum</dt><dd>%4$s</dd>'
>         . '<dt>Bewertung</dt><dd>%5$s</dd>'
>         . '<dt>Typ</dt><dd>%6$s</dd>'
>         . '<dt>Episoden</dt><dd>%7$s</dd>'
>         . '<dd><a href="#c%1$s" id="c%1$s">x</a></dd>'
>         . '</dl>'
>         . '</li>',

Es scheint das gleiche wie im Besipiel 1 zu sein nur anders. Aber dennoch ist HTML-Code mit PHP-Code gemischt.


>         [htmlspecialchars](http://de3.php.net/manual/en/function.htmlspecialchars.php)($set['id']),

Hab ich mir auch durchgelesen... aber mein Kopf raucht jetzt schon und ich komme mit dieser Erklärung auf der Webside nicht so ganz klar... ich verstehe das nicht (-.-;


>         htmlspecialchars($set['name']),
>         htmlspecialchars($set['genre']),
>         htmlspecialchars($set['date']),
>         htmlspecialchars($set['eval']),
>         htmlspecialchars($set['type']),
>         htmlspecialchars($set['episodes'])
>     );
> }
> 
> $ul .= '</ul>';

Ich gehe jetzt einfach einmal davon aus, dass Du genau so umgesetzt hast. Wir benötigen also einen Patch, damit "dynamische" Seiteninhalte durch Zusatz-Scripte eingebunden werden können:

// put it all together

> $tmp = str_replace(
>     array('{$contents}', '{$news}'),
>     array(  $contents,     $news  ),
>     $tmp
> );
> 
> // include additional scripts
> include 'serien.php'; // for ?p=serien
> 
> // send everything to the browser
> echo $tmp;
> ?>

Okay, hier füge ich in die index.php nur die serien.php hinzu...

Das Zusatz-Script für "serien" könnte jetzt so aussehen:

Datei "serien.php":

<?php

> 
> // we react to "?p=serien" in the URL
> if (array_key_exists('p', $_GET) && 'p' == 'serien') {

Leider nicht verstanden. Ich verstehe nicht was p und GET in dieser if Anweisung überprüfen soll.

>     // data to be received from DB
>     $data = array();
> 
>     // connect to DB
>     include 'login.php';
> 
>     // get data from DB
>     $result = mysqli_query(
>         $db,
>         'SELECT Name, ID, Genre, Datum, Bewertung, Typ, Episoden FROM Serien'
>     );
> 
>     while ($row = mysqli_fetch_object($result)) {
>         // add a set to our data
>         $data[] = array(
>             'date'     => $row->Datum,
>             'episodes' => $row->Episoden,
>             'eval'     => $row->Bewertung,
>             'genre'    => $row->Genre,
>             'id'       => $row->ID,
>             'name'     => $row->Name,
>             'type'     => $row->Typ
>         );
>     }
> 
>     // now DB connection is no longer needed
> // FIXME close DB connection
> 
>     // create HTML
>     $ul = '<ul>';
> 
>     foreach ($data as $set) {
> 
>         $ul .= [sprintf](http://de3.php.net/manual/en/function.sprintf.php)(
>             '<li>'
>             . '<h2>%2$s <a href="s%1$s">Details</a></h2>'
>             . '<dl id="s%1$s">'
>             . '<dt>Datenbank ID</dt><dd>%1$s</dd>'
>             . '<dt>Name</dt><dd>%2$s</dd>'
>             . '<dt>Genre</dt><dd>%3$s</dd>'
>             . '<dt>Datum</dt><dd>%4$s</dd>'
>             . '<dt>Bewertung</dt><dd>%5$s</dd>'
>             . '<dt>Typ</dt><dd>%6$s</dd>'
>             . '<dt>Episoden</dt><dd>%7$s</dd>'
>             . '<dd><a href="#c%1$s" id="c%1$s">x</a></dd>'
>             . '</dl>'
>             . '</li>',
> 
>             [htmlspecialchars](http://de3.php.net/manual/en/function.htmlspecialchars.php)($set['id']),
>             htmlspecialchars($set['name']),
>             htmlspecialchars($set['genre']),
>             htmlspecialchars($set['date']),
>             htmlspecialchars($set['eval']),
>             htmlspecialchars($set['type']),
>             htmlspecialchars($set['episodes'])
>         );
>     }
> 
>     $ul .= '</ul>';
> 
>     // insert HTML into template
>     $tmp =  str_replace('{$serien}', $ul, $tmp);
> }

Hier werden also die Daten irgendwie übergeben. Ich habe mir den PHP Vorschlag, mit der Trennung von HTML und PHP, noch nicht richtig angeschaut. Mein Kopf raucht, aber der Rauchmelder meldet noch nichts. Naja ich werde jetzt mal an die frische Luft gehen, sonst falle ich hier noch vom Stuhl. Danach schaue ich mir das nochmal an. Wichtig ist erstmal, dass mein Datenbank abfrage funktioniert... und das tut sie. Nun muss ich nur noch die Trennung richtig verstehen und dann sollte ich langsam wieder einen klaren Kopf bekommen.


> ?>

Das HTML der Datei "pages/serien.html" sähe dann in etwa so aus:



>         <h1>Serien</h1>
> {$serien}

Falls Du noch mehr Seiten mit "dynamischen" Inhalten haben willst, dann lohnt es sich, dass Du für jede Seite ein eigenes Zusatz-Script schreibst und es wie oben beschrieben vor der Ausgabe an den Browser includierst. Vielleicht willst Du ja einmal ein Gästebuch haben...

Den Link habe ich mir noch nicht angeguckt. Was meinst du denn mit dynamischen Inhalten? Ich übernehme auf meiner Webside keine Inhalte, die sich durch eine andere Webside ändern. Ich habe nur ein einfaches 3 Spalten Layout und fast außschließlich mit HTML und CSS gearbeitet... außer die mySQL Geschichte und die Include Geschichte. Was im Nachhinein noch dazu kommt... keine Ahnung. Ach und ich habe noch ein PHP-Befehl, der mir eine letzte Aktualisierung der Webside anzeigt, mehr php nicht. Javascript versuche ich fast komplett zu vermeiden... wo es halt geht. Mein einziges Javascript was ich momentan benutze ist lightbox.

Ich bin dir sehr dankbar, dass du mir so ausfürhlich hilfst und hoffe, dass du nicht an mir verzweifelst.

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