Formulier returnen met if statement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido  -

Guido -

13/07/2019 21:17:59
Quote Anchor link
Hallo,

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;


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 -
 
PHP hulp

PHP hulp

28/03/2024 19:05:46
 
- Ariën  -
Beheerder

- Ariën -

13/07/2019 21:30:47
Quote Anchor link
Onderbreek je string met een ; dan kan je normaal een if-else gebruiken.
 
Rob Doemaarwat

Rob Doemaarwat

13/07/2019 21:43:35
Quote Anchor link
Ternary operator:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>'
;
?>


Of (wel zo overzichtelijk):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>'
;
?>
Gewijzigd op 13/07/2019 21:44:17 door Rob Doemaarwat
 
- SanThe -

- SanThe -

13/07/2019 22:03:50
Quote Anchor link
Is mijn_setting een constante?
En zit daar tekst in?

Zo gebruik je het in ieder geval wel.
 
- Ariën  -
Beheerder

- Ariën -

13/07/2019 22:09:27
Quote Anchor link
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.
 
Rob Doemaarwat

Rob Doemaarwat

13/07/2019 22:55:20
Quote Anchor link
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" ;-)
 
- SanThe -

- SanThe -

13/07/2019 23:14:46
Quote Anchor link
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.
 
Rob Doemaarwat

Rob Doemaarwat

13/07/2019 23:33:28
Quote Anchor link
- 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.
 
Guido  -

Guido -

13/07/2019 23:50:27
Quote Anchor link
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
 
- SanThe -

- SanThe -

14/07/2019 00:14:40
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

14/07/2019 12:42:02
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>

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
 
- SanThe -

- SanThe -

14/07/2019 13:12:51
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

14/07/2019 15:22:37
Quote Anchor link
Je zou het ook in een include kunnen stoppen. Dan heb je een template voor het formulier. Op dit moment ziet het er misschien onoverzichtelijk uit, maar dat komt alleen omdat er relatief veel code en commentaar in zit.

Zonder commentaar valt het al best mee:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();
?>

Of in een apart bestand:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$mijn_setting
= true;
$value = 'onderwerp';

ob_start();
include_once './ob.test.tpl';
return ob_get_clean();
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<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>

Veel beter leesbaar dan dit wordt het niet.
Gewijzigd op 14/07/2019 15:59:44 door Thomas van den Heuvel
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.