Autor | Zpráva | ||
---|---|---|---|
Erixx Profil |
#1 · Zasláno: 25. 9. 2013, 18:08:40
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 |
#2 · Zasláno: 25. 9. 2013, 18:49:43
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 |
#3 · Zasláno: 25. 9. 2013, 21:49:01
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 |
#4 · Zasláno: 25. 9. 2013, 22:32:54
Tak si toto (32 -34)
endif; endif; endif; 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? |
||
Časová prodleva: 3 dny
|
|||
peta Profil |
#7 · Zasláno: 30. 9. 2013, 10:47:51
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 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"); $spojeni = ODBC_Connect("localhost", "jmeno_db", "heslo_db"); if($spojeni === false) { throw new ErrorException(odbc_errormsg()); } |
||
Časová prodleva: 11 let
|
0