« 1 2
Autor Zpráva
CZghost
Profil
juriad:
Osobně by mě zajímalo, kde se lidé o té druhé možnosti dozvídají
Stačí navštívit tento odkaz :-)
_fantomas
Profil
[#1] CZghost takže je lepší když použiju

<?php
if(isset($_SESSION['admin'])):?>
neco co uvidím když je session admin nastavena
jako HTML.
<?php endif; ?>

protože ted používam

<?php
if(isset($_SESSION['admin']))
{
?>
neco co uvidím když je session admin nastavena
jako HTML.
<?php
}
?>
juriad
Profil
_fantomas:
Je to úplně to samé, ani jedno není lepší z hlediska jazyka PHP. Záleží na tobě.

Ty závorky můžeš klidně psát na stejnou řádku:
<?php
if(isset($_SESSION['admin'])) {
?>
neco co uvidím když je session admin nastavena
jako HTML.
<?php } ?>

Ten způsob s dvojtečkami a endif se používá častěji v případech, kdy mícháš dohromady PHP a HTML. Je pak vidět, co končí (to v případě zavírací složené závorky je méně zřejmé).
_fantomas
Profil
Díky, no tak sem si udelal to pripojení samostatne do jednoho souboru

connect.php

Jenže ted to vypada nejak takhle
// connect.php
<?php
$db_name = "blaa";
?>

pak v nejakem skriptu treba

//index.php
<?php
include('includes/connect.php');
echo $db_name;
?>

No a když includuju soubor connect.php ve kterem je již <?php ?> tak se to ve skriptu index.php smaže a bude tam jen jednou to <?php ?> ?
Doufam 6e ch8pete o co mi jde.
CZghost
Profil
_fantomas:
Tak juriad odpověděl za mě :D Podobný zápis podmínek už jsem zkoušel, funguje bezproblémově. Tady by hulákal spíš validátor kódu, kterému se nelíbí ukončení kódu PHP před ukončením podmínky. Nicméně to funguje a používá se to dost hojně, protože to celkem zkracuje datový objem a navíc pomáhá strukturovat kód. V podstatě je to souvislý kód a určité části se skryjí (nevypíšou), pokud podmínka neplatí (nebo se vypíše jiná část, přepínání obsahu).

[#4] Include respektuje potřebné značky PHP, takže to bude fungovat, ale nesmí být na začátku souboru signatura UTF-8 (tzv. Byte order mark - BOM). Té se zbavíš hexadecimálním editorem (za mě bych doporučil Hexplorer, je zdarma, jednoduchý na ovládání, většina funkcí je hned po ruce). V editoru si nastav, aby neukládal text se značkou BOM. V běžném textovém editoru totiž není vidět, takže jistě chápeš zákeřnost takové značky. Text ve formátu UTF-8 nepotřebuje BOM, ten tam přidává Windows Notepad, protože výchozí kódování je Windows-1250 a potom se mu to plete. Tady předpokládám, že nepoužíváš právě tento editor, který samozřejmě tuto funkci odstranění značky nemá.
quatzael
Profil
_fantomas:
To <?php musíš psát i v tom icludovanym scriptu samozřejmě. Vnořený to tam "znovu" nijak nebude..
Naopak pokud v PHP skriptu nepokračuješ v html, tak ho nikdy neukončuj ?>!!
juriad
Profil
Include provede dá se říci toto:
Zapamatuje si všechny aktuálně definované proměnné a funkce
Načte includovaný soubor
Začne jej procházet a postupně vypisuje obsah, který není uvnitř <?php ... ?>
Když narazí na kus PHP, tak jej vykoná; ten blok PHP může:
- něco vypisovat -> vypíše se to na výstup (pozor na funkci ob_start, která tomu zabrání)
- definovat funkce -> zapamatuje si je
- volat funkce a používat proměnné -> použije ty, které má zapamatované (pokud neexistuje -> chyba)
- měnit hodnoty zapamatovaných proměnných -> změní se jim hodnota
Po konci zpracování souboru všechny zapamatované proměnné funkce a proměnné zůstávají.

Chová se to tedy přesně jako by obsah toho souboru byl v místě includu, tedy:

<?php
...
include "soubor.php";
...
?>

Se vyhodnocuje přibližně jako:
<?php
...
?>
SEM SE VLOŽÍ OBSAH soubor.php
<?php
...
?>

CZghost:
Funkčnost includu nezávisí na BOMu, PHP je jedno, co v tom souboru je. Jen tobě se ti pak nelíbí výsledek - ten BOM zůstane někde uprostřed stránky a způsobuje problémy.
CZghost
Profil
juriad:
ten BOM zůstane někde uprostřed stránky a způsobuje problémy.
A to je právě ten problém a důvod, proč to tam nesmí být. Proto se tomu musí zabránit tím, že ten BOM vymažu/neuložím. UTF-8 se běžně pozná podle délky textu v poměru k velikosti souboru. Pokud je soubor větší, jedná se o UTF-8. U textu bez diakritiky (obecná latinka) je jedno, v jakém je kódování, to je všude stejné. Tady jde o české znaky, které se musí všude ukázat správně (takže také záleží na použitém fontu, jenže to už nespadá pod PHP, ale CSS)
_fantomas
Profil
Zde
http://i.imgur.com/G7tVJxd.png
dole na pravo kodovani, používam to všude.. mám to dobre?
kod nevšímejte neco sem testoval.
CZghost
Profil
_fantomas:
Lepší to bude nějak takhle (já mám Npp v češtině, takže tě to bude asi trochu mást): Kódování > UTF-8 bez BOM.

K tomu kódu, není to lepší takhle? ↓
<?php
if(isset($_POST['zisti'])) {
  $hash = $_POST['zisti'];
  echo hash('sha512', $hash);
}
?>
<form action="" method="post">
  <input type="text" name="zisti" />
  <input type="submit" value="Generovať" /> <!-- jinak se ti ukáže prázdné tlačítko -->
</form>
<?php
include('./includes/connect.php');
?>




To je nabídka kódování v češtině. Píšeš česky, ale program máš ve slovenštině, klávesnici máš anglickou, proč? Ono se dá psát anglicky i na české (popřípadě slovenské) klávesnici, česká i slovenská klávesnice mají obě varianty QWERTZ i QWERTY, stačí je jen nainstalovat (respektive přidat do nabídky klávesnice).


Tohle by mělo být dole.
juriad
Profil
CZghost:
http://www.w3.org/wiki/HTML/Elements/input/submit
Přečti si point: „If the element has a value attribute, the button's label must be the value of that attribute; otherwise, it must be an implementation-defined string that means "Submit" or some such.“ Není tedy připuštěno, aby byl nápis na tlačítku prázdný, vždy bude nějaký - bude záviset na prohlížeči a bude mít význam odeslat.
To o prázdném nápisu se týká <input type="button"> a <button>.
CZghost
Profil
juriad:
Ale i tak, je lepší, když to tam napíše, protože máš web dejme tomu v angličtině a tam je tlačítko v češtině (nebo naopak, je-li prohlížeč v angličtině). To by vypadalo trochu divně, nemyslíš? Takže takhle se dá odesílací tlačítko lokalizovat pro daný web, nebo ho úplně jinak pojmenovat.
_fantomas
Profil
Jak sem psal, ten kod sis vubec nemnel všímat protože sem to tam i napsal, kod nepoužívam nikde pro verejne uživatele pouze se neco testoval
co se týka ohlede kodovani tak již používam to UTF-8 bez BOM, díky za rady.
CZghost
Profil
_fantomas:
Tak pro lepší testování, protože odesílací tlačítko se běžně neodesílá ;)
Jinak nemáš zač :)
jenikkozak
Profil
CZghost:
Tak pro lepší testování, protože odesílací tlačítko se běžně neodesílá ;)
Odesílací tlačítko se neodesílá pouze v IE, pokud uživatel potvrdí vyplnění formuláře pomocí Enteru.
Fisir
Profil
Reaguji na jenikkozaka:
pokud uživatel potvrdí vyplnění formuláře pomocí Enteru
Ve skutečnosti se neodesílá ani tehdy, když na něj kliknu. Závisí na přítomnosti atributu name. Alespoň tedy v jedenáctce (živá ukázka).
CZghost
Profil
[#16] Fisir:
Tak to je zvláštní. Připadá mi to jako chyba, protože logicky nepotřebuju odesílat ještě tlačítko, na které jsem klikl. To se takhle odesílá ve všech prohlížečích, pokud je na něm přítomen atribut name, nebo jenom v Internet Exploreru? Ono to zase tolik nevadí, ale jestli někdo staví na této skutečnosti, a týká se jenom IE, potom docela pohoří u ostatních prohlížečů, neboť by to znamenalo chybu v programu (tj. není definovaná proměnná). Většinou, když takovou proměnnou použiju tam, kde je bezpodmínečně nutná, tak to vyhodí fatální chybu a z prohlížeče potom nelze zjistit, kde je toho příčina. Při metodě GET to ještě lze nějak zjistit, ale metoda POST je v tomhle ohledu dost zákeřná.
Fisir
Profil
Reaguji na CZghosta:
To se takhle odesílá ve všech prohlížečích, pokud je na něm přítomen atribut name, nebo jenom v Internet Exploreru?
Chová se to tak i ve Chromu, víc prohlížečů momentálně nemám k dispozici, ale koneckonců si to můžeš sám vyzkoušet.

Připadá mi to jako chyba, protože logicky nepotřebuju odesílat ještě tlačítko, na které jsem klikl.
Takže logicky nepotřebuju odesílat políčko, které jsem vyplnil? Mně to přijde v pořádku. Nemá name, tak ho asi nepotřebuji, odesílat nebudu. Má name, asi to k něčemu chci (třeba ke kontrole, zda byl formulář odeslán), takže odešlu i to.

fatální chybu
undefined není fatální chyba, ale notice. Maximálně by se tím mohl pokazit třeba SQL dotaz.

z prohlížeče potom nelze zjistit, kde je toho příčina
Toto se může zjišťovat tzv. testy, které jsou umístěny přímo v kódu a kontrolují funkčnost (třeba i jednoduchá echa, díky kterým poznáme, kde se skript pokazil). Bohužel se po odladění většinou smažou. I tak jsou tu ale logy, které jsou účinnější, než výstup v prohlížeči (pokud tedy nepoužíváš něco jako Tracy).
jenikkozak
Profil
Fisir:
Ve skutečnosti se neodesílá ani tehdy, když na něj kliknu. Závisí na přítomnosti atributu name.
Žádný formulářový prvek se neodesílá, když nemá název. U toho odesílacího tlačítka je výjimka (po odeslání Enterem se hodnota name ignoruje), proto jsem ji zmínil.
Fisir
Profil
Reaguji na jenikkozaka:
Omlouvám se, neměl jsem k dispozici starší Explorery. Ta výjimka se projevuje jen v Explorerech nižších než osm včetně. Ale taky to vypadá, že se v nich nepředvyplňuje text tlačítka, není-li zadán (konkrétně v osmičce a sedmičce, šestka mi doplnila „Submit Query“).
_fantomas
Profil
Trochu víc sem upravil skript také sem již zmenil napájení a includuju ho ze souboru connect.php je to tak lepší, skript sem dal do SHA512 a
mam z toho dobrý pocit, jede mi vše jak má, dík za váš čas už to tady netreba rešit :)
« 1 2

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: