Slevový týden - Květen Slevový týden - Květen
30 % bodů zdarma na online výuku díky naší Slevové akci!

Diskuze: Mohu vypnout zobrazování upozornění na serveru?

Aktivity (2)
Avatar
Vojtěch Staša:15. května 20:35

Při tvorbě webu v PHP jsem narazil na problém zobrazování upozornění (Notice: Undefined variable...) Celkem mi vadí, když mi kód funguje, ale je tam to upozornění. Našel jsem si, že zobrazování těchto zpráv mohu vypnout na serveru (v mém případě zatím localhost) funguje to správně (chyba tam není), ale přemýšlím, jestli při nahrání na hosting se znovu nezobrazí. Chci se teda jen zeptat, jestli zpravidla mají na serverech také vypnuté zobrazování těchto chyb? Máte někdo máte zkušenosti s takovýmto řešením? Popřípadě, jak to vyřešit jinak?

Zkusil jsem:

 
Odpovědět
15. května 20:35
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Vojtěch Staša
Daniel Vítek:15. května 21:41

Jsou v podstatě 2 možnosti.

  1. Měl bys mít možnost toto nastavit v administraci hostingu. Každý dobrý hosting ti tuto možnost nabídne.
  2. Pokud to nemáš v nastavení hostingu, můžeš to nastavit přímo v PHP.

Pokud chceš zobrazovat vše kromě Notice, pak:

error_reporting(E_ALL & ~E_NOTICE);

Pokud nechceš zobrazovat žádné hlášky, pak

error_reporting(0);
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět
15. května 21:41
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Odpovídá na Daniel Vítek
Vojtěch Staša:15. května 22:23

Díky!!! Netušil jsem, že stejný příkaz jde napsat zrovna do PHP souboru. Díky moc....

 
Nahoru Odpovědět
15. května 22:23
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Vojtěch Staša
Daniel Vítek:16. května 10:34

Ano, jde :)

Případně další konfiguraci PHP můžeš provádět pomocí příkazu ini_set(). Ale toto může už být limitováno hostingem a půjde ti nastavit jen něco.

ini_set ( string $varname , string $newvalue ) : string
Nahoru Odpovědět
16. května 10:34
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Vojtěch Staša:16. května 10:42

A mohl by v tom být nějaký problém? Že si ty upozornění skryji a neřeším to... Jak to děláte Vy?(profesionální programátoři)

 
Nahoru Odpovědět
16. května 10:42
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Milan Turyna
Redaktor
Avatar
Milan Turyna:16. května 12:29

Při vývoji se to nechává zobrazeno aby si věděl v čem je problém a ve výsledné verzi se to skrývá a nebo jsou další systémy třeba jako Tracy v Nette která dokáže detekovat IP adresy a zobrazí se jen určitým osobám.

Jinak místo toho řešit jak to skrýt, je lepší ten kód napsat tak aby to ty varování nepsalo.
Notice: Undefined variable znamená že přistupuješ k proměnné která není definována, nemá hodnotu. Jestli chceš tak sem pošli kód a celé upozornění.

 
Nahoru Odpovědět
16. května 12:29
Avatar
Vojtěch Staša:17. května 12:23

Zdroják mám tady:

<?php
require "pripojeni.php";

if (isset($_GET['page'])) $page=trim(htmlspecialchars(strip_tags($_GET['page'])));
if ($page==''){
        $page="index";    // POZOR: Máš vypnuté upozornění na serveru! Dořešit!
}
$nazev='zadny';
$text='text - nic';
$dotaz='SELECT * FROM texty WHERE urlnazev="'.$page.'"';
$vysledek=mysqli_query($conn, $dotaz);
$zaznam=mysqli_fetch_array($vysledek);

        (isset($nazev) && $nazev=$zaznam['nazev']);
        (isset($text) && $text=$zaznam['text']);
        (isset($klicovaslova) && $klicovaslova=$zaznam['klicovaslova']);
        (isset($title) && $title=$zaznam['nazev'].' ');
        (isset($metapopis) && $metapopis=$zaznam['metapopis']);

