Autor Zpráva
Yuhů
Profil
Hodně lidí mi říká, abych začal psát o PHP. Tož tak, nemám na to čas. Ale začal jsem psát PHP tahák, protože HTML tahák
www.jakpsatweb.cz/html/html-tahak.html
se ukázal jako velmi úspěšná věc.

Jenomže to nestíhám a potřeboval bych pomoct. Jestli někdo máte čas a můžete mi udělat pár příkladů popisem, podívejte se na stránku
http://www.jakpsatweb.cz/nedokonceno/php-tahak.html
a zkuste zpracovat nějakou nedodělanou kapitolku.

Kdyby se vám snad někomu chtělo, tak sem napište, na čem děláte, a pak mi to pošlete mailem. U každé kapitolky bude uvedeno, kdo ji zpracoval.

Zásady:
* stručně
* fakt strašně stručně
* bez zbytečných keců
* v příkladech nesmí být vůbec nic navíc
* příklady musejí být co nejjednodušší
* nesmějí se vysvětlovat dvě věci najednou
* jenom užitečné věci
* všechno nové je potřeba vysvětlit

Hlavní (a možná jediný) cíl této stránky: aby čtenář rychle našel, na co si v PHP rychle nemůže vzpomenout.
habendorf
Profil
Sorry za OT:

<?
$promenna = "karle";
echo "Ahoj ". $karle;
?>

vypíše Ahoj Karle. Tečka spojuje řetězce.


Hned 2 chybky - echo "Ahoj ". $promenna;
vypíše Ahoj karle (s malým "k")

