Ik probeer met behulp van isset() t bepalen wat de variabelen moeten doorgeven.

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.
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:

if($_POST['url'] ?? null){
...

Dan geldt de if alleen als de "url" er in zit *en* niet leeg is.
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.
@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.
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.
<?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...



[size=xsmall]Toevoeging op 13/07/2020 10:28:24:[/size]

wat is unfocus trouwens?
'onfocus' bedoelt de topicstarter blijkbaar?

Reageren