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

Člen

Zobrazeno 19 zpráv z 19.
//= 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.
Potrebuješ urobiť fulltextový vyhľadávač... to ja zatiaľ neviem :/
dočasným riešením by mohlo biť v sql LIKE a zástupné znaky % a _ (% znamená rôzny počet znakov, a _ jeden znak, '%ahoj%' vyhľadá aj ahojoj)...
btw: ten tvoj kód je dosť nebezpečný (napr. môžem ti vymazať všetky tabuľky v databáze aj keď nemám prístup), volá sa to sql injection... ale to si v tomto vlákne neprišiel riešiť
No, součástí toho zadání bylo aby to bylo ošetřené ale myslel jsem,
že htmlspecialchars stačí a jinak to stím LIKE tak samozřejmě bude, jinak by to nevyhledalo
to vím. Ale nevím jak to mám udělat(jak sem psal předtím).
A do toho mi to tedka nevypisuje ten nadpis
htmlspecialchars($string, "UTF-8");
používaš keď vypisuješ niečo z databázy (aj to by som skôr odporúčal používať
htmlentities($string, "UTF-8");
lebo htmlspecialchars sa dá oklamať
bezpečnostná chyba je keď vkladáš dáta do databázy, alebo do where ... tam použi minimálne
mysql_real_escape_string($string);
poprípade
mysqli_real_escape_string($string);
lebo mysql je od php 5.5 vyradený a nahradzuje ho mysqli
SELECT `nadpis` FROM `poznamky` WHERE `nadpis` LIKE '%ahoj%';
teda u teba skus
$vyhledanynadpis = "%" . mysqli_real_escape_string($_GET['vyhledanynadpis']) . "%";
$vybrat = mysql_query("SELECT `nadpis` FROM `poznamky` WHERE `nadpis` LIKE $vyhledanynadpis");
cca tak dáko, musíš s tým trochu poexperimentovať
Aha, dobře teď to mám :
$vyhledanynadpis = "%" . mysqli_real_escape_string($_GET['vyhledanynadpis']) . "%";
$vybrat = mysql_query("SELECT `nadpis` FROM `poznamky` WHERE `nadpis` LIKE $vyhledanynadpis");
echo $vybrat[`nadpis`];
Ted už je to bezbepčné? jestli jsem to pochopil dobře.
vďaka použitiu mysqli_real_escape_string určite bezpečnejšie než
predtým
pri výpise premennej ale odporúčam zas to htmlentities inak ti hrozí zas iné nebezpečie známe ako XSS útok, kedy sa ti na stránke vypíše škodlivý kód ktorý bol predtým uložený do databázy a pozmení ti stránku
Nevím, jak hodně se tomu věnuješ, ale pokud tě to baví a chceš to
umět (a máš do konce projektu trochu času ), zkus se podívat na články o
ovladači PDO.
Díky PDO nebudeš muset téměř vůbec bezpečnost řešit, co se vstupních dat týká - obsahuje tzv. parametrizované dotazy.
Viz články na itnetwork:
http://www.itnetwork.cz/…ovladace-pdo
http://www.itnetwork.cz/…-a-modularne
http://www.itnetwork.cz/…ion-a-obrana
Příklad užití PDO:
$db = new PDO("mysql:host=127.0.0.1;dbname=poznamky", "jmeno", "heslo");
if (isset($_GET["vyhledanaPoznamka"])) {
// použití parametrizovaného dotazu
$query = $db->prepare("
SELECT informace
FROM `poznamky`
WHERE `nadpis` LIKE '%?%'
");
// namísto otazníku se dosadí hodnota proměnné - PDO ji automaticky ošetří
$query->execute(array($_GET["vyhledanapoznamka"]));
// uloží vyhledaný výsledek do pole
$data = $query->fetch(PDO::FETCH_ASSOC);
if ($data !== FALSE) { // FALSE je v případě, že nebyl nalezen žádný řádek
echo $data["nadpis"];
} else {
echo "Nebyla nalezena žádná poznámka.";
}
}
Nejsem si 100% jistý, zda ten zápis LIKE '%?%'
je takto
správně, ale řešení pomocí parametrizovaných dotazů je mnohem
výhodnější.
ako písal pavelco: "pokud tě to baví a chceš to umět"
OOP sa oplatí vedieť...
"V kroužku se učíme normální php a tak jsem nechtěl aby se mi to pletlo."... to sa ti pliesť nebude, štrukturované (normálne) programovanie budeš používať stále, ale OOP ti pomôže kód rozdeliť na triedy, projekt nadobudne istý druh štruktúry, kód sa bude dať ľahšie upraviť a znovupoužiť...atď
PS: a pozri obrázok
No nevadí, ale tak musí to jít i jink ne? Jinak já sem dával odpovědět mam dojem ale co uz
V tom případě je dle mě
$vyhledanynadpis = "%" . mysqli_real_escape_string($_GET['vyhledanynadpis']) . "%";
tento script OK
Mnoho začátečníků se domnívá, že OOP je něco neskutečně hardcore a nikdy to nepochopí. Opak je ale pravdou, jelikož je OOP vlastně velmi jednoduché - je to totiž způsob jak dělat věci (programovat) tak, jako to je v reálném světě. Jde jen o to si zvyknout na jiný přístup.
Každopádně pokud zatím nechceš zasahovat moc do OOP tak nevadí, úplně
totiž bude stačit, pokud si uděláš ten PDO wrapper a budeš jej volat v
tvém současném kódu tak, jako to teď děláš s mysql/i funkcemi...
Na ITnetworku jest toto téma zpracováno v sérii "NERS - neobjektový
redakční systém" - http://www.itnetwork.cz/php/databaze -, takže koukni na
začátky.
V podstatě budeš psát něco jako kód níže, což určitě přežiješ a "všechno" bude díky PDO bezpečné.
Db::query(`... tvoje sql ...`, $hodnota1, $hodnota2);
Tady je to popsán rozdíl LIKE vs MATCH...
http://stackoverflow.com/…2884/3281252
Presne ako napísal Honza Bittner. OOP nie je niečo hardcore ale práve
naopak.
Ja keď som sa učil PHP, tak som sa tiež učil najprv len štruktúrovane.
Myslel som si, že OOP je len pre profesionálov a spravil som chybu. Áno,
štruktúrované ťa naučí pracovať a poznať PHP lepšie, ale naopak ťa
nenaučí rozmýšľať objektovo = neskorší problém a zbytočný čas
navyše strávený učením.
Stáhnul jsem si ten balíček co je na konci tutoriálu a upravil jsem ten kód tak, aby to sedělo na to co potřebuju já. Chtěl jsem to zpustit ale napsalo mi to chybu. Téhle chybě vůbec nerozumím tak jsem se chtěl zeptat, jestli by mi někdo nepomohl. Píše to tam chybu v souboru Db.php ale v tom souboru jsem nenašel nic konkrétního.. jsou tam jen proměnné ale žádné "dosazení" do nich. Takže vůbec nevím. Pomohl by mi někdo prosím?
Zobrazeno 19 zpráv z 19.