PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Spracovanie Formulárov> <Vaša prvá PHP stránka
Last updated: Sun, 25 Nov 2007

view this page in

Niečo Užitočné

Urobme teraz niečo užitočnejšie. Chceme zistiť, aký druh prehliadača návštevník používa. Kvôli tomu skontrolujeme reťazec užívateľského agenta, ktorý prehliadač posiela ako časť HTTP požiadavky. Táto informácii je uložená v premennej. Premenné v PHP vždy začínajú znakom dolára. Premenná, o ktorú sa práve teraz zaujímame je $_SERVER['HTTP_USER_AGENT'].

Note: $_SERVER je špeciálna rezervovaná PHP premenná, ktorá obsahuje všetky informácie o web serveri. Je známa ako autoglobála (alebo superglobála). Pozrite si odpovedajúcu stránku manuálu o superglobálach pre viac informácii. Tieto špeciálne premenné boli predstavené v PHP » 4.1.0. Pred týmto časom sme miesto nich používali staršie $HTTP_*_VARS polia, ako je $HTTP_SERVER_VARS. I keď odmietané, tieto staršie premenné stále existujú. (Tiež si pozrite poznámku o starom kóde.)

Na zobrazenie tejto premennej, môžete jednoducho urobiť:

Example#1 Vypísanie premennej (Prvok poľa)

<?php echo $_SERVER['HTTP_USER_AGENT']; ?>

Vzorový výstup tohto skriptu môže byť:

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
    

Existuje mnoho typov premenných dostupných v PHP. V hore-uvedenom príklade sme výpisali prvok Poľa. Polia môžu byť veľmi užitočné.

$_SERVER je len jedna premenná, ktorú vám PHP automaticky sprístupní. Zoznam sa dá vidieť v sekcii manuálu Rezervované Premenné alebo ich kompletný zoznam môžete získať pozrením sa na výstup funkcie phpinfo() použitej v príklade v predošlej sekcii.

Do vnútra PHP tagu môžete vložiť viaceré PHP príkazy a vytvoriť malé bloky kódu, ktoré robia viac než len jednoduché echo. Napríklad, ak chcete zistiť, či sa používa Internet Explorer, môžete urobiť toto:

Example#2 Príklad využívajúci riadiace štruktúry a funkcie

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
    echo 
'Pouzivate Internet Explorer.<br />';
}
?>

Vzorový výstup tohto skriptu môže byť:

Pouzivate Internet Explorer.<br />

Tu predstavujeme niekoľko nových konceptov. Máme príkaz if. Ak ste oboznámený so základným syntaxom používaným jazykom C, tak by vám toto malo pripadať logické. Inak by ste si pravdepodobne mali vybrať nejakú úvodnú PHP knihu a prečítať si prvých pár kapitol, alebo si prečítať časť manuálu Referencia Jazyka. Zoznam PHP kníh môžete nájsť na » http://www.php.net/books.php.

Druhý koncept, ktorý sme predstavili bolo funkčné volanie strpos() strpos() je funkcia vstavaná do PHP ktorá vyhľadáva reťazec v reťazci. V tomto prípade hľadáme 'MSIE' (takzvaná ihla) vo $_SERVER['HTTP_USER_AGENT'] (takzvaný stoh sena). Ak sa ihla nájde v stohu sena, funkcia vráti pozíciu ihly relatívne k začiatku stohu sena. Inak vracia FALSE. Ak nevráti FALSE, výraz if vyhodnotí TRUE a vykoná sa kód vo vnútri {zátvoriek}. Inak sa kód nespustí. Nebojte sa vytvárať podobné príklady, s if, else a inými funkciami ako sú strtoupper() a strlen(). Každá zodpovedajúca stránka manuálu obsahuje tiež príklady. Ak si použítím funkcie nie ste istý, budete si chcieť prečítať stránku manuálu ako čítať definíciu funkcie a sekciu o PHP funkciách.

