ilch Forum » Allgemein » HTML, PHP, SQL,... » PHP Fehlersuche

Geschlossen
  1. #1
    User Pic
    LittleBIGFan Mitglied
    Registriert seit
    28.11.2009
    Beiträge
    314
    Beitragswertungen
    2 Beitragspunkte
    Moinsen,

    undzwar versuch ich grad ein Paar Sachen meiner Seite anzupassen, wie ich sie haben will. Aber so wie's aussieht hab ich wohl kein Händchen für PHP weil irgendwie alles was ich amchen will in die Hose geht.

    Das hier ist ein Auszug aus meiner Box lastnews.php. Mit substr verhidnere ich, dass die Newstitel länger als eine Zeile gehen. Jetzt möchte ich gerne, im Falle, dass der Newstitel länger als 42 Zeichen ist, diesen nicht nur bei 42 Zeichen stoppen lassen, sondern auch "..." hintendran.

    Das möchte ich aber bei den Titeln die kürzer als 42 Zeichen sind nicht, da diese ja vollständig sind. Deshalb hab ich ein if eingebaut, was aber nicht funktionieren will. Hab alles probiert, es will nicht gehen, deshalb poste ich es hier. Ich vermute mal das isn Fehler den jeder PHP Könner auf den ersten Blick sieht.. ich aber nich :/ Kann mir jemand zeigen wie man es zum funktioneiren bringt ?

    if (strlen($row->news_title)>42) {
    	$next = '...';
    }
    else { $next = ' '; }
    
    while ($row = db_fetch_object($erg)) {
    	echo '<li><a href="index.php?news-'.$row->news_id.'">'.substr($row->news_title,0,42).''.$next.'</a></li>';


    (das ist nur ein Auszug! Alles funktioniert, außer die if Anweisung. Völlig egal wie lang der Titel ist, es kommt immer ein Leerzeichen


    Zuletzt modifiziert von LittleBIGFan am 25.04.2011 - 02:12:09
    externer Link Guardians of the Relic
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Sunshine Live Mitglied
    Registriert seit
    03.06.2009
    Beiträge
    1.029
    Beitragswertungen
    109 Beitragspunkte
    Sowie hier bei uns meinst du es doch oder?
    Nur das die grenze bei uns 30 ist
    externer Link


    Wen du es so meinst kann ich dir auch gern den code geben lachen
    <?php
    #   Copyright by Manuel Staechele
    #   Support www.ilch.de
    #   Modded by Mairu für News Extended
     
    defined ('main') or die ( 'no direct access' );
     
    $umbruch = 30; # Laenge des Newstitel
    $news_groups = 0;
     
    foreach ($_SESSION['authgrp'] as $id => $bool){
        $news_groups = $news_groups | pow(2, $id);
    }
     
     
    $tn_id = intval(@db_result($news_opts = db_query("SELECT v1, v2 FROM prefix_allg WHERE k = 'news' LIMIT 1"),0,0));
    $abf = 'SELECT *
           FROM prefix_news
           WHERE (((' . pow(2, abs($_SESSION['authright'])) . " | news_recht) = news_recht) OR
               (news_groups != 0 AND ((news_groups ^ $news_groups) != (news_groups | $news_groups)))) AND `show` > 0 AND `show` <= UNIX_TIMESTAMP() AND news_id != '.$tn_id.' AND archiv != 1 AND (endtime IS NULL OR endtime > UNIX_TIMESTAMP())
                 ORDER BY news_time DESC
           LIMIT 0,6";
    $erg = db_query($abf);
    echo '<table>';
    while ($row = db_fetch_object($erg)) {
     
    if (strlen($row->news_title)>$umbruch) {$newstitel = substr($row->news_title,0,($umbruch-3))."...";} ELSE {$newstitel = $row->news_title;}
       
    echo '<tr><td style="color:#FF8000;" valign="top"><b> &raquo; </b></td><td><a style="color:#FF8000;" class="box" href="index.php?news-'.$row->news_id.'">'.$newstitel.'</a></td></tr>';
    }
    echo '</table>';
     
    ?>



    Zuletzt modifiziert von Sunshine Live am 25.04.2011 - 02:23:08


    Zuletzt modifiziert von Sunshine Live am 25.04.2011 - 02:24:22
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    dastiii Mitglied
    Registriert seit
    27.12.2005
    Beiträge
    2.354
    Beitragswertungen
    84 Beitragspunkte
    Nimm doch einfach den Code aus der lastforum.php

    '.((strlen($row->news_title)<43) ? $row->news_title : substr($row->news_title,0,40).'...').'


    Achso, sehe gerade deinen Fehler. Der if-else-Block muss in die while-Schleife hinein, sonst kann das ja nicht gehen, da $row->news_title etc. ja überhaupt nicht definiert ist zu diesem Zeitpunkt.

    Also in deinem Fall:

    while ($row = db_fetch_object($erg)) {
        echo '<li><a href="index.php?news-'.$row->news_id.'">'.((strlen($row->news_title)<43) ? $row->news_title : substr($row->news_title,0,40).'...').'</a></li>';


    Es handelt sich dabei um einen ternären Operator:
    externer Link

    Zuletzt modifiziert von DaStIaC am 25.04.2011 - 02:29:34
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    LittleBIGFan Mitglied
    Registriert seit
    28.11.2009
    Beiträge
    314
    Beitragswertungen
    2 Beitragspunkte
    Wenn ich es aus der lastforum.php übernehmen würde, hätt ich immer ein ... dahinter, nicht nur bei zu langen News. zwinker

    Aber wenn ich den if-else-Block in das while packe, funktioniert es! Danke!!
    externer Link Guardians of the Relic
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    dastiii Mitglied
    Registriert seit
    27.12.2005
    Beiträge
    2.354
    Beitragswertungen
    84 Beitragspunkte
    Nein hättest du nicht, keine Ahnung was du falsch machst.

    Das aus der lastforum ist GENAU das gleiche wie deine Konstruktion, nur eben als ternärer Operator.
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    LittleBIGFan Mitglied
    Registriert seit
    28.11.2009
    Beiträge
    314
    Beitragswertungen
    2 Beitragspunkte
    puh keine ahnung wenn ich das aus der lastforum.php übernehme hat jede news ... hintendran egal wie lang. komsich, aber egal es passt ja so.
    externer Link Guardians of the Relic
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    dastiii Mitglied
    Registriert seit
    27.12.2005
    Beiträge
    2.354
    Beitragswertungen
    84 Beitragspunkte
    Vielleicht hast du die Zeichenanzahl vergessen zu verändern, aber ist ja auch egal, jo.
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten