Autor Zpráva
Venca190
Profil *
Dobrý den,

převedl jsem svůj web ze subdomény na normální doménu(na jiném hostingu).
Bohužel jedna ze stránek mi vypisuje chybu:

Fatal error: Can't use function return value in write context .....

jedná se o řádek

if (empty(trim($dev))) { $err[] = "Vyplňte pole dev."; }

jak lze toto opravit? Co jsem googloval, tak jsem z té chyby moudrej moc nebyl (hlavně nechápu, že to na jiném hostingu funguje normálně a u wedosu mi to nejde).
Alphard
Profil
if (trim($dev)=="") { $err[] = "Vyplňte pole dev."; }
Kde se bere $dev, neočekává se zapnuté register globals? Pak by bylo lepší dát tam ještě isset.
Fisir
Profil
Reaguji na Vencu190:
Přímo tvůj případ je zmíněn v oficiální dokumentaci funkce empty(), možná by stálo za to se tam podívat.
Venca190
Profil *
Alphard:

jedná se o formulář a jeho kontrola...
před uvedeným kodem mám ještě
$dev = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $dev = $_POST['dev'];
   
  $err = array();
 
  if (empty(trim($dev))) { $err[] = "Vyplňte pole dev."; }
jestli se očekává register globals to poznám jak?
Alphard
Profil
Venca190:
empty se většinou používá z toho důvodu, že negeneruje chybovou hlášku, pokud daná proměnná vůbec neexistuje. Váš kód je ale postavený tak, že by se warning generoval již na řádku 6, takže bych to navrhoval konstruovat takhle:

$dev = '';
 
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $err = array();
 
  if (!isset($_POST['dev']) || ($dev = trim($_POST['dev'])) == '') { $err[] = "Vyplňte pole dev."; }
Venca190
Profil *
Alphard:
takže pokud to dobře chápu, tak !isset($_POST['dev']) znamená, že pokud proměnná neexistuje || ($dev = trim($_POST['dev'])) == '') nebo je prázdná, vyhodí to $err

takže kod ze začátku $dev = ''; je zbytečné a mohu ho smazat?
Alphard
Profil
takže kod ze začátku $dev = ''; je zbytečné a mohu ho smazat?
Jak to mám vědět? :-) Definuje to $dev s nějakou defaultní hodnotou, záleží, jestli na tu proměnnou $dev v případě chyby ještě saháte, nebo ne. V opačeném případě to lze smazat.
Venca190
Profil *
Dobře díky, ještě poslední věc, není lepší to mít

if (!isset($dev) || ($dev = trim($dev)) == '') { $err[] = "Vyplňte pole dev."; }
když, před podmínkou mám $dev = $_POST['dev'];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $dev = $_POST['dev'];
   
  $err = array();
 
if (!isset($dev) || ($dev = trim($dev)) == '') { $err[] = "Vyplňte pole dev."; }
Alphard
Profil
Není, vůbec jste nepochopil, proč jsem tam dával ten isset. To už tam rovnou stačí jen ten trim...
if (trim($dev) == '') { $err[] = "Vyplňte pole dev."; }
Venca190
Profil *
omlouvám se, nevšiml jsem si, že v [#5], jste odstranil $dev = $_POST['dev'];, takže pokud $dev není předtím deklarováná používá se !isset($_POST['dev'])

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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