If mit 2 Bedingungen?

nordi

Erfahrenes Mitglied
Hallo, ich habe eine Frage zu eine IF-Abfrage. Folgende Problemstellung: Ich lese Daten aus einer Datenbanktabelle ('komplett'). Zudem wird in der gleichen Tabelle der Posten 'artikel' abgefragt. Der Posten 'artikel' enthält immer Text aber 'komplett' ist nur optional. Ich frage die beide Posten so ab:

PHP:
@mysql_connect($dbhost,$dbuser,$dbpass);
@mysql_select_db($dbtable);

$sql = "SELECT * FROM $news ORDER BY id DESC LIMIT 5";
$result = @mysql_query($sql);

function parseBBCode2HTML( $bb )
{
$bb = preg_replace('/\[b\](.*?)\[\/b\]/', '<strong>$1</strong>', $bb);
$bb = preg_replace("/\'''(.*?)\'''/", '<strong>$1</strong>', $bb);
// $bb = preg_replace('/>>>/', ' [mehr..]', $bb); //<- ?!
$bb = preg_replace('/\[u\](.*?)\[\/u\]/', '<u>$1</u>', $bb);
$bb = preg_replace('/\[i\](.*?)\[\/i\]/', '<i>$1</i>', $bb);
$bb = preg_replace('/\[url=([^ ]+).*\](.*)\[\/url\]/', '<a href="$1" target="_blank">$2</a>', $bb);

    $bb = preg_replace('/\n/', "<br/>\n", $bb);

    return $bb;

}

