Autor Zpráva
Erixx
Profil
Zdravím,
našel jsem na webu tento jednoduchý (ale starší) script na vyhledávání a výpis obsahu z databázové tabulky od Koska.
Bohužel jej nemohu rozjet. Script se nepřipojí vůbec k databázi (přihlašovací údaje zadávám správně, ale ani to nevypíše, pokud je zadám špatně..).
Poradí někdo? Díky.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Prohledávání adresáře firem</TITLE>
</HEAD>
<BODY>
<H1>Prohledávání adresáře firem</H1>
<FORM>
Zadejte začátek názvu firmy: <INPUT NAME=Nazev VALUE="<?echo $Nazev?>">
<INPUT TYPE=Submit VALUE="Hledej">
</FORM>
<HR>
<?
if ($Nazev!=""):
    $spojeni = ODBC_Connect("localhost", "jmeno_db", "heslo_db");
    if (!$spojeni):
        echo "Nepodařilo se připojit k databázi.";
    else:
        $vysledek = ODBC_Exec($spojeni, 
                    "SELECT * FROM Adresy WHERE Nazev LIKE '$Nazev%'");
        if (!$vysledek):
            echo "Chyba při provádění dotazu v databázi.";
        else: 
            echo "Počet nalezených adres: ".ODBC_Num_Rows($vysledek);
            echo "<TABLE CELLPADDING=2 CELLSPACING=0 BORDER=1>\n";
            echo "<TR BGCOLOR=SILVER><TH>Název</TH><TH>Telefon</TH></TR>\n";
            while (ODBC_Fetch_Row($vysledek)):
                echo "<TR><TD>".ODBC_Result($vysledek, "Nazev")."</TD>";
                echo "<TD>".ODBC_Result($vysledek, "Tel")."</TD></TR>\n";
            endwhile;
            echo "</TABLE>\n";
        endif;
    endif;
endif;
?>
</BODY>
</HTML>
Rfilip
Profil
1)Kod předpokládá zapnuté register_globals,které jsou již radu verzí z bezpečnostních důvodů vypnuté(vypnuto od 4.2.0, od 5.3.0 deprecated, v 5.4.0 odstraněno), tudíž všechny výskyty $Nazev nahrad $_GET["Nazev"];
2)Kod je náchylný na SQL injection, řádek 19-20 nahrad tímto:
$dotaz   = odbc_prepare($spojeni, "SELECT * FROM Adresy WHERE Nazev LIKE '?%'");
$vysledek = odbc_execute($dotaz, array($_GET["Nazev"]))
Erixx
Profil
Rfilip,
register_globals jsou samozřejmě na off,
$_GET jsem popřidával, na to jsm zapoměl,
nicméně, napojení k databázi stále bez odezvy, výpis žádný, nic se nezobrazuje.. :/
Rfilip
Profil
Tak si toto (32 -34)
        endif;
    endif;
endif;
Nahrad tímto:
        endif;
    endif;
else:
    echo '$_GET["Nazev"] = ""';
endif;
var_dump($_GET["Nazev"]);
peta
Profil
Pro vypis chyb je dobre dat na zacatek kodu:
<?php
@ini_set('error_reporting', E_ALL);
@ini_set("display_errors", "on"); 
error_reporting(E_ALL);
?>

Pro pripojeni k odbc mas v php dokumentaci hnedka jeden z prvnich komentaru i s vypisem chyb odbc
http://cz1.php.net/function.odbc_execute
<?PHP

$rConnection = odbc_connect('AS400', 'QSECOFR', 'QSECOFR');
if($rConnection === false) {
    throw new ErrorException(odbc_errormsg());
}

$rResult = odbc_prepare($rConnection, 'SELECT * FROM KMNSH00F WHERE SHTMST > ?');
if($rResult === false) {
    throw new ErrorException(odbc_errormsg());
}

if(odbc_execute($rResult, array('0001-01-01 00:00:00.000000')) === false) {
    throw new ErrorException(odbc_errormsg());
}

odbc_result_all($rResult);

odbc_free_result($rResult);

odbc_close($rConnection);

?>

Kosek zrovna neni moc cool literatura. Mozna se to jevi jednoduche, ale literatura je zastarala, novacek se musi ptat, proc to ci ono nefunguje. Nema v tom system, placa si php kod s html, coz pak snizuje prehlednost a snadno muzes zapomenout nejaky tag nebo se zamotat do podminek typu:
<?php if (neco)  { ?>
<p>...</p> a dalsi html kod
<?php } else { ?>
<p>...</p> a dalsi html kod
?>
Erixx
Profil
Nefunguje nic :)
I přesto díky za postřehy. Je to vážně asi staré a neběhá to.

Nevíte o nečem takovémhle? Univerzální jednoduchý script na vyhledání položky z databázové tabulky?
peta
Profil
Erixx: Jake chyby to vypisuje pri zapnuti error_reporting? Tos nenapsal, to je dost zasadni. Treba tam vubec nemas odbc modul v php.
Erixx
Profil
peta:
Nevypisuje to vubec nic.
Ja prave ani vubec nevim, co je odbc modul. Nesetkal jsem se s tim.
Nahodou jsem narazil na tento script, tak jsem jej chtěl vyzkoušet a zprovoznit.
Chtěl bych dát na web jednoduchý vyhledávač vypisující data z jedné databázové tabulky např. dle Názvu.
peta
Profil
Aha. Aby ti fungovalo odbc, tak je mozna treba do php doinstalovat odbc knihovny. Pak je mozna treba pustit odbc server (pripadne nastavit jeste pred tim prihlasovaci udaje a dalsi nastaveni).
"script na vyhledávání a výpis obsahu z databázové tabulky"
Pak je treba do db pridat tabulku a naplnit nejakymi udaji. (jestli jsi nekdy pracoval s excelem, tak tak nejak vypada tabulka pro databaze).
Pak teprve ti pojede php kod, pokud v nem nemas dalsi chybu.
Takze bych si hledal spis priklady na mysql nez odbc databaze. Nebo, jestli to zvladnes, opravit si to pro mysql. Postup je pak uplne stejny. Rozdil je jen v tom, ze v balicku Wamp server (pro win) bezi po spusteni php i mysql a neni treba nic doinstalovavat.

Mno, a chyby, mozna mas nastaveny php tak, aby chyby nezobrazoval, ze proste prikazy php ini_set a error_reporting ignoruje a neprebiji nastaveni php serveru. Coz se dela treba na serverech zamerne, aby hackerum nevypisovalo zadne chyby php kodu, ktere by mohli vyuzit.

error_reporting('E_ALL') nic nevypisuje
zkus dát do .htaccess
php_flag display_errors on

potlačení chybových hlášek
-> http://cz1.php.net/manual/en/errorfunc.configuration.php
---
Tak jsem do toho php.ini strčil
error_reporting = E_ALL & ~E_NOTICE 
---
nicméně error_reporting je možno nastavit jak v php.ini, tak v httpd.conf, tak v .htaccess
ve druhém a třetím pomocí
php_value error_reporting 2147483647
http://diskuse.jakpsatweb.cz/?action=vthread&forum=9&topic=112240

Pokud se nepripoji k db, tam to musi vypsat nejakou chybu. Propadne ten prikaz muzes obohatit podle manualu, jak jsem psal
Zmenit z
$spojeni = ODBC_Connect("localhost", "jmeno_db", "heslo_db");
na
$spojeni = ODBC_Connect("localhost", "jmeno_db", "heslo_db");
if($spojeni === false) {
    throw new ErrorException(odbc_errormsg());
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: