Diskuze: PHP ALEBO FLASK ?
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Co se tyce PHP, muzes zacit psat objektove a pouzivat MVC (ModelViewController) a kod bude prehlednejsi a nebude se cpat HTML do php.
PHP je snad nejjednodušší jazyk na naučení s jednoduchou syntaxí. Pravidla pro uvozovky i apostrofy jsou tu krásně vysvětlena, stačí jen opakovat lekce, dokud to řádně nepochopíš a až pak pokračovat dále. Navíc začátečník ocení dynamické typování. Nemusíš se tak zabývat, jestli se jedná o string, integer, float atd. Pomocí copy / paste se vůbec nic nenaučíš. Tuším, že v seriálu PHP se zde pracuje s databázovým wrapperem, který používá statické metody. To je pro tebe již vyšší dívčí a je jasné, že tomu nemůžeš rozumět (metody a funkce se pak volají pomocí -> nebo v případě statických metod ::). Zkus nejprve pochopit princip GET a POST a jak funguje URL a formuláře, co se tam děje, jak se předávají proměnné atd. Pak až se pusť do databází. Nemá smysl spěchat a chtít všechno pochopit za jedno odpoledne.
super , ďakujem . skúsim sa naučiť to get a post a potom pôjdem dalej . to get a post sa viaže tuším na formulár na parameter name , skúsim sa stým pohrať.
ok , pustil som sa na tie formuláre ,
mám jednoduchý formulár kde input name = "informácia" . ako túto
informáciu mám vypísať ? nejde mi to . toto je ten formulár .
<form action = "index.php" method = "post">
<input type = "text" name = "informacia">
<input type = "submit">
</form>
skúšal som použiť print_r ($_REQUEST) ; to mi fungovalo ..., ale ako vypísať hodnotu ktorú som zadal do "informácia" ? skúšal som print_r $_informacia (nefungovalo), skúšal som print_r ("informacia") nefungovalo , skúšal som print_r ['informacia'] , alebo print_r [$informacia] . atd. tak isto som skúšal echo a nefungovalo ..
to znamená zatial mi funguje len toto :
<?php
print_r ($_REQUEST);
?>
<form action = "index.php" method = "post">
<input type = "text" name = "informacia">
<input type = "submit">
</form>
ako mám vypísať hodnotu ktorú som zadal do do inputu menom "informacia" ? BTW ešte tam nechcem pridavať ochranu proti XSS , to potom budem robiť korektne , teraz sa to potrebujem učiť . opatrenia proti xss robia pre učenie zložitejší kod a na učenie to netreba.
to print_r mi tam pridáva to arrey . aha . takže echo ($_POST); ? to mi nefunguje :/ print ($_POST) tak isto ..
kde mám chybu ? :/
<?php
if (issset($_POST ["odoslat1"])) {
echo ($_POST["informacia"]) ;
}
?>
<form action = "index.php" method = "post">
<input type = "text" name = "informacia">
<input type = "submit" name = "ososlat1" value = "ososlat">
</form>
Mas issset misto isset. Celkove to vypada jako bys neumel psat. Cekujes odoslat1 ale v name mas ososlat1
atribut name mate v html napsany jako ososlat ale v php jako odoslat, mezi atributy a uvozovkami se mezeri nedelaji
name="odoslat1"
, co se tice print_r tak ta vypisuje list urcitych polozek (array) protoze echo vypisuje string a jeste neco dalsiho, neviem presne nazev ale neni mozne takto vypsat array. Vypsani arraye jinak jak pomoci printr jde pomoci cyklu ale s cykly bych jeste nezacinal. Jedna rada, cekuj si i jestli jsou vyplneny boxy, muze se potom odeslat formular bez toho aby v nem neco bylo, ano muzete si dat na strane klienta atribut required ale POST pozadavek se da poslat i vzdalene a ochrana na strane klienta je takova ochrana neochrana, vzdy si to muze upravit na sve strane a potom nevite co muzete ocekavat.. jinak da se potom zjistit jak se data posilaji pomoci $_SERVER['REQUEST_METHOD].
if($_SERVER['REQUEST_METHOD'] === 'POST') {...}
ale to nemeni nic na tom ze nejdulezitejsi validace je na strane serveru nikoliv uzivatele. A pomoci XSS se brani jednoduse pomoci funkce htmlspecialchars, nejlepe i s flagem ENT_QUOTES.
htmlspecialchars($string, ENT_QUOTES)
ale v tomhle pripade to je k nicemu, na nejaky nechteny kod se nikdo jiny nedostane pokud nezada stejny input. htmlspecialchars funguje ze prevede vse co jde na html entity (uvozovky napriklad >, <), hlavne nedelej copy paste lepsi udelat hello world nez kompletny system bez toho aby si rozumnel aspon zakladnim pojmum. Jestli chces tak mi napis rano a muzu ti s necim pomoct, verim ze se tu najdou i lepsi v php ale aspon neco zakladniho.
"kde mám chybu ? "
zkousel jsi zapnout error_reporting() ?
<?php
if (isset($_POST ["ososlat1"])) { // zde, nazev funkce je isset ne issset,
// zde, opet, tlacitko je nazvane name = "ososlat1", ne odoslat1
if (isset($_POST ["informacia"]))
echo htmlspecialchars($_POST["informacia"]) ; // zde, pro echo se nepouzivaji zavorky jako pro print_r
// zde, opet, nemuzes vypsat hodnotu, ktera nebyla odeslana (ano, ty ji ve formulari mas, ale hacker ti ji nemusi poslat, stav, ktery musis vyresit)
// zde do tretice, pokud vypisujes do html kodu hodnotu, mel bys pouzit htmlspecialchars (pokud jsi nechtel vypsat html kod)
}
?>
<form action = "index.php" method = "post">
<input type = "text" name = "informacia">
<input type = "submit" name = "ososlat1" value = "ososlat">
</form>
Jinak, ja to resim tak, ze jsem si vsechny zmatecni funkce pojmenoval po
svem.
function escapeHtml($str) {return htmlspecialchars($str);}
A klidne programuj v pythonu, kdyz ti to vyhovuje a jde lepe. Ja osobne davam prednost prehlednejsimu php a jeho pouzitelne online dokumentaci php.net . Navic sis vybral v pythonu nejaky framework, ten ti zjednodusuje praci tim, ze ma spoustu veci resenych rozumne, proti zakladnimu pythonu. Pro php existuji tez ruzne frameworky. Treba pro mail, formulare a dalsi veci.
Tipy:
html, css - bootstrap css framework
js - jquery framework
@ini_set('error_reporting', E_ALL); // ruzne druhy povoleni chyb pro ruzne verze php
@ini_set("display_errors", "on");
//@ini_set('display_errors', 1);
//@ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
ob_start(); // vykreslovani do pameti pro prikazy echo, print, zrychli zobrazovani dlouhe stranky
header('P3P: CP="CAO PSA OUR"'); // aby session fungovala spravne v iframe v IE -- to asi nepotrebujes, pokud nepouzivas iframy
header("Content-Type: text/html; charset=UTF-8"); // nastaveni kodovani na utf-8, pro jistotu
setlocale(LC_TIME, "Czech_Czech Republic"); // dalsi nastaveni ohledne jazyka, datumu, casu...
setlocale(LC_ALL, "CZ_cs.UTF-8");
if (!isset($_SESSION)) {session_start();} // spusteni session, pokud uz spustene nejsou -- to zatim asi take nepotrebujes
Ja vim, na zabiti. Ale proste se neda spolehat, ze ma server nastaveni, jaka potrebujes. Tak je lepsi si je vynutit.
Zobrazeno 11 zpráv z 11.