A jedeme dál ...
Človíčkův Weblog aneb Michal Horák bloguje

Programování


PHP a MySQL: Vyhodnocení dotazu

 | 12.10.2006

Někdy potřebujeme při psaní stránek testovat různé SQL dotazy, aby jsme našli optimální řešení. K tomuto účelu jsem si napsal jednoduchou pomůcku.

Požadavkem bylo, abych pouze napsal svůj SQL dotaz a skript mi vrátil všechny výsledky. Řešení je jednodušší než by se mohlo zdát. Funkcí mysql_query() pošleme dotaz na databázi, výsledky vložíme do pole pomocí mysql_fetch_array() s parametrem MYSQL_ASSOC, kterým zajistíme aby jsme v poli měli výsledky pouze pod asociativními názvy. Potom jen projdeme celé pole a vypíšeme výsledky.

<?
$sql
['server']="localhost";
$sql['databaze']="databaze";
$sql['jmeno']="root";
$sql['heslo']="";

$dotaz="SELECT * FROM tabulka";

function 
VratDotaz($dotaz$mysql){
    
$spojeni = @MySQL_Connect($mysql['server'],$mysql['jmeno'],$mysql['heslo']);
      @
MySQL_Select_DB($mysql['databaze']) or die("<p>Nejsme připojeni</p>");
    
$dotaz htmlspecialchars(stripslashes($dotaz));

    
$dotaznik=mysql_query($dotaz);
    if(!
$dotaznik) echo("<p>".mysql_error()."</p>");
    
$nacti_klic=@mysql_fetch_array($dotaznikMYSQL_ASSOC);
    echo 
"<table><tr class=\"top\">";
    foreach (
$nacti_klic as $key => $value) {
            echo 
"<td><strong>$key</strong></td>";
        }
    echo 
"</tr>";
    while(
$nacti=@mysql_fetch_array($dotaznikMYSQL_ASSOC)){
        echo 
"<tr>";
        foreach (
$nacti as $key => $value) {
            echo 
"<td>$value</td>";
        }
        echo 
"</tr>";
    }
    echo 
"</table>";
}

VratDotaz($dotaz$sql);
?>

12.10.2006 09:44 | Programování | Komentáře (2) | Trvalý odkaz | 5842x | Linkuj.cz

PHP: Jak automaticky přidávat pevnou mezeru za předložky

 | 9.10.2006

Stejně jako u sazby textu při tisku existují typografická pravidla, tak existují typografická pravidla i pro web. Jak vyřešit nezalamování textu v případech, kdy máme před slovem jednopísmenné předložky nebo spojky, si ukážeme dnes.

Řešení je docela jednoduché, použijeme funkci ereg_replace(string vzor, string nahrazení, string řetězec), kde použijeme regulárního výrazu. Ten sestavíme tak, že uděláme výčet znaků, které chceme změnit. Regulární výraz tedy bude vypadat takto: „([svzkuoiaSVZKAUOI])“. Tyto znaky nahradíme řetězem „ znak&nbsp;“.

Příklad kódu:

<?php

$text
="Dnes i včera bylo v Šebetově pěkně";
$typotext=ereg_replace(" ([svzkuoiaSVZKAUOI]) "" \\1&nbsp;"$text);
echo 
"<p><strong>Neupravený text: </strong>".htmlspecialchars($text)."</p>";

echo 
"<p><strong>Upravený text:</strong>  ".htmlspecialchars($typotext)."</p>";
?> 

9.10.2006 22:27 | Programování | Komentáře (9) | Trvalý odkaz | 6963x | Linkuj.cz

Kompromis ve vyplňování otázky pro antispamový filtr

 | 7.10.2006

V této době snad každý, kdo na svých stránkách umožňuje přidání komentářů k článku, návštěvní knihu čí odeslání e-mailu přes kontaktní formulář musí řešit přibývající nárůst spamu. Někteří všechny data kontrolují a když dorazí nějaký spam, potom jej smažou, což může být po určité době naprosto nezvladatelné. Jiní si dělají seznamy IP adres, zakázaných slov nebo obojího a když se něco shoduje pak příspěvek neuloží. Další možností je přidat políčko do formuláře a pak zkontrolovat jeho výstup, když vše projde, pak se můžou potřebná data uložit. Jenže nikomu se nechce nic vyplňovat navíc a tak se vymýšlejí různé finty, aby uživatel nemusel nic dělat.

Finta první

Ono přidané políčko schováme pomocí css a necháme je prázdné, protože se roboti nezabývají tím co je a co není pomocí css schované, tak políčko vidí. To je to co potřebujeme ;o) Proč? Dobrým zvykem robota je vyplňovat všechna políčka formuláře a tedy i to pro obyčejného uživatele schované. Stačí tedy při ukládání zkontrolovat, zda je políčko vyplněno a pokud není, tak data uložit.

Finta druhá

Druhou fintou je vyplnění správné odpovědi na otázku pomocí JavaScriptu a opět schování políčka s tím, že když má nějaký uživatel vypnutý JavaScript, tak mu políčko ukážeme i s otázkou pro správné vyplnění. Počítá se totiž s tím, že roboti zatím JavaSript neovládají a tak se jim odpověď na otázku nepředvyplní. Jakmile je odpověď na otázku správná, můžeme data uložit. Nikdo ovšem nemůže vyloučit, že se roboti JavaScript již brzo naučí. Dokonce jsem už někde četl (bohužel už nevím kde to bylo), že se tak již stalo. Zatím je to ovšem docela bezpečná možnost.

Finta třetí - Kompromis

Moje finta je taková, že mám odpověď na otázku po dlouhou dobu stejnou a to až do doby, kdy se podaří robotům nalézt odpověď, což může být třeba na pořád. Uživatel bude nucen odpověď vyplnit pouze jednou a pak mu ji uložíme do COOKIES prohlížeče. Vždy když bude chtít znovu vyplnit formulář, odpověď na jeho otázku již bude předvyplněna. Jestliže uživatel nemá ve svém prohlížeči cookies povoleny, potom musí na otázku odpovídat pokaždé. Řekl bych, že je to o něco bezpečnější varianta než vyplnění odpovědi JavaScriptem, ale také trochu nepříjemnější pro uživatele.

7.10.2006 12:20 | Programování | Komentáře (7) | Trvalý odkaz | 4675x | Linkuj.cz

Předchozí příspěvky | 1 | 2 | 3 |

Tipy na přečtení

Kategorie

Vyhledávání

Odkazy

Fotoblog

Poslední fotgrafie z fotoblogu

Nejčtenější příspěvky za poslední týden

Poslední příspěvky

"A jedeme dál ..." Človíčkův Weblog aneb Michal Horák bloguje. (c) Michal Horák (Človíček webdesign) 2006