Autor Zpráva
ulalaa
Profil *
Ahoj, snažím se vytvořit podmínku v PHP, ale zřejmě tam je něco, co úplně nechápu. Potřebuji rozlišit, zda databáze u daného záznamu obsahuje vyplněné pole $linkhref. Pokud ano, potřebuji vytvořit proměnnou $linkpublic s odkazem - tj. jako bych v HTML napsal:
[mezera]<a href="linkhref" target=_blank">linktext</a>, pokud záznam neobsahuje $linkhref, měla by být proměnná $linkpublic prázdná - tj $linkpublic = "";.

V tuhle chvíli mám vytvořený kód:
  $linkhref = $row['linkhref'];
  $linktext = $row['linktext'];
 if (isset ($linkhref)){$linkpublic = " <a href='". $linkhref ."' target='_blank'>". $linktext ."</a>.";} else {$linkpublic = "";};
 
Tenhle kód v zásadě funguje, ale aby se mi vypsala hodnota else s $linkpublic = "";, musím v databázi ručně zaškrtnout, že má být pole NULL, nestačí, aby bylo prázdné. Pokud je pole jen prázdné, celé se to chová, jako by tam byl prázný odkaz - tj. napíše se mi mezera s tečkou.

Jak mám tohle vyřešit? Mám něco špatně v uvedeném kódu nebo je potřeba vymyslet nějaký způsob, který by odesílal NULL do databáze?
Firibix
Profil
Reakce na ulalaa:
Prázdný řetězec (tj. "") a null není to samé. Funkce isset, kontroluje, zda proměnná existuje a není null. Pro prázdný řetězec tedy vrátí true.

Řešení je buď do databáze vkládat NULL místo prázdného řetězce (to je za mě preferované a čistší), nebo podmínku doplnit o test na prázdný řetězec:

if (isset($linkhref) && $linkhref !== "")
ulalaa
Profil *
Zkusil jsem kvůli jednoduchosti nejprve aplikovat vaší podmínku, tj. if (isset($linkhref) && $linkhref !== "") {$linkpublic = " <a href='". $linkhref ."' target='_blank'>". $linktext ."</a>.";} else {$linkpublic = "";};

PHP mi teď ale hlásí chybu - Parse error: syntax error, unexpected ' ' (T_STRING), expecting ')' in (cesta a číslo tohoto řádku).
Stroganov
Profil *
ulalaa:

Tam, kde PHP očakáva klasickú medzeru, nemôže byť nedeliteľná medzera, ako máte vy v definícii podmienky a okolo nej.
ulalaa
Profil *
Super, děkuji, už vše funguje, jak má :).
Keeehi
Profil
No, ta podmínka se dá zapsat jednodušeji.
if (!empty($linkhref))
Firibix
Profil
Reakce na Keeehiho:
To ale není ekvivalentní isset($linkhref) && $linkhref !== "". Tahleta skrytá přetypování falsey hodnot v PHP osobně nemám rád a snažím se jim vyhýbat.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0