Jinak dobrý podnik, doufám že se někdo chytí, já jsem s php bohužel v plenkách.
Yuhů
Profil
možná je to právě pro ty, kdo jsou s PHP v plenkách
HubiPe
Profil *
Pro Yuhůa: Můžeš to tam zkopírovat tak jak to je, jenom kdybys mě tam napsal jako autora, nebo tak něco jako hubipe (vše s malym, v tomto systému mi to nejde změnit na malý :-(

poznámka ke komentářům:
# funguje úplně stejně jako //

WHILE

Funkce while() umožňuje cyklické provádění příkazů:


while(výraz):
příkaz;
příkaz;
...
endwhile;


Příkazy se budou provádět tak dlouho, dokud bude výraz TRUE. Můžeme si tedy například vypsat nadpisy od H1 po H6 jednoduchým cyklem:


$i = 1; // inicializace
while($i <= 6):
echo '<h'.$i.'>Nadpis velikosti '.$i.'</h'.$i.'>';
$i++; // zvýšíme hodnotu $i o 1
endwhile;


Jako větvící příkazy (if, elseif, else, ...) můžeme použít složené závorky

while(podmínka){
blok příkazů;
}

nebo dokonce, pokud máme jen jeden příkaz (což u while většinou není, ale může se stát...) nemusíme používat endwhile ani závorky. Nesmíme ale pak použít dvojtečku!
while(podmínka) jeden příkaz;


DO-WHILE
Do while je stejný cyklický příkaz jako while, s tím rozdílem, že podmínka je uvedena až na konci bloku příkazů. Výhoda je, že se blok příkazů provede (alespoň jednou) vždy.

do{
příkaz;
příkaz;
...
}while(podmínka);

U do-while existuje jen použití se složenými závorkami, žádne enddowhile neexistuje. Pokud si zase chceme vypsat nadpisy od H1 po H6, provedeme to takhle:

$i = 1; // inicializace
do{
echo '<h'.$i.'>Nadpis velikosti '.$i.'</h'.$i.'>';
$i++; // zvýšíme hodnotu $i o 1
}while($i <= 6);


INCLUDE
Include slouží ke vložení souboru do práv prováděného skriptu. Příkaz include má mnoho "odnoží" a to require a od obou ještě include_once a require_once. Syntaxe:


inlude 'cesta/k/vkladanemu/souboru';
require 'cesta/k/vkladanemu/souboru';
include_once 'cesta/k/vkladanemu/souboru';
require_once 'cesta/k/vkladanemu/souboru';


Je zde ještě možnost zapsat inlude (a další) s kulatýma závorkama:


include('cesta/k/vkladanemu/souboru');
requre('cesta/k/vkladanemu/souboru');
...


cesta/k/vkladanemu/souboru může být jak absolutní tak relativní. Hlavní rozdíl mezi include a require je, že když selžou, při použití require se vypíše fatální chyba a skript se ukončí, kdežto při použití include se jen vypíše upozornění a interpret jazyka PHP pokračuje dále ve vykonávání skriptu. Tzn. že pokud jsme na vkládaném souboru závislý, nejlepší je použít require. Rozdíl mezi include a include_once (respektive require a require_once) je, že pokud chceme soubor vložit jen jednou, ačkoliv je uveden například v cyklu použijeme variantu _once (jednou). Když tedy máme ve vloženém souboru deklaraci funkcí, měli bychom použít _once. Vložil-li by se totiž soubor (omylem) vícekrát, vedlo by to k chybě, že funkce jsou již zaregistrovány.

ODESÍLÁNÍ MAILŮ
K odesílání mailů slouží funkce mail(). Její syntaxe je:

Mail(komu, předmět, text [, hlavičky]);


V komu se definuje e-mail příjemce. Je-li příjemců víc, oddělujeme e-mailové adresy čárkamy. Předmět a text je snad každému jasný. Jen si dovolím upozornit, že pokud chceme odřádkování v textu, musíme použít úvozovky a metaznaky \n. V nepoviném parametru hlavičky můžeme nastavit od koho je e-mail, kódování zprávy, prioritu, návratovou cestu pro chyby atp. Hlavičky se oddělují novým řádkem (\n). Odeslání kompletního e-mailu si ukážeme:


<?
$pro = 'muj@prijemce.cz'; // nastavíme příjemce e-mailu
$predmet = 'Automatická zpráva pro odběratele novinek serveru jakpsatweb.cz';
$zprava = "Dobrý den,\nchtěli bychom Vás upozornit, "; // samotná zpráva
$zprava .= "že jste dlouho nebyl na našich stránkách.\n\n\n";
$zprava .= "-----------------\n";
$zprava .= "Toto je automaticý e-mail, neodpovídejte!";

// hlavičky
// všimněte si, že e-mail od koho se nastaví až v hlavičkách!
$hlavicky = 'From: muj@e-mail.cz'."\n"; // můj e-mail
$hlavicky .= "MIME-Version: 1.0\n";
$hlavicky .= "Content-Transfer-Encoding: QUOTED-PRINTABLE\n"; // způsob kódování
$hlavicky .= "X-Mailer: PHP\n";
$hlavicky .= "X-Priority: 1\n"; // priorita (1 nejvyšší, 2 velká, 3 normalální ,4 nejmenší)
$hlavicky .= 'Return-Path: <error@muj.e-mail.cz>'."\n"; // Návratová cesta pro chyby
$hlavicky .= "Content-Type: text/plain; charset=ISO-8859-2\n"; // Kódování
/*
poznámka: normálně se e-maily posílají v ISO-8859-2. Máte alespoň částečnou jistotu, že
vám ji schroustne každý e-mailový klient. Osobně jsem zkusil použít i Windows-1250,
ale nikdy to nedopadlo dobře...
*/

// Nyní zbývá odeslání e-mailu a vypsání, zda-li se e-mail odeslal.
$mail = @Mail($pro, $predmet, $zprava, $hlavicky);
if($mail) echo 'E-mail byl úspěšně odeslán.';
else echo 'E-mail se bohužel nepodařilo odeslat!';
?>

Náš skript tedy při každém zavolání odešle e-mail na muj@prijemce.cz.
anonym
Profil *
neodporucam pouzivat <? ?>, radsej <?php ?>.
<? ?> moze admin zakazat a v nesledujucich verziach vraj nebude fungovat
Hanz
Profil
anonym
Jo to je pravda. Já jsem si teď nainstaloval nové PHP a chvilku jsem dumal nad tím proč mi nejedou scripty (defaultně to tam bylo nastaveno na <?php.
Yuhů
Profil
díky moc, HubiPe, něco z toho použiju.
hubipe
Profil
Osobně používám <? ?> a je to v pohodě. Všichni (většina) poskytovatelů webhostingu má povoleno <? ?>. Tudíž se mi to zdá zbytečné. Asi tak zbytečné jako psát <script language="php"></script>(nebo jak to je...) Pokud potřebuju generovat XML pak echo "<?xml ... ". Ale dodržuju jednu věc, co by měl dodržovat každý, a to nepoužívat $REMOTE_ADDR ale používat super globální proměnné ($_SERVER, $_GET, $_POST, $_REQUEST atd.). CHtěl-li by přes všechno používat $REMOTE_ADDR apod., ať si napíše funkci, které ze super globálních polí udělá zkrácené názvy - jako třeba
$REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
Samozřejmě nedefinovat ručně, ale procházet polem a zapisovat do proměnných pomocí chameleóna.
Leo
Profil
"Osobně používám <? ?> a je to v pohodě. Všichni (většina) poskytovatelů webhostingu má povoleno <? ?>. Tudíž se mi to zdá zbytečné."

Osobne si myslim, ze je to neopravnena lenost, nikdy nevite, v jakym prostredi skript pobezi, nehlede na to, ze na webhostingu vam casto zmeni konfiguraci bez varovani. Plati i pro jine veci (magic quotes, register globals, napr.). Leo
Leo
Profil
Prilisna strucnost skodi - include nevklada soubor. Include dela to, ze ukonci php blok, vlozi soubor, a pak zacne php blok. Rozdil poznate, pokud v includovanem souboru bude

echo "neco";

nebo tam bude

<?php
echo "neco";
?>

Je taky dobry rict, ze vkladany soubor je mozne obecne ziskat primo v prohlizeci, takze treba pripona inc je bez dalsiho zabezpeceni spatna volba, atd.

Leo
Yuhů
Profil
Leo, máš pravdu, ale tahák má sloužit nikoli na výuku jazyka, nýbrž na připomenutí toho, co jsem zrovna zapomněl.
marek_sk
Profil *
Mohu se připojit?

Původní text: Nezáleží na velikosti písmen (až na výjimky).
Návrh: Na velikosti písmen obecně nazáleží, ve jmenech proměnných však ano, ve jménech konstant však zpravidla ano.

Původní text: Poznámky
Návrh: Komentáře

Původní text: Oddělují se sekvencemi /* a */, nebo // až do konce řádku. Nevím, jak funguje mříž #.
Návrh: Mezi /* a */ nebo od // až do konce řádku nebo od # až do konce řádku

K odstavci: Zpracování parametrů z URL
Dotaz: Proč začátečníkům doporučujete změnit nastavení na register_globals = on? Že parametr a z URL dostanou v poli $_GET['a'] imho není nic tak složitého.

Návrh, co přidat:

Viditelnost proměnných
Globální proměnné nejsou přístupné uvnitř funkcí, ale lze to zařídit.
a) příkazem global $jmeno_globalni_funkce; v těle funkce, nebo
b) přístupem přes asociativní pole $GLOBALS indexované jmény globálních proměnných (bez $)

Konstanty
define("JMENO_KONSTANTY", "Ahoj svete");

K odstavci: Čtení cookie
Návrh alternativy: Hodnota cookie se pro potřeby PHP skriptu automaticky načítá do asociativního pole $_COOKIES, tedy například do $_COOKIES["user"] z předchozího příkladu.

K odstavci While:
$i = 1;
while ( $i < 10)
{
echo $i;
$i++;
}

Nebo syntake s dvojteckou (Yuhů ji má radši? :-) )
$i = 1;
while ( $i < 10):
echo "$i";
endwhile;