while ($row = mysql_fetch_object($result))
{
	
// CODE FORMATIERUNGEN - BB CODE UND UFT-8 FORMATIERUNG
$titel=utf8_encode($row->titel);
$date=strtotime($row->datim);
$final_date=date("j. F Y, g:i", $date);

//BB CODE PARSER
$bbcode = parseBBCode2HTML( $row->artikel );
$artikel=utf8_encode($bbcode);

echo "<p class=\"header\">$titel</p>";
echo "<span class=\"datum\">Verfasst am: $final_date Uhr</span>";
echo "<p>$artikel</p>";

if (!empty($row->komplett))
{
	
echo "<span class=\"trigger\"><a href=\"#\">mehr..</a></span>";
echo "<div class=\"toggle_container\">";
echo "<div class=\"block\">";
echo "<p>$text</p>";
echo "</div>";
echo "</div>";
	}

Das klappt auch soweit. Hier jetzt das "trickreiche". Manchmal kommt im Text von 'artikel' die Zeichenfolge >>> vor. Der Text der nach dieser Zeichenfolge kommt, soll wie 'komplett' dargestellt werden. Also >>> soll durch "mehr..." ersetzt werden und durch einen Klick eingeblendet werden. Wie ihr bei der Funktion parseBBCode2HTML seht, will ich >>> ersetzen lassen, weiß dann aber nicht weiter, wie ich den Text danach in unteren Container "toggle_container" setzen lassen kann. Bin wie immer für Tipps und Antworten denkbar!
 
Bin mir nicht sicher ob ich dich richtig verstehe, aber kannst du nicht im Text mit strpos die Position von ">>>" ermitteln und dann bildest du mit substr den entsprechenden Teil des Textes?
 
Hi, danke schon mal für den Tipp. Bin momentan unterwegs und kann es schwer testen. Habe mir aber gerade mal den Link durchgelesen. strpos versteh ich, aber wie setze ich das um, dass es im unteren Container "toggle_container" eingesetzt wird? Muss ich die IF-Abfrage if (!empty($row->komplett)) mit substr erweitern?

PHP:
while ($row = mysql_fetch_object($result)) 
{ 
     
// CODE FORMATIERUNGEN - BB CODE UND UFT-8 FORMATIERUNG 
$titel=utf8_encode($row->titel); 
$date=strtotime($row->datim); 
$final_date=date("j. F Y, g:i", $date); 

// >>> Kram

$meinString = $row->artikel;
$findMich   = '>>>';
$pos = strpos($meinString, $findMich);

// Weiter weiß ich nicht ;)


//BB CODE PARSER 
$bbcode = parseBBCode2HTML( $row->artikel ); 
$artikel=utf8_encode($bbcode); 

echo "<p class=\"header\">$titel</p>"; 
echo "<span class=\"datum\">Verfasst am: $final_date Uhr</span>"; 
echo "<p>$artikel</p>"; 

if (!empty($row->komplett)) // erweitern?
{ 
     
echo "<span class=\"trigger\"><a href=\"#\">mehr..</a></span>"; 
echo "<div class=\"toggle_container\">"; 
echo "<div class=\"block\">"; 
echo "<p>$text</p>"; 
echo "</div>"; 
echo "</div>"; 
    }
 
Ich würde den gesamten Textblock so wie im Beispiel schon vorher aufteilen und dann die einzelnen Teile an der jeweiligen Stelle ausgeben.

PHP:
<?php
$gesamt = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam >>> nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";

$pos = strpos($gesamt, ">>>");
$teil1 = substr($gesamt, 0, $pos);
$teil2 = substr($gesamt, ($pos + 3)); // + 3 Zeichen für die ">>>" selbst

echo "<b>Teil 1:</b><br />" .trim($teil1);
echo "<br /><br />";
echo "<b>Teil 2:</b><br />" .trim($teil2);
?>
 
Zuletzt bearbeitet:
Ist jetzt blöd, dass ich es selber nicht austesten kann, ich werde es aber heute Abend mal ausprobieren. Danke für den Tipp!

PHP:
$pos = strpos($row->artikel, ">>>"); 
$teil1 = substr($row->artikel, 0, $pos); 
$teil2 = substr($row->artikel, ($pos + 3)); 

echo "<p class=\"header\">$titel</p>";  
echo "<span class=\"datum\">Verfasst am: $final_date Uhr</span>";  
echo "<p>".trim($teil1)."</p>";  

if ($teil2 == true)
{  
      
echo "<span class=\"trigger\"><a href=\"#\">mehr..</a></span>";  
echo "<div class=\"toggle_container\">";  
echo "<div class=\"block\">";  
echo "<p>".trim($teil2)."</p>";  
echo "</div>";  
echo "</div>";  
    }

Ich verzichte ja bei diesem Code komplett auf den Datenbankposten 'komplett'. Könnte ich die beiden auch kombinieren? Eventuell mit zwei IF-Abfragen? Oder kann man das in eine IF-Abfrage stecken?

PHP:
if ($teil2 == true)
{  
      
echo "<span class=\"trigger\"><a href=\"#\">mehr..</a></span>";  
echo "<div class=\"toggle_container\">";  
echo "<div class=\"block\">";  
echo "<p>".trim($teil2)."</p>";  
echo "</div>";  
echo "</div>";  
    }
else if (!empty($row->komplett))
{  
      
echo "<span class=\"trigger\"><a href=\"#\">mehr..</a></span>";  
echo "<div class=\"toggle_container\">";  
echo "<div class=\"block\">";  
echo "<p>$text</p>";  
echo "</div>";  
echo "</div>";  
    }
 
Denke mal das du es so prüfen musst:

PHP:
//Entweder $pos hat einen Wert, dann ist ">>>" enthalten
if ($pos) {
echo "<p class=\"header\">Titel</p>";
echo "<span class=\"datum\">Verfasst am: 22.10 Uhr</span>";
echo "<p>".trim($teil1)."</p>";

echo "<span class=\"trigger\"><a href=\"#\">mehr..</a></span>";
echo "<div class=\"toggle_container\">";
echo "<div class=\"block\">";
echo "<p>".trim($teil2)."</p>";
echo "</div>";
echo "</div>";
// sonst Text komplett ausgeben
} else {
echo "<p class=\"header\">Titel</p>";
echo "<span class=\"datum\">Verfasst am: 22.10 Uhr</span>";
echo "<p>".$gesamt."</p>";
}
 
Zurück