1. Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!
    Information ausblenden

PHP Array von Javascript durchsuchen lassen

Dieses Thema im Forum "PHP" wurde erstellt von lokoroko, 22 Juni 2017.

  1. lokoroko

    lokoroko Mitglied

    Registriert seit:
    9 Mai 2017
    Beiträge:
    81
    Punkte für Erfolge:
    6
    Okay also der erste Code hat funktioniert :)

    Ich habe mir den Link mal angeschaut aber ich habe da drin glaube ich nicht das richtige gefunden oder es einfach übersehen...

    Letztendlich will ich ja folgendes. Sagen wir das zu Beginn die 20 neuesten Kommentare ausgelesen werden. In meiner Datenbank sind insgesamt 100 Einträge. Dann wären die Kommentare die ich auslese die Kommentare von 100-80.

    Bei einem Klick auf den Button möchte ich 5 weitere angezeigt bekommen. Also die Kommentare bis 75. Insgesamt 100-75... und das immer so weiter, je nachdem wie oft ich den Button betätige.

    Oder ist das was ich suche, die Erklärung mit Offset und Count ? Wenn ja dann frage ich mich aber wie ich Count ausführe. Aber wenn ich das richtig verstanden habe ist Count nicht dazu da um weitere Inhalte anzuzeigen oder ? :/
     
    Werbung:

    Jetzt registrieren, damit diese Werbung verschwindet
  2. Sempervivum

    Sempervivum Aktives Mitglied

    Registriert seit:
    18 Oktober 2016
    Beiträge:
    423
    Punkte für Erfolge:
    28
    Ich meine ja.
    Zu Beginn Kommentare 100-80 lesen - das wäre Offset 80 und Count 21. Dann 79-75 lesen (80-100 hast Du ja schon) - das wäre Offset 75 und count 5. Count gibt einfach an, wie viele Datensätze ab der Startposition (Offset) gelesen werden. Ist also genau was Du brauchst. Besser ist es allerdings, so zu sortieren, dass Du bei 0 anfangen kannst, dann brauchst Du die Anzahl der Datensätze nicht zu wissen.
     
    lokoroko gefällt das.
  3. lokoroko

    lokoroko Mitglied

    Registriert seit:
    9 Mai 2017
    Beiträge:
    81
    Punkte für Erfolge:
    6
    Okay also ich hab mal ein bisschen rum probiert und dabei sieht der Code jetzt so aus:

    Code (text):
    1. <div class="php_kom">
    2. <?php
    3.  
    4. $z= $_POST["imgurl"];
    5. $test = "http://192.168.178.61/PHPversion/"; // mal gucken
    6.    
    7. $pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    8. $sql = "SELECT user_id FROM `bildtabelle` WHERE path = '$z'";  
    9. foreach ($pdo->query($sql) as $row) {
    10.    
    11.     $sql = "SELECT profilbild, vorname, nachname FROM `adressen` WHERE id = '".$row['user_id']."'";
    12.     foreach ($pdo->query($sql) as $row) {
    13.     echo "<img class='image' src='".$test.$row['profilbild']."'><p class='name'>".$row['vorname']." ".$row['nachname']."</p>";
    14.     }
    15. }
    16.     echo "<hr class='stripe2'> ";
    17.  
    18. ?>
    19.  
    20. <?php
    21.  
    22. $z= $_POST["imgurl"];
    23.  
    24. try {
    25.     $db = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    26.     $sql = "SELECT kommentare.userid, kommentare.k_path, kommentare.eintrag, kommentare.autor, kommentare.datum, DATE_FORMAT(datum,'%d.%m.%Y um %H:%i') AS meindatum FROM `kommentare` WHERE kommentare.k_path = '$z' ORDER BY kommentare.datum DESC LIMIT 5";
    27.  
    28.     $ergebnis = $db->query($sql);
    29.     foreach ($ergebnis as $zeile) {
    30.         printf("<p class='rest'><a class='Kom_name' href=\"mailto:%s\">%s</a> am %s:</p>
    31.           <h3>%s</h3><p style='margin-bottom: 10px'>%s</p><hr noshade=\"noshade\" />",
    32.           urlencode($zeile['']), // da stand mal email
    33.           htmlspecialchars($zeile['autor']),
    34.           htmlspecialchars($zeile['meindatum']),
    35.           htmlspecialchars($zeile['']), // hier stand mal userid
    36.           nl2br(htmlspecialchars($zeile['eintrag']))
    37.           );
    38.     }
    39. } catch (PDOException $e) {
    40.   echo 'Fehler: ' . htmlspecialchars($e->getMessage());
    41. }
    42.  
    43. echo "<button class='button03' onclick='show_more()'>weitere Kommentare laden...</button>";
    44. ?>
    45. <script>
    46.     function show_more() {
    47.         $.get('unbenannt.php', function(data) {
    48.             $('.php_kom').html(data);
    49.         })
    50.     }
    51. </script>
    52. </div>
    Dazu kann man erstmal sagen das es so schon mal funktioniert das zu Beginn 5 Kommentare ausgelesen werden und dann mit dem Button die nächsten 20 Kommentare ausgelesen werden. Doch leider gibt es ein paar entscheidende Probleme.

    1. Ich bin mir nicht sicher ob Offset und Count die richtige Methode für das ganze sind. Zu Beginn werden ja die neuesten 5 Kommentare ausgelesen. Durch Offset und Count gebe ich dann an "LIMIT 0, 20".
    Das bedeutet das von dem ersten Kommentar angefangen, alle folgenden Kommentare bis Kommentar Nr. 20 ausgelesen werden. Sagen wir aber es gibt insgesamt 100 Kommentare und der User möchte immer in 15ner Schritten weitere Kommentare auslesen, dann funktioniert das mit diesem Prinzip nicht da es bei Count nur bis maximal 20 geht :/ verstehst du was ich meine ?

    PS: Ich habe mich übrigens doch dafür entschieden die Einträge komplett zu ersetzen und nicht nur zu ergänzen da es durch das ergänzen dazu kam das die ersten 5 Kommentare beim zweiten mal auch ausgelesen wurden...


    2. Ich habe außerdem ein Problem über der Übergabe von $z, also dem Bildpfad. Über Ajax war es ja relativ einfach gewesen diese Daten zu übergeben doch hier hackt es irgendwie. Ich brauche $z nämlich für die Datei unbenannt.php. Diese sieht nämlich wie folgt aus:

    Code (text):
    1. <?php
    2.  
    3. $z= $z= $_POST["imgurl"];
    4. $test = "http://192.168.178.61/PHPversion/"; // mal gucken
    5.    
    6. $pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    7. $sql = "SELECT user_id FROM `bildtabelle` WHERE path = '$z'";  
    8. foreach ($pdo->query($sql) as $row) {
    9.    
    10.     $sql = "SELECT profilbild, vorname, nachname FROM `adressen` WHERE id = '".$row['user_id']."'";
    11.     foreach ($pdo->query($sql) as $row) {
    12.     echo "<img class='image' src='".$test.$row['profilbild']."'><p class='name'>".$row['vorname']." ".$row['nachname']."</p>";
    13.     }
    14. }
    15.     echo "<hr class='stripe2'> ";
    16.  
    17. ?>
    18.  
    19.  
    20. <?php
    21.  
    22. $z= $z= $_POST["imgurl"];
    23.  
    24. try {
    25.     $db = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    26.     $sql = "SELECT kommentare.userid, kommentare.k_path, kommentare.eintrag, kommentare.autor, kommentare.datum, DATE_FORMAT(datum,'%d.%m.%Y um %H:%i') AS meindatum FROM `kommentare` WHERE kommentare.k_path = '$z' ORDER BY kommentare.datum DESC LIMIT 0, 20";
    27.  
    28.     $ergebnis = $db->query($sql);
    29.     foreach ($ergebnis as $zeile) {
    30.         printf("<p class='rest'><a class='Kom_name' href=\"mailto:%s\">%s</a> am %s:</p>
    31.           <h3>%s</h3><p style='margin-bottom: 10px'>%s</p><hr noshade=\"noshade\" />",
    32.           urlencode($zeile['']), // da stand mal email
    33.           htmlspecialchars($zeile['autor']),
    34.           htmlspecialchars($zeile['meindatum']),
    35.           htmlspecialchars($zeile['']), // hier stand mal userid
    36.           nl2br(htmlspecialchars($zeile['eintrag']))
    37.           );
    38.     }
    39. } catch (PDOException $e) {
    40.   echo 'Fehler: ' . htmlspecialchars($e->getMessage());
    41. }
    42.  
    43. echo "<button class='button03' onclick='show_more()'>weitere Kommentare laden...</button>";
    44.  
    45. ?>
    3. Außerdem hatte ich noch eine Idee bezüglich des Buttons (button03). Ist es möglich zu prüfen ob beim öffnen der Lightbox direkt 5 Kommentare angezeigt werden ? Schließlich brauche ich den Button ja eigentlich nicht anzeigen wenn bspw. erst 2 Kommentare abgegeben wurden. Das heißt ich würde dann über eine if-Abfrage prüfen ob das LIMIT von 5 überhaupt ausgefüllt wurde. Doch leider bin ich mir nicht sicher ob dies so wie ich mir das vorstelle überhaupt möglich ist ?
     
  4. Sempervivum

    Sempervivum Aktives Mitglied

    Registriert seit:
    18 Oktober 2016
    Beiträge:
    423
    Punkte für Erfolge:
    28
    Ich bin ziemlich sicher, dass es mit LIMIT und OFFSET möglich ist, jeweils nur die benötigten Daten nachzuladen. Es wäre jedoch besser, wenn ich eine Testumgebung hätte. Leider habe ich nur geringe Kenntnisse in MySQL, aber es ist doch sicher möglich, mit dem Admin-Panel einen Dump der Tabelle zu erzeugen in SQL-Syntax, so dass ich mir selber solch ein Tabelle aufbauen kann. Kannst Du das versuchen und das SQL hier posten?
    Auch der Button lässt sich so steuern, wie Du es brauchst.
     
  5. m.scatello

    m.scatello Mitglied

    Registriert seit:
    15 Februar 2017
    Beiträge:
    94
    Punkte für Erfolge:
    8
    Natürlich geht das, siehe http://php.net/manual/de/pdostatement.rowcount.php

    Und mit "Select ..... Limit start, anzahl" bekommst du teilweise die Datensätze
     
  6. Sempervivum

    Sempervivum Aktives Mitglied

    Registriert seit:
    18 Oktober 2016
    Beiträge:
    423
    Punkte für Erfolge:
    28
    Ich habe mal eine Testtabelle eingerichtet und ein Demo gemacht. So funktioniert es:
    http://ulrichbangert.de/div/webentwicklung/php/comments.html

    PHP:
    PHP:
    1. <?php
    2. ini_set('display_errors', '1');
    3.  
    4. $z= $_POST["imgurl"];
    5. $start = $_POST["start"];
    6. $count = $_POST["count"];
    7. $count2 = $count + 1;
    8. try {
    9.     $db = new PDO('mysql:host=localhost;dbname=xxx', 'xxx', 'xxx');
    10.     $sql = "SELECT kommentare.userid, kommentare.k_path, kommentare.eintrag, kommentare.autor FROM `kommentare` WHERE kommentare.k_path = '$z' LIMIT $start, $count2";
    11.     $ergebnis = $db->query($sql);
    12.     $countread = 0;
    13.     foreach ($ergebnis as $zeile) {
    14.         if ($countread < $count) {
    15.             printf("<p class='rest'><a class='Kom_name'>%s</a></p>
    16.              <p style='margin-bottom: 10px'>%s</p><hr noshade=\"noshade\" />",
    17.               htmlspecialchars($zeile['autor']),
    18.               nl2br(htmlspecialchars($zeile['eintrag']))
    19.             );
    20.         }
    21.         $countread++;
    22.     }
    23.     if ($countread < $count2) {
    24.         echo '<span class="ende"></span>';
    25.     }
    26. } catch (PDOException $e) {
    27.   echo 'Fehler: ' . htmlspecialchars($e->getMessage());
    28. }
    29. ?>
     
  7. lokoroko

    lokoroko Mitglied

    Registriert seit:
    9 Mai 2017
    Beiträge:
    81
    Punkte für Erfolge:
    6
    Also ich habe mir das jetzt mal angeschaut und habe da ein paar Fragen. Ist dieser Code in der Datei enthalten die ich über den Button aufrufe ?

    Weil ich mich sonst frage woher diese Variablen kommen bzw. die POST Informationen ?

    $start = $_POST["start"];
    $count = $_POST["count"];

    Hast du dir das so gedacht das dieser Part im Code in Version2.php (Der erste Code aus Posting #103) enthalten ist ?
    Code (text):
    1. $z= $_POST["imgurl"];
    2. $start = "0";
    3. $count = "5";
    4.  
    5. try {
    6.     $db = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    7.     $sql = "SELECT kommentare.userid, kommentare.k_path, kommentare.eintrag, kommentare.autor, kommentare.datum, DATE_FORMAT(datum,'%d.%m.%Y um %H:%i') AS meindatum FROM `kommentare` WHERE kommentare.k_path = '$z' ORDER BY kommentare.datum DESC LIMIT $start, $count";
     
  8. lokoroko

    lokoroko Mitglied

    Registriert seit:
    9 Mai 2017
    Beiträge:
    81
    Punkte für Erfolge:
    6
    Das hier ist der Code mit dem es ja anfängt also Version2.php:
    Code (text):
    1. <?php
    2. session_start();
    3. $userid = $_SESSION['userid'];
    4. $username = $_SESSION['username'];
    5. ?>
    6. <html>
    7. <link rel="stylesheet" type="text/css" href="javacss.css">
    8. <link rel="stylesheet" href="font-awesome-4.5.0/css/font-awesome.min.css">
    9. <body>
    10. <div class="all">
    11.  
    12. <div class="php_kom">
    13. <?php
    14.  
    15. $z= $_POST["imgurl"];
    16. $test = "http://192.168.178.61/PHPversion/"; // mal gucken
    17.    
    18. $pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    19. $sql = "SELECT user_id FROM `bildtabelle` WHERE path = '$z'";  
    20. foreach ($pdo->query($sql) as $row) {
    21.    
    22.     $sql = "SELECT profilbild, vorname, nachname FROM `adressen` WHERE id = '".$row['user_id']."'";
    23.     foreach ($pdo->query($sql) as $row) {
    24.     echo "<img class='image' src='".$test.$row['profilbild']."'><p class='name'>".$row['vorname']." ".$row['nachname']."</p>";
    25.     }
    26. }
    27.     echo "<hr class='stripe2'> ";
    28.  
    29. ?>
    30.  
    31. <?php
    32.  
    33. $z= $_POST["imgurl"];
    34.  
    35. try {
    36.     $db = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    37.     $sql = "SELECT kommentare.userid, kommentare.k_path, kommentare.eintrag, kommentare.autor, kommentare.datum, DATE_FORMAT(datum,'%d.%m.%Y um %H:%i') AS meindatum FROM `kommentare` WHERE kommentare.k_path = '$z' ORDER BY kommentare.datum DESC LIMIT 50";
    38.  
    39.     $ergebnis = $db->query($sql);
    40.     foreach ($ergebnis as $zeile) {
    41.         printf("<p class='rest'><a class='Kom_name' href=\"mailto:%s\">%s</a> am %s:</p>
    42.           <h3>%s</h3><p style='margin-bottom: 10px'>%s</p><hr noshade=\"noshade\" />",
    43.           urlencode($zeile['']), // da stand mal email
    44.           htmlspecialchars($zeile['autor']),
    45.           htmlspecialchars($zeile['meindatum']),
    46.           htmlspecialchars($zeile['']), // hier stand mal userid
    47.           nl2br(htmlspecialchars($zeile['eintrag']))
    48.           );
    49.     }
    50. } catch (PDOException $e) {
    51.   echo 'Fehler: ' . htmlspecialchars($e->getMessage());
    52. }
    53.  
    54. echo "<button class='button03' onclick='show_more()'>weitere Kommentare laden...</button>";
    55. ?>
    56. <script>
    57.     function show_more() {
    58.         $.get('unbenannt.php', function(data) {
    59.             $('.php_kom').html(data);
    60.         })
    61.     }
    62. </script>
    63. </div>
    64.  
    65. <hr class="stripe3">
    66. <i id='icon2' class='fa fa-comment-o ' aria-hidden='true'></i>
    67. <?php
    68. $z= $_POST["imgurl"];
    69. $pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    70.  
    71. $statement = $pdo->prepare("SELECT k_path, COUNT(*) AS anzahl FROM kommentare WHERE k_path = '$z'");
    72. $statement->execute();
    73. while($row = $statement->fetch()) {
    74. echo "<p class='anzahl'>".$row['anzahl']."</p>";
    75. }
    76. ?>
    77. <i id='icon' class='fa fa-star-half-o' aria-hidden='true'></i>
    78. <hr class="stripe">
    79. <form method="post" class="formular">
    80. <textarea data-imgurl="<?php echo $z; ?>" cols="35" rows="1" id="kommentarfeld" name="Kommentar" placeholder="Kommentar hinzufügen..."></textarea><br/>
    81.     </form>
    82. <script>
    83. $("#kommentarfeld").on("keydown", function (event) {
    84.             var komm = $("#kommentarfeld").val();
    85.             var imgurl = $("#kommentarfeld").data("imgurl");
    86.             var code = (event.keyCode ? event.keyCode : event.which);
    87.             if (code == 13) {
    88.                 event.preventDefault();
    89.                 console.log("enter pressed");
    90.                 // hier die Aktionen zum Abschicken des Kommentars
    91.                 $.ajax({
    92.             url: "Kommentar_eintragen.php",
    93.             data: {imgurl: imgurl, Kommentar: komm},
    94.             type: "POST",
    95.             success: function(input) {
    96.                 console.log("Success input = " + input); // kann später raus  
    97.                 inside(imgurl);
    98.                // hier möglicherweise eine geeignete Meldung an den
    99.                // Benutzer, dass der Kommentar eingetragen wurde
    100.             },
    101.             error: function() {}
    102.       });
    103.                 $('.formular')[0].reset();
    104.                
    105.                  function inside(imgurl) {
    106.         $.ajax({
    107.             url: "Version2.php",
    108.             data: {imgurl: imgurl},
    109.             type: "POST",
    110.             success: function(input) {
    111.                 console.log("Success input = " + input); // kann später auch raus
    112.                 $("#comments").html(input);
    113.                 // Ausgabe von Version2.php steht unter dem Parameter output zur Verfügung
    114.                 // in deinem Fall wären das die Kommentare
    115.             },
    116.             error: function( /* Parameter entspr Doku */ ) {}
    117.         })
    118.     }
    119.                              
    120.             }
    121.         });  
    122. </script>
    123.  
    124. </div>
    125. </body>
    126. </html>
     
  9. Sempervivum

    Sempervivum Aktives Mitglied

    Registriert seit:
    18 Oktober 2016
    Beiträge:
    423
    Punkte für Erfolge:
    28
    Dieses Version2.php verstehe ich nicht richtig: Der Code enthält ein HTML-Grundgerüst, daher würde ich annehmen, dass es die Masterseite ist. Allerdings finde ich den Code für die Galerie dort nicht. Kannst Du das ein wenig erklären?

    Um das zu verstehen, siehst Du dir am besten den Quelltext der HTML-Datei comments.html an, von der ich dir URL gepostet habe.
     
    lokoroko gefällt das.
  10. lokoroko

    lokoroko Mitglied

    Registriert seit:
    9 Mai 2017
    Beiträge:
    81
    Punkte für Erfolge:
    6
    Achso ne Version2.php war die Datei die dazu dient die Kommentare auszulesen. Diese rufen wir ja über Ajax auf wenn die Lightbox geöffnet wird. Das war der Part hier:

    Code (text):
    1. (function() {
    2.     var idx = 0;
    3.     function comment(relurl) {
    4.         $.ajax({
    5.             url: "Version2.php",
    6.             data: {imgurl: relurl},
    7.             type: "POST",
    8.             success: function(output) {
    9.                 console.log("Success output = " + output); // kann später auch raus
    10.                 $("#comments").html(output);
    11.                 // Ausgabe von Version2.php steht unter dem Parameter output zur Verfügung
    12.                 // in deinem Fall wären das die Kommentare
    13.             },
    14.             error: function( /* Parameter entspr Doku */ ) {}
    15.         })
    16.     }
    17.     $("img.bild").on("click", function() {
    18.         idx = parseInt($(this).data("idx"));
    19.         var relurl = $(this).data("relurl");
    20.         $("#lightbox_overlay img").attr("src", relurl);
    21.         console.log(relurl); //später wieder rausnehmen
    22.         comment(relurl);
    23.  
    24.     });
    25.             $('#left').click(function () {
    26.                 prev_img();
    27.             });
    28.             function prev_img() {
    29.                 var nrimg = $(".gallery").length;
    30.                 if (idx > 0) idx--;
    31.                 else idx = nrimg - 1;
    32.                 var newsrc = $("#img" + idx).attr("src");
    33.                 $('#lightbox_overlay #lightbox_inhalt img#bigpic').attr('src', newsrc);
    34.                 var relurl = $("#img" + idx).data("relurl");
    35.                 comment(relurl);
    36.             }
    37.             $('#right').click(function () {
    38.                 next_img();
    39.             });
    40.             function next_img() {
    41.                 var nrimg = $(".gallery").length;
    42.                 if (idx < nrimg - 1) idx++;
    43.                 else idx = 0;
    44.                 var newsrc = $("#img" + idx).attr("src");
    45.                 $('#lightbox_overlay #lightbox_inhalt img#bigpic').attr('src', newsrc);
    46.                 var relurl = $("#img" + idx).data("relurl");
    47.                 comment(relurl);
    48.             }
    49.         })();  
    50.    
    51. });
    So ich hab mir dann mal den Code aus dem Link angeschaut. Also so ähnlich hab ich mir das gedacht. Das würde bedeuten das dein Code quasi comments.php ist, richtig ?
     
  11. Sempervivum

    Sempervivum Aktives Mitglied

    Registriert seit:
    18 Oktober 2016
    Beiträge:
    423
    Punkte für Erfolge:
    28
    Ja, das hätte ich dazu schreiben sollen, dass das die Datei comments.php ist. Wie Du im HTML siehst, wird diese durch Klick auf den Button "Mehr" aufgerufen.
     
    lokoroko gefällt das.
  12. lokoroko

    lokoroko Mitglied

    Registriert seit:
    9 Mai 2017
    Beiträge:
    81
    Punkte für Erfolge:
    6
    Okay also ich habe dann jetzt schon mal ein wenig rumprobiert und dabei kam das raus. So sieht Version2.php aus, die Datei zum Kommentar auslesen und mit der das ganze beginnt:

    Code (text):
    1. <?php
    2.  
    3. $z= $_POST["imgurl"];
    4.  
    5. try {
    6.     $db = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    7.     $sql = "SELECT kommentare.userid, kommentare.k_path, kommentare.eintrag, kommentare.autor, kommentare.datum, DATE_FORMAT(datum,'%d.%m.%Y um %H:%i') AS meindatum FROM `kommentare` WHERE kommentare.k_path = '$z' ORDER BY kommentare.datum DESC
    8.     LIMIT 5";
    9.  
    10.     $ergebnis = $db->query($sql);
    11.     foreach ($ergebnis as $zeile) {
    12.         printf("<p class='rest'><a class='Kom_name' href=\"mailto:%s\">%s</a> am %s:</p>
    13.           <h3>%s</h3><p style='margin-bottom: 10px'>%s</p><hr noshade=\"noshade\" />",
    14.           urlencode($zeile['']), // da stand mal email
    15.           htmlspecialchars($zeile['autor']),
    16.           htmlspecialchars($zeile['meindatum']),
    17.           htmlspecialchars($zeile['']), // hier stand mal userid
    18.           nl2br(htmlspecialchars($zeile['eintrag']))
    19.           );
    20.     }
    21. } catch (PDOException $e) {
    22.   echo 'Fehler: ' . htmlspecialchars($e->getMessage());
    23. }
    24.  
    25. echo "<button class='button03' >weitere Kommentare laden...</button>";
    26. ?>
    27. <script>
    28.     var start = 0;
    29.         var count = 5;
    30.         function more() {
    31.             console.log(start, count);
    32.             var params = {
    33.                 imgurl: imgurl,
    34.                 start: start,
    35.                 count: count
    36.             };
    37.             $.ajax({
    38.                 url: "unbenannt.php",
    39.                 type: "POST",
    40.                 data: params,
    41.                 success: function (output) {
    42.                     console.log(output);
    43.                     var newcomments = $("<div>" + output + "</div>");
    44.                     start += count;
    45.                    
    46.                     if (newcomments.find("span.ende").length != 0) {
    47.                         $(".button03").hide();
    48.                     }
    49.                     $(".php_kom").append(newcomments);
    50.                 }
    51.             });
    52.         }
    53.         $(".button03").on("click", more);
    54.         more();
    55. </script>
    56. </div>
    Wie du siehts ist das anfängliche LIMIT auf 5 gesetzt.

    So sieht die Datei unbenannt.php aus :
    Code (text):
    1. <?php
    2.  
    3. $z= $_POST["imgurl"];
    4. $start = $_POST["start"];
    5. $count = $_POST["count"];
    6. $count2 = $count + 1;
    7.  
    8. try {
    9.     $db = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    10.     $sql = "SELECT kommentare.userid, kommentare.k_path, kommentare.eintrag, kommentare.autor, kommentare.datum, DATE_FORMAT(datum,'%d.%m.%Y um %H:%i') AS meindatum FROM `kommentare` WHERE kommentare.k_path = '$z' ORDER BY kommentare.datum DESC LIMIT $start, $count2";
    11.     $ergebnis = $db->query($sql);
    12.     $countread = 0;
    13.    
    14.     foreach ($ergebnis as $zeile) {
    15.         if ($countread < $count) {
    16.         printf("<p class='rest'><a class='Kom_name' href=\"mailto:%s\">%s</a> am %s:</p>
    17.           <h3>%s</h3><p style='margin-bottom: 10px'>%s</p><hr noshade=\"noshade\" />",
    18.           urlencode($zeile['']), // da stand mal email
    19.           htmlspecialchars($zeile['autor']),
    20.           htmlspecialchars($zeile['meindatum']),
    21.           htmlspecialchars($zeile['']), // hier stand mal userid
    22.           nl2br(htmlspecialchars($zeile['eintrag']))
    23.           );
    24.         }
    25.         $countread++;
    26.     }
    27.     if ($countread < $count2) {
    28.         echo '<span class="ende"></span>';
    29.     }
    30. } catch (PDOException $e) {
    31.   echo 'Fehler: ' . htmlspecialchars($e->getMessage());
    32. }
    33.  
    34. echo "<button class='button03'>weitere Kommentare laden...</button>";
    35.  
    36. ?>
    Leider funktioniert das ganze so noch nicht :/ Fällt dir ein grober Fehler auf ? Ich habe vielleicht überlegt ob es nicht falsch ist das anfängliche LIMIT auf 5 zu setzen da ja bei Start und Count die Zahlen 0 und 5 stehen aber ich bin mir da leider nicht sicher...
     
  13. m.scatello

    m.scatello Mitglied

    Registriert seit:
    15 Februar 2017
    Beiträge:
    94
    Punkte für Erfolge:
    8
    Könntest du bitte mal die PHP- statt der Code-Tags benutzen?!

    Und was heißt "funktioniert nicht"? Fehlermeldung? Error-Reporting hochdrehen!
     
  14. Sempervivum

    Sempervivum Aktives Mitglied

    Registriert seit:
    18 Oktober 2016
    Beiträge:
    423
    Punkte für Erfolge:
    28
    Folgendes fällt mir auf:
    • Für das Auslesen des ersten Satzes von Kommentaren würde ich auch die Funktion more() verwenden, dann ist der PHP-Code nicht mehrfach vorhanden. Diese ist jedoch kein Fehler sondern nur ein Verbesserungsvorschlag.
    • Der Button wird schon beim Anlegen der Kommentare angelegt, er muss nicht bei jedem Auslesen von Kommentaren neu eingefügt werden. Dann muss er natürlich außerhalb des Containers eingefügt werden, in den die Kommentare eingelesen werden.
    • Zu dem schließenden </div> in Version2.php sehe ich kein öffnendes. Ich nehme an, dass dies der Container ist, in den die Kommentare eingefügt werden. Ist er nicht vorhanden, schlägt das fehl:
      Code (text):
      1. $(".php_kom").append(newcomments);
     
    lokoroko gefällt das.
  15. Sempervivum

    Sempervivum Aktives Mitglied

    Registriert seit:
    18 Oktober 2016
    Beiträge:
    423
    Punkte für Erfolge:
    28
    PS: Kein Problem, mit 5 Datensätzen zu beginnen.

    Wenn ich das richtig sehe, müsste Version2.php so aussehen:
    Code (text):
    1. <div class="php_com">
    2. <!-- Hier wird der Container für die Kommentare definiert.
    3.         Er wird durch Aufrufe von more() gefüllt. -->
    4.  </div>
    5. <button class='button03' >weitere Kommentare laden...</button>
    6. <script>
    7.     var start = 0;
    8.         var count = 5;
    9.         function more() {
    10.             console.log(start, count);
    11.             var params = {
    12.                 imgurl: imgurl,
    13.                 start: start,
    14.                 count: count
    15.             };
    16.             $.ajax({
    17.                 url: "unbenannt.php",
    18.                 type: "POST",
    19.                 data: params,
    20.                 success: function (output) {
    21.                     console.log(output);
    22.                     var newcomments = $("<div>" + output + "</div>");
    23.                     start += count;
    24.                
    25.                     if (newcomments.find("span.ende").length != 0) {
    26.                         $(".button03").hide();
    27.                     }
    28.                     $(".php_kom").append(newcomments);
    29.                 }
    30.             });
    31.         }
    32.         $(".button03").on("click", more);
    33.         more(); // Die ersten 5 Kommentare einlesen
    34. </script>
     
    lokoroko gefällt das.
  16. lokoroko

    lokoroko Mitglied

    Registriert seit:
    9 Mai 2017
    Beiträge:
    81
    Punkte für Erfolge:
    6
    So ich habe dann jetzt weiter ausprobiert. Version2.php sieht nun so aus:

    Code (text):
    1. <?php
    2. session_start();
    3. $userid = $_SESSION['userid'];
    4. $username = $_SESSION['username'];
    5. ?>
    6. <html>
    7. <link rel="stylesheet" type="text/css" href="javacss.css">
    8. <link rel="stylesheet" href="font-awesome-4.5.0/css/font-awesome.min.css">
    9. <body>
    10. <div class="all">
    11.  
    12. <div class="php_kom">
    13. <!-- Hier wird der Container für die Kommentare definiert.
    14.         Er wird durch Aufrufe von more() gefüllt. -->
    15.  </div>
    16. <button class='button03' >weitere Kommentare laden...</button>
    17. <script>
    18.     var start = 0;
    19.         var count = 5;
    20.         function more() {
    21.             console.log(start, count);
    22.             var params = {
    23.                 imgurl: imgurl,
    24.                 start: start,
    25.                 count: count
    26.             };
    27.             $.ajax({
    28.                 url: "unbenannt.php",
    29.                 type: "POST",
    30.                 data: params,
    31.                 success: function (output) {
    32.                     console.log(output);
    33.                     var newcomments = $("<div>" + output + "</div>");
    34.                     start += count;
    35.                
    36.                     if (newcomments.find("span.ende").length != 0) {
    37.                         $(".button03").hide();
    38.                     }
    39.                     $(".php_kom").append(newcomments);
    40.                 }
    41.             });
    42.         }
    43.         $(".button03").on("click", more);
    44.         more();
    45. </script>
    46.  
    47.  
    48. <hr class="stripe3">
    49. <i id='icon2' class='fa fa-comment-o ' aria-hidden='true'></i>
    50. <?php
    51. $z= $_POST["imgurl"];
    52. $pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    53.  
    54. $statement = $pdo->prepare("SELECT k_path, COUNT(*) AS anzahl FROM kommentare WHERE k_path = '$z'");
    55. $statement->execute();
    56. while($row = $statement->fetch()) {
    57. echo "<p class='anzahl'>".$row['anzahl']."</p>";
    58. }
    59. ?>
    60. <i id='icon' class='fa fa-star-half-o' aria-hidden='true'></i>
    61. <hr class="stripe">
    62. <form method="post" class="formular">
    63. <textarea data-imgurl="<?php echo $z; ?>" cols="35" rows="1" id="kommentarfeld" name="Kommentar" placeholder="Kommentar hinzufügen..."></textarea><br/>
    64.     </form>
    65. <script>
    66. $("#kommentarfeld").on("keydown", function (event) {
    67.             var komm = $("#kommentarfeld").val();
    68.             var imgurl = $("#kommentarfeld").data("imgurl");
    69.             var code = (event.keyCode ? event.keyCode : event.which);
    70.             if (code == 13) {
    71.                 event.preventDefault();
    72.                 console.log("enter pressed");
    73.                 // hier die Aktionen zum Abschicken des Kommentars
    74.                 $.ajax({
    75.             url: "Kommentar_eintragen.php",
    76.             data: {imgurl: imgurl, Kommentar: komm},
    77.             type: "POST",
    78.             success: function(input) {
    79.                 console.log("Success input = " + input); // kann später raus  
    80.                 inside(imgurl);
    81.                // hier möglicherweise eine geeignete Meldung an den
    82.                // Benutzer, dass der Kommentar eingetragen wurde
    83.             },
    84.             error: function() {}
    85.       });
    86.                 $('.formular')[0].reset();
    87.                
    88.                  function inside(imgurl) {
    89.         $.ajax({
    90.             url: "Version2.php",
    91.             data: {imgurl: imgurl},
    92.             type: "POST",
    93.             success: function(input) {
    94.                 console.log("Success input = " + input); // kann später auch raus
    95.                 $("#comments").html(input);
    96.                 // Ausgabe von Version2.php steht unter dem Parameter output zur Verfügung
    97.                 // in deinem Fall wären das die Kommentare
    98.             },
    99.             error: function( /* Parameter entspr Doku */ ) {}
    100.         })
    101.     }
    102.                              
    103.             }
    104.         });  
    105. </script>
    106.  
    107. </div>
    108. </body>
    109. </html>
    Das ist jetzt die komplette Datei. Das Problem dabei ist jetzt nur das gar keine Kommentare ausgelesen werden sondern, in der Theorie, erst dann wenn der Button betätigt wurde. Deswegen ist es doch eher schlecht wenn ich nur über die Function gehe oder ?

    So sieht unbenannt.php aus:
    Code (text):
    1. <?php
    2.  
    3. $z= $_POST["imgurl"];
    4. $test = "http://192.168.178.61/PHPversion/"; // mal gucken
    5.  
    6. $pdo = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    7. $sql = "SELECT user_id FROM `bildtabelle` WHERE path = '$z'";
    8. foreach ($pdo->query($sql) as $row) {
    9.  
    10.     $sql = "SELECT profilbild, vorname, nachname FROM `adressen` WHERE id = '".$row['user_id']."'";
    11.     foreach ($pdo->query($sql) as $row) {
    12.     echo "<img class='image' src='".$test.$row['profilbild']."'><p class='name'>".$row['vorname']." ".$row['nachname']."</p>";
    13.     }
    14. }
    15.     echo "<hr class='stripe2'> ";
    16.  
    17. ?>
    18.  
    19. <?php
    20.  
    21. $z= $_POST["imgurl"];
    22. $start = $_POST["start"];
    23. $count = $_POST["count"];
    24. $count2 = $count + 1;
    25.  
    26. try {
    27.     $db = new PDO('mysql:host=localhost;dbname=Datenbank_NEU', 'root', 'lehar456');
    28.     $sql = "SELECT kommentare.userid, kommentare.k_path, kommentare.eintrag, kommentare.autor, kommentare.datum, DATE_FORMAT(datum,'%d.%m.%Y um %H:%i') AS meindatum FROM `kommentare` WHERE kommentare.k_path = '$z' ORDER BY kommentare.datum DESC LIMIT $start, $count2";
    29.     $ergebnis = $db->query($sql);
    30.     $countread = 0;
    31.  
    32.     foreach ($ergebnis as $zeile) {
    33.         if ($countread < $count) {
    34.         printf("<p class='rest'><a class='Kom_name' href=\"mailto:%s\">%s</a> am %s:</p>
    35.           <h3>%s</h3><p style='margin-bottom: 10px'>%s</p><hr noshade=\"noshade\" />",
    36.           urlencode($zeile['']), // da stand mal email
    37.           htmlspecialchars($zeile['autor']),
    38.           htmlspecialchars($zeile['meindatum']),
    39.           htmlspecialchars($zeile['']), // hier stand mal userid
    40.           nl2br(htmlspecialchars($zeile['eintrag']))
    41.           );
    42.         }
    43.         $countread++;
    44.     }
    45.     if ($countread < $count2) {
    46.         echo '<span class="ende"></span>';
    47.     }
    48. } catch (PDOException $e) {
    49.   echo 'Fehler: ' . htmlspecialchars($e->getMessage());
    50. }
    51. ?>
    Es funktioniert leider immer noch nicht. Ich habe mal in die console geschaut um zu sehen was passiert wenn ich auf den Button klicke doch dann kommt folgende Meldung:

    Keine Nachricht (2)
    -0
    -5
     
  17. lokoroko

    lokoroko Mitglied

    Registriert seit:
    9 Mai 2017
    Beiträge:
    81
    Punkte für Erfolge:
    6
    In Version2.php finden sich diese Zeilen:

    Code (text):
    1.  var start = 0;
    2.         var count = 5;
    3.         function more() {
    4.             console.log(start, count);
    5.             var params = {
    6.                 imgurl: imgurl,
    7.                 start: start,
    8.                 count: count
    Wo kriege ich bei diesem Code imgurl her ? Fehlt da eventuell ein "$z= $_POST["imgurl"];" an bestimmter Stelle ?
     
  18. Sempervivum

    Sempervivum Aktives Mitglied

    Registriert seit:
    18 Oktober 2016
    Beiträge:
    423
    Punkte für Erfolge:
    28
    Nein, wenn alles funktioniert, wird hier die Funktion more() sofort aufgerufen und liest die ersten 5 Kommentare ein. So ist es auch in meiner Demo und dort funktioniert das.
    Code (text):
    1.         $(".button03").on("click", more);
    2.         more();
    Da hast Du natürlich Recht, ich war beim Bereinigen etwas großzügig. Dies wird natürlich gebraucht. Dieses imgurl wird in meiner Demo nicht abgedeckt, weil ich keine Galerie hatte.
     
    lokoroko gefällt das.
  19. lokoroko

    lokoroko Mitglied

    Registriert seit:
    9 Mai 2017
    Beiträge:
    81
    Punkte für Erfolge:
    6
    Also ich hab das jetzt soweit dann ausprobiert und Gute Nachrichten: Es funktioniert. Jetzt sind mir nur so ein paar Kleinigkeiten aufgefallen und zwar folgendes.

    Sagen wir es gibt zu einem Bild 10 Kommentare. Dann wird nach dem alle 10 Kommentare ausgelesen wurden, kein Button mehr angezeigt. Kommt jetzt aber ein 11tes Kommentar dazu, wird der Button wieder sichtbar. Wenn man dann auf den Button klickt kommt folgende Fehlermeldung:

    Warning: Invalid argument supplied for foreach() in...

    Die Zeile die angesprochen wird ist in unbenannt.php:

    foreach ($ergebnis as $zeile) {

    Es ist ja ziemlich klar wodurch der Fehler entsteht. Das neu abgegeben Kommentar wird direkt ausgegeben, dadurch wird aber die Anzahl an alten Kommentaren nicht mehr, da die ja ohne hin schon alle ausgelesen wurden. Das heißt an sich müsste der Code irgendwann erkennen wann er quasi das letzte "alte" Kommentar ausgelesen hat. Oder wie würdest du dagegen vorgehen ?
     
  20. m.scatello

    m.scatello Mitglied

    Registriert seit:
    15 Februar 2017
    Beiträge:
    94
    Punkte für Erfolge:
    8
    Überprüfe vor der Schleife $ergebnis