K odstavci For:
Někde by tam mohlo být napsáno něco jako
for($a=1 /* co se provede pred prvnim pruchodem*/; $a<5 /*co musi platit pred kazdym pruchodem, jinak konec */;$a++ /* co se provede po kazdem pruchodu */)
(..)
Nebo syntake s dvojteckou (Yuhů ji má radši? :-) )
for($a=1;$a<5;$a++):
echo $a;
endfor;

Pokračování příště (bude-li ovšem zájem)
FL
Profil *
FL: Poslys, toto je nekonecny cyklus:

Nebo syntake s dvojteckou (Yuhů ji má radši? :-) )
$i = 1;
while ( $i < 10):
echo "$i";
endwhile;

FL: Nebot $i se stale rovna 1 :) (nebo tomu tak neni? Ze by "dvojteckaů pricitala +1? PHP se teprve "ucim", ale rekl bych, ze mam pravdu...)
jozob
Profil
Yuhů
Dal som si tú stránku do bookmarku. Keď bude čas, pokúsim sa pomôcť s niečim.
ferda nebo franta
Profil *
jozob: informace, ktera rekl bych vubec nikoho nezajima. pokud cekas dekovani od yuhua, mozna se dockas, lae i tak bych rekl ze vsem i yuhuovi je vcelku sumafuk, ze sis tu stranku dal do bookmarku. dokud nebudou vysledky.
kdyby kazdy psal neco podobneho, tak za chvili by diskuze byla z 50% zahlcena prispevky: pockej, reseni ti nepovim, ale treba si na to nekdy najdu cas.
jozob
Profil
ferda nebo franta
Najskôr skús porozmýšľať, prečo som prispel. Dôvod: chcem, aby som toto téma dostával mailom, aby som vedel šo sa okolo toho ťaháku deje. A navyše zakaždým, keď mi príde mail, vzpomeniem si, že by som s tým mohol pomôcť. Áno, informačná hodnota nulová, ale ako inak si mám zadať posielanie mailov?

"pokud cekas dekovani od yuhua, mozna se dockas"
Nie nečakám. Obyčajne nečakám poďakovanie za nič. Ty snáď áno?

"kdyby kazdy psal neco podobneho, tak za chvili by diskuze byla z 50% zahlcena prispevky ... "
Keby každý kritizoval tých 50% príspevkov ako Ty, za chvíľu by tu bolo ďaľších 50% kritika na príspevky.

Ale zaujímalo by ma, koľkým ľuďom si tu pomohol? Už dlhšie sledujem, že "nejaký" Anonymní tu rovnakým štýlom kritizuje príspevky. Ale ďakujem, že si si do kolonky meno napísal aspoň niečo.
sms
Profil *
Yuhů možná jsi si toho nevšiml http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=8&topic=18 845
Ta kalkulacka by mohla byt vazne dobra...neslo by to i v php?
Toto téma je uzamčeno. Odpověď nelze zaslat.

0