isset werkt niet zoals bedoeld

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark Coenie

Mark Coenie

11/07/2020 11:24:15
Quote Anchor link
Ik probeer met behulp van isset() t bepalen wat de variabelen moeten doorgeven.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
if(isset($_POST['url'])){
    $url  = $_POST['url'];
    $link = '<a href=\"".$_POST['url']."\" unfocus=\"this.blur()\"><i class=\"fab fa-globe\"></i></a>';
}
else{
    $url  = '';
    $link = '';
}
Het probleem is dat als 'url' niet is ingevuld toch de link wordt doorgegeven die onder de 'if' voorwaarde staat.
 
PHP hulp

PHP hulp

27/01/2021 17:16:43
 
Rob Doemaarwat

Rob Doemaarwat

11/07/2020 11:33:33
Quote Anchor link
Zit ie d'r echt niet in, of is ie gewoon leeg (lege string)? Alleen als ie d'r echt niet in zit (of null is - maar dat gaat niet bij een platte POST) zal isset() false geven. Doe anders een var_dump($_POST), dan zie je meteen van welk type ie is.

Anders kun je ook:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
if($_POST['url'] ?? null){
...

Dan geldt de if alleen als de "url" er in zit *en* niet leeg is.
Gewijzigd op 11/07/2020 11:35:04 door Rob Doemaarwat
 
Thomas van den Heuvel

Thomas van den Heuvel

11/07/2020 14:47:39
Quote Anchor link
Het lijkt mij echter niet bepaald een goed ontwerpprincipe om POST-data zo direct te gebruiken, mogelijk voor weergave op een webpagina?

Mogelijk kun je dit dus ook anders ontwerpen.

Ik weet niet precies hoe je $url en $link verder gebruikt? Wat probeer je precies te bereiken met het bovenstaande stuk code?

En ja, wat @Rob zegt dus. Als in je if-statement de verkeerde afslag wordt genomen dan is je POST data mogelijk (niet) leeg wanneer je dit wel zou verwachten of andersom.
Gewijzigd op 12/07/2020 00:25:19 door Thomas van den Heuvel
 
Mark Coenie

Mark Coenie

12/07/2020 18:42:25
Quote Anchor link
@Rob Doemaarwat
Met var_dump krijg ik: 'string(0)'
Ik heb het nu zo opgelost: if($_POST['url'] || isset($_POST['url']))
en dat werkt.

@Thomas van den Heuvel
Het formulier wordt verzonden naar een email en wordt dus niet direct weergegeven op een webpagina.
 
Thomas van den Heuvel

Thomas van den Heuvel

13/07/2020 00:10:30
Quote Anchor link
De bovenstaande constructie levert nog steeds een notice op omdat het niet gegarandeerd is dat $_POST['url'] bestaat.

Gebruik anders empty()? Die voert beide controles in één keer uit. En als je dan de delen in het if- en else-blok omdraait heb je niet eens een negatie (!) nodig. Of gebruik de aanpak van @Rob.

Idealiter produceert de verwerking van het formulier verder geen enkele (zichtbare) output (op het scherm) en verwijs je de gebruiker na afloop direct door met een Location-header zodat je het POST/redirect/GET-patroon volgt.
 
Ivo P

Ivo P

13/07/2020 10:23:24
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
if($url  = filter_input(INPUT_POST, 'url', FILTER_VALIDATE_URL)){
    $link = '<a href="'.$url.'" unfocus="this.blur()"><i class="fab fa-globe"></i></a>';
}

else {
    $link = '';
}

?>


zo valideer je ook nog eens dat het echt om een url gaat.

Er klopt trouwens niets van de quotes en backslashes...



Toevoeging op 13/07/2020 10:28:24:

wat is unfocus trouwens?
Gewijzigd op 13/07/2020 10:27:04 door Ivo P
 
- Ariën -
Beheerder

- Ariën -

13/07/2020 10:33:34
Quote Anchor link
'onfocus' bedoelt de topicstarter blijkbaar?
 



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.