Category Archives

40 Articles

MySQL: Rychlost UPDATE sloupce v závislosti na přítomnosti indexů

Nedávno jsme s Lukášem Churým a Ondrou Vašíčkem řešili rychlost operace UPDATE v závislosti na tom, jestli upravovaný sloupec má či nemá nastavený index.

Představte si, že máme v MySQL 5.0 tabulku o několika sloupcích, dva z nich jsou „id“ a „xy“. Nad sloupcem „id“ je přidělený index. Sloupec „xy“ index nemá. Rychlost UPDATE sloupce „xy“ trvá nějaký čas.

Otázka zní, jestli UPDATE zabere stejný čas i v případě, kdyby sloupec „xy“ měl přidělený index.

Udělal jsem jednoduchý test, který přináší odpověď.

Jak na to: SQL injection, magic_quotes_gpc, addslashes() a stripslashes()

V názvu článku jsem vyjmenoval slova, která jsou strašákem nejednoho PHP programátora. Strašák to je ale pouze uměle vytvořený, vycházející z neznalosti problematiky.

Dost často se ve spojení s SQL injection (typ útoku hackera) zmiňuje PHP konstanta magic_quotes_gpc. Prý, že pokud je zapnutá, tak se dá SQL injection předejít. A víte, že od PHP 5.3 bude standardně magic_quotes_gpc vypnutá?

Znamená to, že poté budou SQL dotazy napadnutelné pomocí SQL injection? Ale vůbec ne.

Konstanta magic_quotes_gpc totiž s ochranou SQL injection nemá v podstatě nic společného. Pouze zde existuje průsečík v možnosti jejího využití. Proto ji neznalí programátoři začali přisuzovat větší váhu, než má. Váha magic_quotes_gpc je samozřejmě nulová, zvláštně, když od PHP 5.3 bude vypnutá a v PHP 6 zanikne úplně.

Vysvětleme si tedy, oč jde. SQL injection je vážný problém.

mPDF: Snadný export HTML stránek do PDF

by Zdeněk Večeřa 7 Comments

FDFDoposud jsem neznal nějaký snadný a efektivní způsob exportu HTML stránek do PDF formátu, za pomocí PHP. Ano, existuje PHP třída FPDF, ale něco v ní vytvořit mi zrovna jako efektivní nepřijde. Viz kus kódu. Pokud byste FPDF přece jen použili, mrkněte k Zaachimu na blog. Radí tam, jak na české znaky.

Nad touto třídou existuje nástavba, troufám si říct „naštěstí“. Jmenuje se mPDF a nabízí přímý export z HTML stránek do PDF za podpory UTF-8 kódování, tedy s bezproblémovou interpretací českých znaků.

FCKeditor: získání obsahu a vložení textu

by Zdeněk Večeřa 0 Comments

Vytvoření formuláře FCKeditoru pomocí PHP

<?php
$oFCKeditor = new FCKeditor('body') ;
$oFCKeditor->Value = $form['body'];
$oFCKeditor->Create();
?>

Získání obsahu formuláře FCKeditoru:

<input type="button" onclick="alert(FCKeditorAPI.GetInstance('body').GetData());" value="Submit" />

Vložení textu do formuláře FCKeditoru:

<input type="button" onclick="FCKeditorAPI.GetInstance('body').InsertHtml('<strong>ahoj</strong>');" value="Submit" />

phpMyAdmin 3.0.1: blesková správa MySQL databáze

Při vývoji většinou pracuji přímo s databází na webhostingu (přes vzdálený přístup). Pokud je vyvíjená aplikace přístupná pro úzký okruh testerů, je daleko snazší, když webová aplikace využívá stejnou databázi, a to jak z localhostu, tak i přímo na serveru. Vždy mám totiž přístup ke stejným datům.

Proto nějaká lokální databáze, databáze na serveru, synchronizace, atp., jsou pro mě spíše zdržování. Abych si usnadnil práci a nemusel se připojovat na phpMyAdmina na serveru, využívám u sebe na localhostu lokální instalaci phpMyAdmin. Instalace je ale dosti nadnesené slovo. Stačí stáhnout, rozbalit, nastavit pět hodnot a spustit.

Doposud jsem využíval phpMyAdmin ve verzi 2.9.2. Nyní jsem přešel na phpMyAdmin 3.0.1.1. A co že přináší? Nejmarkantnější rozdíl oproti předchozí používané verzi je v rychlosti. Ta se totiž zvýšila, ale rapidně.

Nový NetBeans IDE 6.5: nástroj pro PHP a JavaScriptové vývojáře

Vyšel nový NetBeans 6.5. Nabízí podporu pro skriptovací jazyk PHP, automatické dokončování funkcí, jejich napovídání s provázaností na třídy, kontrolu syntaxe a zvýraznění klíčových slov.

Součástí je ladící nástroj Xdebug. Nová verze dále přichází se vylepšenou podporou JavaScriptu, CSS a techniky AJAX. Můžete také například využít ladění JavaScriptu na Firefoxu a Internet Exploreru.

PHP a XML: „Na začátku externí entity chybí procesní instrukce xml“

by Zdeněk Večeřa 3 Comments

A zase ty hvězdičky! Přes AJAX mám řešené hodnocení něčeho. Kliknu na hodnocení, pošlou se data na zpracování, server vygeneruje XML, který se vrátí ke zpracování JavaScriptem (pro změnu stavu na stránce). Nutné je zdůraznit, že data jsou ve formátu XML vrácena zcela korektně. Přesto Firebug vypisuje chybu:

Na začátku externí entity chybí procesní instrukce xml
undefined

Aby se nám to ještě trochu zamotalo, tak se tato chyba vyskytuje pouze, pokud script spouštím na localhostu. Na serveru funguje bez problémů. Chyba byla způsobena includovanými soubory.

MySQL: Jak získat poslední vložené ID?

Když už zase psát, tak ať je to užitečné.

Určitě jste někdy při práci s databází (MySQL) chtěli zjistit ID nového prvku, který jste vložili přes příkaz INSERT. PHP nabízí funkci mysql_insert_id(), která přesně toto umožňuje. Vrátí generovanou hodnotu ID posledního příkazu INSERT. Je tedy nutné, aby se funkce mysql_insert_id() nacházela bezprostředně za dotazem s příkazem INSERT.

Tabulka musí obsahovat sloupec s nastaveným AUTO_INCREMENT. Hodnotu vloženého ID můžete také zjistit přímo přes SQL dotaz. Stačí použít funkci LAST_INSERT_ID().