if ($nazev=="") {
  echo '<html><meta http-equiv="REFRESH" content="0;index.php?page=error404"></html>'; die();
};
?>

Jsem začátečník... proto je to tak prasácky napsané :-) A ukazuje mi to toto: Notice: Undefined variable: page in C:\xampp\htdoc­s\radio_otoka\pri­prav-obsah.php on line 5

Pozn.: tento soubor mám připojený přes require do souboru index.php. Problém ale nastává, že při načtení úvodní stránky (index.php) mám proměnnou page prázdnou. Potřeboval bych ji buď hned při načtení stránky nastavit na hodnotu index, nebo tak, jak to mám udělané teď, když je proměnná page prázdná, zobrazí index.php. U druhého řešení ale naskočí právě ten problém s Notice: Undefined variable. Tak jsem to prostě vypnul. Mám ale výčitky svědomí, že jsem něco nevyřešil, ale jen utlumil.

 
Nahoru Odpovědět
17. května 12:23
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18. května 8:05

To se dela jinak. Problem nastava tady:

// ok
if (isset($_GET['page'])) $page=trim(htmlspecialchars(strip_tags($_GET['page'])));

// chyba
if ($page==''){
        $page="index";    // POZOR: Máš vypnuté upozornění na serveru! Dořešit!
}

Jde o to, ze pokud neni v adrese page=123, tak nikde pred tim radkem, kde nastava chyba, nemas $page=cokoliv.
Takze je dobre to resit takto:

$page = isset($_GET['page']) ? $_GET['page'] : '';
// a az potom nasledne si s tim page delej nejake upravy
// a ty updavy bych provadel v tomto poradi:
// trim = smaz mezery ze predu a ze zadu = zkrati se delka string, zrychly dalsi operace
// strip_tag = smaz tagy = zkrati se delka string, zrychly dalsi operace
// htmlspecialchars = nahrad specialni znaky pro zobrazeni v html kodu
// (mel bys nahradit znaky & < > " a ')
$page = htmlspecialchars(strip_tags(trim($page)));
Editováno 18. května 8:06
 
Nahoru Odpovědět
18. května 8:05
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:18. května 9:47

Jeste mozna neznas ten zapis, tak ti napisi dalsi moznosti, jak to zapsat.

$page = isset($_GET['page']) ? $_GET['page'] : '';
$page = !isset($_GET['page']) ? '' : $_GET['page'];
if (isset($_GET['page'])) {$page = $_GET['page'];} else {$page = '';}
$page = ''; if (isset($_GET['page'])) {$page = $_GET['page'];}
//if (!isset($page)) {return;} // pokud parametr funkce neni definovan, tak funkci ukonci. Pokud mas zapis ve funkci

Kazdy z tech zapisu ma jine vyhody a nevyhody. Je dobre vzdy zvazit, jake moznosti muzou nastavat nejcasteji a po te vybrat zpusob. Nas v programovani ucili, ze

  • kdyz mas zapis if, else, tak podminka by tam mela byt takova, ktera nastava nejcasteji
  • Proti tomu je ale zapis s returnem, kde vylucujes chybove moznosti pred tim, nez se spusti zbytek programu. Muze vest ke zpomaleni pri spravnem pouziti funkce. Nicmene se to pohodlneji zapisuje a ziskas lepsi prehled o podchyceni chybovych stavu. Ale da se to take pouzit k rychlemu ukonceni cyklu ve funkci, zavolanim misto break primo return
  • Pokud naplnis $page na zacatku, muze se stat, ze pri jinem nastaveni serveru si prepises i $_GET['page']. Tusim se to jmenuje superglobalni promenne. $page = $_GET['page'] = $_POST['page'] = $_REQUEST['page'] jsou jedna promenna. Takze je lepsi zapis if-else nebo?-: .
 
Nahoru Odpovědět
18. května 9:47
Avatar
Vojtěch Staša:23. května 13:10

Řekl bych, že lepší je if-else. Aspoň mně to tak funguje krásně. Děkuju všem za rady!

Díky.

 
Nahoru Odpovědět
23. května 13:10
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.