Claudia: Nur bestimme Anzahl der Wöter anziegen?

Hi,

hab da ein Problem, ich lass meine Texte aus einer Datenbank auslesen. Jetzt wollte ich eine erweiterung machen, dass ich nur die ersten angenommen 5 Wörter ausgeben lasse und dann kommt >>< mehr und dann geht ein PopUp auf. Das mit dem PopUp das geht schon und auch der Link geht nur das mit den 50 Wörter geht nicht.

hier mal der Code wie ich das mache:

<?php // aus der DB auslesen

$sql = "SELECT
id,
SUBSTRING_INDEX(inhalt, ' ', 50)
FROM
Test
";
$return = mysql_query($sql) OR die(mysql_error());

?>

<?php
while($data = mysql_fetch_assoc($return))
{
?>
</p>
  <blockquote>
    <p><?php echo $data['inhalt']; ?><br>
<a href="details.php?id=<?php echo $data['id']; ?>" onclick="window.open('details.php?id=<? echo $data['id']; ?>', 'confirm', 'width=800, height=600'); return false;">..Mehr Lesen</a>    </p>
  </blockquote>
</body>
</html>
<?php
}
?>

Gruß Claudia

  1. Hi,

    hab da ein Problem, ich lass meine Texte aus einer Datenbank auslesen. Jetzt wollte ich eine erweiterung machen, dass ich nur die ersten angenommen 5 Wörter ausgeben lasse und dann kommt >>< mehr und dann geht ein PopUp auf. Das mit dem PopUp das geht schon und auch der Link geht nur das mit den 50 Wörter geht nicht.

    Und was heißt "geht nicht"?
    Fehlermeldung?

    <?php
    while($data = mysql_fetch_assoc($return))
    {
    ?>

    [...]

    </body>
    </html>
    <?php
    }
    ?>

    Wenn Du mehrere Datensätze aus der Datenbank ausliest, hast Du dann auch mehrfach </body></html> im Dokument stehen, was natürlich unsinnig ist.
    Also die beiden tags raus aus der Schleife!

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo Andreas,

      Und was heißt "geht nicht"?
      Fehlermeldung?

      Na ja das schlimme ist ja es kommen keine Fehlermeldungen es sieht nur so aus:

      ..Mehr Lesen

      Aber es müssten doch vor dem mehr lesen noch die 50 Wörter stehen. Und das zeigt er mich nicht an :-(

      Wenn Du mehrere Datensätze aus der Datenbank ausliest, hast Du dann auch mehrfach </body></html> im Dokument stehen, was natürlich unsinnig ist.
      Also die beiden tags raus aus der Schleife!

      Hab das gerade mal geamcht das habe ich vorhin ganz vergessen. Danke für den Tipp :-)

      Gruß Claudia

  2. Hallo Claudia!

    Das mit dem PopUp das geht schon und auch der Link geht nur das mit den 50 Wörter geht nicht.

    Müssen es wirklich 50 Wörter sein?
    Nimm doch einfach 250 oder 500 Zeichen oder sowas, das sollte für Deinen Zweck doch auch genügen.

    MfG
    Götz

    --
    Losung für Donnerstag, 30. Dezember 2004
    Gott wird alle Werke vor Gericht bringen, alles, was verborgen ist, es sei gut oder böse. (Prediger 12,14)
    Darin ist erschienen die Liebe Gottes unter uns, dass Gott seinen eingebornen Sohn gesandt hat in die Welt, damit wir durch ihn leben sollen. (1. Johannes 4,9)
    (Losungslink)
    1. Hallo Götz,

      Das mit dem PopUp das geht schon und auch der Link geht nur das mit den 50 Wörter geht nicht.

      Müssen es wirklich 50 Wörter sein?
      Nimm doch einfach 250 oder 500 Zeichen oder sowas, das sollte für Deinen Zweck doch auch genügen.

      Nöö es müssen nicht 50 Wörter sein du hast RECHT es könnte auch 250 Zeichen sein oder so. Wie müsste ich das dann machen. Kannst du mir das mal eben sagen ?

      Gruß Claudia

      PS: Mich wurde dennoch interesieren warum das so nicht geht wie ich das geamcht habe....

      1. Hi,

        Nöö es müssen nicht 50 Wörter sein du hast RECHT es könnte auch 250 Zeichen sein oder so. Wie müsste ich das dann machen. Kannst du mir das mal eben sagen ?

        REGEX!

        Bis denne

        Botix

        1. Hallo Botix,

          REGEX!

          Hmm was meinst du denn mit dem Wort. Heißt so der Befehl, dass ich nur 250 Zeichen auslesen kann ? Wenn ja wie muss den denn anwenden? Den habe ich wirklich noch nie gehört :-(

          Gruß Claudia

          1. Hi Claudia,

            Hmm was meinst du denn mit dem Wort.

            Reguläre Ausdrücke (ja ich weiss is nen bissl tricky).
            Guckst du hier: http://de3.php.net/manual/de/ref.regex.php

            »»Heißt so der Befehl, dass ich nur 250 Zeichen auslesen kann?

            ja/nein kann man damit auch...

            Wenn du nur 250 Zeichen anzeigen möchtest würde ich das lieber in das SQL-Statement reinschreiben. Irgendwie so ..[LEFT(bla,250)]

            Bis denne

            Botix

      2. Hallo Claudia!

        Nöö es müssen nicht 50 Wörter sein du hast RECHT es könnte auch 250 Zeichen sein oder so. Wie müsste ich das dann machen. Kannst du mir das mal eben sagen ?

        Ganz einfach mit SUBSTRING() (bei Dir wohl z.B. SUBSTRING(feldname, 0, $laenge), wobei ich nicht weiß ob MySQL hier bei 0 oder 1 anfängt zu zählen).
        Siehe auch MySQL Manual | 12.3 String Functions.

        PS: Mich wurde dennoch interesieren warum das so nicht geht wie ich das geamcht habe....

        Das kann ich so nicht sagen, dafür wäre es praktisch mehr über die auftretenden Fehler zu wissen.
        Also was sagt MySQL zu Deiner Anfrage, gibts einen Fehler oder nicht?
        Was sagt PHP genau? Setz dafür am besten das error_reporting auf E_ALL.

        MfG
        Götz

        --
        Losung für Donnerstag, 30. Dezember 2004
        Gott wird alle Werke vor Gericht bringen, alles, was verborgen ist, es sei gut oder böse. (Prediger 12,14)
        Darin ist erschienen die Liebe Gottes unter uns, dass Gott seinen eingebornen Sohn gesandt hat in die Welt, damit wir durch ihn leben sollen. (1. Johannes 4,9)
        (Losungslink)
        1. Hallo Götz,

          Das kann ich so nicht sagen, dafür wäre es praktisch mehr über die auftretenden Fehler zu wissen.
          Also was sagt MySQL zu Deiner Anfrage, gibts einen Fehler oder nicht?
          Was sagt PHP genau? Setz dafür am besten das error_reporting auf E_ALL.

          das ist ja gerade das Problem, es kommt keine Fehlermeldung. Es geht auch der Link das sieht also so aus:

          .... mehr lesen

          aber davor müssten doch noch die 50 Wörter stehen bzw, jetzt dann die 250 Zeichen das verstehe ich einfach nicht warum er mir das nicht ausgibt :-(

          Gruß Claudia

          1. Hallo Claudia!

            das ist ja gerade das Problem, es kommt keine Fehlermeldung. Es geht auch der Link das sieht also so aus:

            Naja, es kommt keine Fehlermeldung, weil Du keine anzeigen läßt.
            Mach mal am Anfang des Skripts:
            error_reporting(E_ALL);
            Siehe auch PHP Manual: Errors and Logging: error_reporting().
            Bei der SQL-Abfrage an sich scheint ja kein Fehler aufzutreten, oder sind auch die ids in den Links nicht korrekt gesetzt?
            Laß Dir doch einfach den $data-Array mit var_dump() oder so noch zusätzlich mal ausgeben. Vielleicht fällt Dir da ja irgendwas auf (siehe auch PHP Manual: Variables: var_dump()).

            MfG
            Götz

            --
            Losung für Donnerstag, 30. Dezember 2004
            Gott wird alle Werke vor Gericht bringen, alles, was verborgen ist, es sei gut oder böse. (Prediger 12,14)
            Darin ist erschienen die Liebe Gottes unter uns, dass Gott seinen eingebornen Sohn gesandt hat in die Welt, damit wir durch ihn leben sollen. (1. Johannes 4,9)
            (Losungslink)
            1. Hallo Götz,

              Naja, es kommt keine Fehlermeldung, weil Du keine anzeigen läßt.
              Mach mal am Anfang des Skripts:
              error_reporting(E_ALL);

              So hab den error Befehl mal eingefügt und das kommt jetzt. Nur ich versthe nicht ganz genau was der damit meint :-(

              Notice: Undefined index: inhalt in /srv/www/htdocs/web123/html/claudia/test/test_auslesen.php on line 41

              ..Mehr Lesen

              Notice: Undefined index: inhalt in /srv/www/htdocs/web123/html/claudia/test/test_auslesen.php on line 41

              ..Mehr Lesen

              Notice: Undefined index: inhalt in /srv/www/htdocs/web123/html/claudia/test/test_auslesen.php on line 41

              ..Mehr Lesen

              Gruß Claudia

              1. Hallo Claudia!

                So hab den error Befehl mal eingefügt und das kommt jetzt. Nur ich versthe nicht ganz genau was der damit meint :-(

                Notice: Undefined index: inhalt in /srv/www/htdocs/web123/html/claudia/test/test_auslesen.php on line 41

                Das dachte ich mir schon.
                Wie heißt denn Dein Feld mit den Inhalten in der Datenbank? - Wobei, mir fällt grad auf woran es vermutlich hängt:
                Dein SQL-Befehl ist noch falsch. Ändere ihn mal auf
                $sql = "SELECT
                id,
                SUBSTRING(inhalt, 1, 250) as inhalt_
                FROM
                Test";

                Und gib dann $data['inhalt_'] aus.
                Das sollte klappen.

                Das Problem ist, daß Du dem Ergebnis von Deiner SUBSTRING-Operation noch keinen "Namen" zugeordnet hast, und inhalt selbst nicht selektiert wurde.

                MfG
                Götz

                --
                Losung für Donnerstag, 30. Dezember 2004
                Gott wird alle Werke vor Gericht bringen, alles, was verborgen ist, es sei gut oder böse. (Prediger 12,14)
                Darin ist erschienen die Liebe Gottes unter uns, dass Gott seinen eingebornen Sohn gesandt hat in die Welt, damit wir durch ihn leben sollen. (1. Johannes 4,9)
                (Losungslink)
                1. Hallo Götz,

                  Das dachte ich mir schon.
                  Wie heißt denn Dein Feld mit den Inhalten in der Datenbank? - Wobei, mir fällt grad auf woran es vermutlich hängt:
                  Dein SQL-Befehl ist noch falsch. Ändere ihn mal auf
                  $sql = "SELECT
                  id,
                  SUBSTRING(inhalt, 1, 250) as inhalt_
                  FROM
                  Test";

                  Und gib dann $data['inhalt_'] aus.
                  Das sollte klappen.

                  Das Problem ist, daß Du dem Ergebnis von Deiner SUBSTRING-Operation noch keinen "Namen" zugeordnet hast, und inhalt selbst nicht selektiert wurde.

                  Hey cool das geht so. Kansnt du mir jetzt mal wenn du Zeit hast das erklären was ich hier falsch gemacht habe, dass ich das nächste mal nicht wieder mache. So wie du das gerade geschrieben habe, habe ich das leider nicht so ganz verstanden.

                  Liebe Grüße,
                  Claudia

                  1. Hallo Claudia!

                    SUBSTRING(inhalt, 1, 250) as inhalt_

                    Kansnt du mir jetzt mal wenn du Zeit hast das erklären was ich hier falsch gemacht habe, dass ich das nächste mal nicht wieder mache.

                    Also, das Problem war, daß die MySQL-Funktion ihr Ergebnis grundsätzlich nicht ausgibt. Will man auf das Ergebnis so einer Funktion wie hier z.B. SUBSTRING zugreifen, muß man natürlich auch dafür sorgen, daß das Ergebnis von der Datenbank als "Feld" zurückgegeben wird.

                    Und genau das kann man mittels "FUNKTION AS feldname" machen.
                    Das steht ja in einem SELECT-Statement, zum besseren Verständnis erweitere ich das  Beispiel also zu einem vollständigen SELECT.
                    Unser Befehl lautet dann: SELECT SUBSTRING(bla, 1, 42) AS blub FROM muh.
                    In diesem Befehl bezeichnet bla das Feld, von dem wir einen Teilstring haben wollen. Die Datenbank aus der wir das Feld holen heißt muh. Doch das wirklich interessante ist blub, denn durch "AS blub" legen wir fest, daß das Ergebnis von SUBSTRING(bla, 1, 42) uns von der Datenbank mit dem Bezeichner blub zurückgegeben werden soll.
                    Man kann den Befehl auch direkt übersetzen, was dann in etwa folgendes ergibt: WÄHLE DEN_TEILSTRING(des Feldes bla, ab Position 1, mit Länge 42 Zeichen) ALS blub AUS DER DATENBANK muh AUS.
                    Du gibst dem Ergebnis der Operation die Du ausführst also einen Bezeichner, auf den Du dann via PHP wie auf jedes andere Feld das Du selektierst zugreifen kannst (AS kann man auch auf einfache Felder anwenden, um sie anders zu benennen, oder auf Datenbanken usw. - doch dazu schreib ich mal nichts mehr, ich will Dich ja nicht verwirren).

                    Ich hoffe, das war halbwegs verständlich und technisch nicht zu unpräzise ;)

                    MfG
                    Götz

                    --
                    Losung für Donnerstag, 30. Dezember 2004
                    Gott wird alle Werke vor Gericht bringen, alles, was verborgen ist, es sei gut oder böse. (Prediger 12,14)
                    Darin ist erschienen die Liebe Gottes unter uns, dass Gott seinen eingebornen Sohn gesandt hat in die Welt, damit wir durch ihn leben sollen. (1. Johannes 4,9)
                    (Losungslink)
                    1. Hallo Götz

                      Ich hoffe, das war halbwegs verständlich und technisch nicht zu unpräzise ;)

                      Außer, dass du überall da, wo eine Tabelle gemeint war, von Datenbank sprachst.
                      Ansonsten eine gute, ausführliche Abhandlung für den Einsteiger.

                      Tschö, Auge

                      --
                      Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
                      (Victor Hugo)
                      1. Hallo Auge!

                        Außer, dass du überall da, wo eine Tabelle gemeint war, von Datenbank sprachst.

                        Au stimmt, da hab ich mich vertan, vor lauter Datenbank-Problem ;)
                        Danke für den Hinweis.

                        MfG
                        Götz

                        --
                        Losung für Freitag, 31. Dezember 2004
                        Er dachte an uns, als wir unterdrückt waren, denn seine Güte währet ewiglich. (Psalm 136,23)
                        Wenn euch nun der Sohn frei macht, so seid ihr wirklich frei. (Johannes 8,36)
                        (Losungslink)
  3. Hall an alle,

    OK das Problem ist behoben. Danke für die Hilfe. Ich hoffe das ich heute kein Problem mehr habe.

    Liebe Grüße,
    Claudia