if abfrage in echo

strukturart

Erfahrenes Mitglied
Hallo,

ich möchte gerne innerhalb einer echo Ausgabe ein if Abfrage machen der Code funktioniert jedoch noch nicht, ist er denn vom Syntax richtig?

PHP:
    case ('service'):
        echo '<li><a href="index.php?kategorie=service&seite=rikscha&vorlage=default"'.($last == '-fr' ? :'-fr').'>Rikscha</a></li>';
         

        break;

In Klartext: Ist die der Wert der Variable $last gleich '-fr' dann hänge '-fr' an.
 
Hi,

dir fehlt der if-Teil in dem Ausdruck. Also zwischen ? und :

Wenn du nichts ausgeben willst, dann musst du das ihm auch explizit sagen:
($last == '-fr' ? '' : '-fr')

Der Ausdruck müsste aber, wenn ich deine Annahme richtig verstehe, umgekehrt sein:
($last == '-fr' ? '-fr' : '')

Grüsse,
BK
 
Danke BK für deine Antwort,
funktioniert leider noch nicht habe mal folgendes probiert:

PHP:
echo '<li><a href="index.php?kategorie=service&seite=rikscha&vorlage=default"'.'hello'.'>Rikscha</a></li>';

sollte mir doch eigentlich folgende Link erzeugen:

Code:
<a href="index.php?kategorie=service&seite=rikscha&vorlage=defaulthello'>Rikscha</a>
 
Naja, es wird den Link

Code:
<a href="index.php?kategorie=service&seite=rikscha&vorlage=default"hello>Rikscha</a>

Erzeugen. Da sieht man mal wieder, was String-Verkettung im Code anrichten kann. Wenn es für dich einfacher ist, verwende doch (s)printf:

PHP:
printf('<li><a href="index.php?kategorie=service&seite=rikscha&vorlage=default%s">Rikscha</a></li>', 'hello');

//bzw. 
printf('<li><a href="index.php?kategorie=service&seite=rikscha&vorlage=default%s">Rikscha</a></li>', ($last == '-fr' ? '-fr' : ''));

An der Stelle des %s wird die Rückgabe der tenären Operation eingefügt. Mit einem syntax-highlighting Editor erkennt man den Sinn im Code wesentlich besser.
 
Da fehlt in jedem Fall noch die Behandlung des Kontextwechsels nach HTML (& → &amp;). Zudem ist http_build_query für derlei Aufgaben immer ganz gut geeignet.

- http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

Als Umriss/Vorschlag:

PHP:
<?php

$escape = function ($s) {
    return htmlspecialchars(
        $s,
        ENT_QUOTES | ENT_HTML5 | ENT_DISALLOWED | ENT_SUBSTITUTE,
        'UTF-8'
    );
};

$url = function ($path, array $params = array()) {
    if (0 === count($params)) {
        return $path;
    }

    return $path . '?' . http_build_query($params);
};


$last = '-fr';


printf('<li><a href="%s">Rikscha</a></li>', $escape($url(
    'index.php',
    array(
        'kategorie' => 'service',
        'seite'     => 'rikscha',
        'vorlage'   => 'defaulthello'
    )
)));

printf('<li><a href="%s">Rikscha</a></li>', $escape($url(
    'index.php',
    array(
        'kategorie' => 'service',
        'seite'     => 'rikscha',
        'vorlage'   => 'default' . ('-fr' === $last ? '-fr' : '')
    )
)));

PS: $escape und $url können natürlich auch als echte Funktionen angelegt werden. Ich schreibe das in Beispielen immer so, um nicht den globalen Namensraum zuzumüllen und um anzudeuten, dass diese Funktionen irgendwo sinnvoller eingeordnet werden müssten.
 
Hallo mermshaus,

danke für deinen erweiterten Vorschlag, ist für mich z.Z. aber leider noch eine Nummer zu hoch.

Gruss John
 
Zurück