Hallo,

Ik return een contact formulier en wil een if conditie toevoegen, om het veld Onderwerp wel/niet te tonen. Ik probeer dit:


$email_form = '<form id="form" method="post">

	'. if(mijn_setting == "true") : .'
		<label for="onderwerp">Onderwerp</label>
		<input type="text" id="onderwerp" value="'.$value.'">
	'. endif; .'

	<input type="submit" value="Verstuur">
</form>';

return $email_form;


Maar dit werkt niet. Ook niet als ik de open/closing tags van PHP gebruik.
Wie kan me doorgeven hoe ik dit wél werkend kan krijgen?

Guido
Onderbreek je string met een ; dan kan je normaal een if-else gebruiken.
Ternary operator:
<?php
$email_form = '<form id="form" method="post">

    '. (mijn_setting == "true" ? '
        <label for="onderwerp">Onderwerp</label>
        <input type="text" id="onderwerp" value="'.$value.'">
    ' : '') .'

    <input type="submit" value="Verstuur">
</form>';
?>


Of (wel zo overzichtelijk):
<?php
$email_form = '<form id="form" method="post">';

if(mijn_setting == "true") $email_form .= '
        <label for="onderwerp">Onderwerp</label>
        <input type="text" id="onderwerp" value="'.$value.'">
    ';

$email_form .= '
    <input type="submit" value="Verstuur">
</form>';
?>
Is mijn_setting een constante?
En zit daar tekst in?

Zo gebruik je het in ieder geval wel.
Onthoud wel dat je "true" hier als een string wordt behandeld. Ik weet niet af dat de bedoeling is, maar ik zeg het maar even.
Nou ja, of $mijn_setting nou true (boolean) of "true" (string) is, het resultaat is hetzelfde ("waar"). Dito met false/"false" ("niet waar"), dus "what could possibly go wrong" ;-)
Rob Doemaarwat op 13/07/2019 22:55:20

Nou ja, of $mijn_setting nou true (boolean) of "true" (string) is, het resultaat is hetzelfde ("waar"). Dito met false/"false" ("niet waar"), dus "what could possibly go wrong" ;-)


Er is geen $mijn_setting maar mijn_setting.
true (boolean) of "true" (string) zijn compleet verschillend.
het resultaat is hetzelfde .... toevallig ??

"what could possibly go wrong"

Altijd een boolean als een boolean gebruiken en niet als string.
- SanThe - op 13/07/2019 23:14:46

Er is geen $mijn_setting maar mijn_setting.

O, dan is het een constante*.
- SanThe - op 13/07/2019 23:14:46

het resultaat is hetzelfde .... toevallig ??

Toevallig nu wel. Natuurlijk is het wachten tot het niet goed gaat ("false" is "waar" in PHP).
- SanThe - op 13/07/2019 23:14:46

Altijd een boolean als een boolean gebruiken en niet als string.

Ja. En altijd lachen als iemand een smiley achter een zin zet. Niet zo serieus, kom op - het is weekend.

* Ja, normaal gebruik je daarvoor HOOFDLETTERS - weet ik.
Dank allen!

In mijn geval is true een string, vandaar "true".

Mijn formulier heeft meerdere inputs die allemaal in dezelfde string (zo heet dat toch?) zijn opgenomen, en die ik dus return. Maar zoals Rob aangeeft is het misschien handiger om dit op te delen.

Fijne zondag!

Guido
Rob Doemaarwat op 13/07/2019 23:33:28

En altijd lachen als iemand een smiley achter een zin zet. Niet zo serieus, kom op - het is weekend.


Haha, had ik niet gezien.
Het begint al laat te worden.

Ik vond het al zo'n vreemd antwoord van jou.
Persoonlijk ben ik geen voorstander van het aan elkaar rijgen van een hele hoop statische HTML. PHP is bestemd voor het dynamisch maken van dingen, laat PHP dan ook alleen actief zijn op de dynamische delen zodat je snel onderscheid kunt maken tussen wat verandert, en wat statisch is.

Hiertoe zou je kunnen overwegen om output buffering te gebruiken. Ik heb ook de indruk dan dit een nogal ondergeschoven kindje is.

Beschouw het volgende stuk code, die in wezen hetzelfde doet, maar waarbij het veel duidelijker is wat statisch is, en wat dynamisch:
<?php
$mijn_setting = true; // test
$value = 'onderwerp'; // test

ob_start(); // vang output op
    // voor de leesbaarheid zou je dit "blok" in kunnen springen
    ?><form id="form" method="post"><?php
        if ($mijn_setting) {
            // NB waarschijnlijk wil je output escaping toepassen op $value, bijvoorbeeld
            // met behulp van htmlspecialchars()
            ?><label for="onderwerp">Onderwerp</label><input type="text" id="onderwerp" value="<?php echo $value; ?>"><?php
        }
        // waarschijnlijk zit er nog meer in dit formulier behalve dit ene veld
        // ...
        ?><input type="submit" value="Verstuur">
    </form><?php
return ob_get_clean(); // retourneer gebufferde output
?>

Hoe meer (statische) HTML er in zo'n snippet zit, hoe beter alles leesbaar blijft met bovenstaande aanpak.

Reageren