Môžeme teda urobiť krok ďalej a ukázať ako môžete skákať do a z PHP módu, dokonca aj v strede PHP bloku:

Example#3 Miešanie módov HTML a PHP

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() musela vratit nie-false</h3>
<p>Pouzivate Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() musela vratit false</h3>
<p>Nepouzivate Internet Explorer</p>
<?php
}
?>

Vzorový výstup tohto skritpu môže byť:

<h3>strpos() musela vratit nie-false</h3>
<p>Pouzivate Internet Explorer</p>

Namiesto použitia PHP príkazu echo na vypísanie niečoho, vyskočili sme z PHP módu a poslali len priame HTML. Dôležitým a mocným bodom na poznamenanie je, že logický prúd skriptu zostáva netaktný. Iba jeden z HTML blokov skončí poslaním pozorovateľovi závisiac od výsledku strpos(). Inými slovami, závisí od toho, či sa reťazec MSIE našiel alebo nie.



Spracovanie Formulárov> <Vaša prvá PHP stránka
Last updated: Sun, 25 Nov 2007
 
add a note add a note User Contributed Notes
Niečo Užitočné
gz at example dot com
16-May-2008 05:33
tomcraig:
If the search string is in the first position (i.e. position[0]), then your coditional will resolve to false.

anonymous:
"The function should return TRUE on any non-zero value." The strpos() function never returns true. It returns, as daniel says, either false or an integer. That includes 0, which evaluates to false if using "==". Also note that the manual text (as you yourself quote it) says that, in the case of an unsuccessful search, the if expression evaluates to true, not that the strpos() function returns true (which, again, it never does).

Mark:
"Try it with == TRUE.  It works fine..." Sure it does, as long as the search string is not in the first position.

The manual and daniel are correct.
Mark
15-May-2008 07:11
No, "double negative" is indeed correct.  Just as in C and C++, False evaluates to 0 and True is defined as "Not False". 

Try it with == TRUE.  It works fine, and is easier to understand.
Anonymous
14-May-2008 11:37
Daniel, you are incorrect:

From the text of the tutorial above:

.....If it does not return FALSE, the if expression evaluates to TRUE .....

So the poster of the double-negative comment is absolutely correct. The function should return TRUE on any non-zero value.
daniel
10-May-2008 08:52
In response to the "Double Negative" post.

I think you missed the line where it says that the function does not return 'true' it returns a position. So you cannot evaluate == true you must evaluate !== false because strpos() only returns a number or false.
tomcraig_fmu at yahoo dot com
09-May-2008 06:25
As an instructor of computer languages, I think your use of a double negative is a poor choice and bad example.  Here is how I would code your example:

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') == TRUE)
{
    echo
'You are using Internet Explorer.<br />';
}
?>

Now instead of saying something "if something is not FALSE", you are saying if "something is TRUE".  Having programmed for over 30 years, I have found this much easier to code, debug and pass on to future programmers.
sako
22-Apr-2008 02:36
I don't think there is a bad time to start separating logic from presentation. It is actually a good idea to start doing this from the get-go so it becomes a habit. This is a great habit.. Everything now a days is going away from mixing logic and presentation for simplicity sake among other things (look at html and css). I think a good thing to read up on is smarty. It can do wonders separating your logic from presentation.
ducky
03-Apr-2008 03:54
To the above poster:

That's probably too much to think about when you're starting out... You should probably at first just concentrate on getting the stuff running and learning syntax before you consider best practices and the like.
rfantin at coralwood dot com
20-Dec-2006 10:00
While it's easy to get carried away mixing your logic and presentation together since it's so easy to do, your better off using PHP within HTML only to fill in values, or include other source files.

Keep your actual processing in separate libraries that are called before you send any headers to the page. Try to avoid calling a script that retrieves or sets information, or manipulates it in the middle of your HTML. You'll find it's much easier to maintain.

Spracovanie Formulárov> <Vaša prvá PHP stránka
Last updated: Sun, 25 Nov 2007
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites