Formulier returnen met if statement
Ik return een contact formulier en wil een if conditie toevoegen, om het veld Onderwerp wel/niet te tonen. Ik probeer dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
$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;
'. 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
Gewijzigd op 13/07/2019 21:20:11 door Guido -
Onderbreek je string met een ; dan kan je normaal een if-else gebruiken.
Ternary operator:
Of (wel zo overzichtelijk):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?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>';
?>
$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):
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?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>';
?>
$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>';
?>
Gewijzigd op 13/07/2019 21:44:17 door Rob Doemaarwat
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.
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.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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
?>
$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.
Gewijzigd op 14/07/2019 12:48:15 door Thomas van den Heuvel
Thomas van den Heuvel op 14/07/2019 12:42:02:
Hoe meer (statische) HTML er in zo'n snippet zit, hoe beter alles leesbaar blijft met bovenstaande aanpak.
Voor jou misschien.
Ik vind het zo onleesbaar.
Zonder commentaar valt het al best mee:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$mijn_setting = true;
$value = 'onderwerp';
ob_start();
?><form id="form" method="post"><?php
if ($mijn_setting) {
?><label for="onderwerp">Onderwerp</label><input type="text" id="onderwerp" value="<?php echo $value; ?>"><?php
}
?><input type="submit" value="Verstuur">
</form><?php
return ob_get_clean();
?>
$mijn_setting = true;
$value = 'onderwerp';
ob_start();
?><form id="form" method="post"><?php
if ($mijn_setting) {
?><label for="onderwerp">Onderwerp</label><input type="text" id="onderwerp" value="<?php echo $value; ?>"><?php
}
?><input type="submit" value="Verstuur">
</form><?php
return ob_get_clean();
?>
Of in een apart bestand:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$mijn_setting = true;
$value = 'onderwerp';
ob_start();
include_once './ob.test.tpl';
return ob_get_clean();
?>
$mijn_setting = true;
$value = 'onderwerp';
ob_start();
include_once './ob.test.tpl';
return ob_get_clean();
?>
Code (php)
Veel beter leesbaar dan dit wordt het niet.
Gewijzigd op 14/07/2019 15:59:44 door Thomas van den Heuvel