Autor | Zpráva | ||
---|---|---|---|
Jack06 Profil |
#1 · Zasláno: 30. 1. 2009, 18:59:49
Prosím mám dotaz..:
vypis.php <?php require "../config.php"; $dotaz_na_databazi = new mysql_dotaz('localhost', 'root', 'vertrigo', 'pokus'); $dotaz_na_databazi->dotaz("SELECT * FROM table_pokus"); while($radek = $dotaz_na_databazi->vysledek()){ echo $radek[1].'<br>'; } ?> config.php <?php function __autoload($trida) { $file = "../class/". $trida . ".php"; try { if(!file_exists($file)) { throw new Exception("Class '".$trida."' was not found. on "); } include_once $file; } catch (Exception $e) { echo $e->getMessage(); } } ?> (složka class)/mysql_dotaz.php <?php class mysql_dotaz{ protected $hostitel; protected $jmeno; protected $heslo; protected $databaze; protected $spojeni; public $dotaz; public function __construct($hostitel, $jmeno, $heslo, $databaze){ $this->hostitel = $hostitel; $this->jmeno = $jmeno; $this->heslo = $heslo; $this->databaze = $databaze; $this->spojeni = mysql_connect($this->hostitel, $this->jmeno, $this->heslo); if(!$this->spojeni){ echo 'Spojení s databází selhalo!'; } if(!mysql_select_db($this->databaze, $this->spojeni)){ echo 'Nebylo možné vybrat databázi'; } } public function dotaz($dotaz){ $this->dotaz = mysql_query($dotaz, $this->spojeni) or die (mysql_error()); } public function vysledek(){ return mysql_fetch_array($this->dotaz, $this->spojeni); } public function __destruct(){ mysql_close($this->spojeni); } } ?> Bohužel z neznámích důvodů mi to nejde.... když __autoload z configu přesunu do souboru vypis.php tak to funguje a když class dám do souboru výpis kde je žádaná, tak to také funguje.. Když na ni tážu přez konfik nejde to.. Prosím poraďte.. Díky. chyba, kterou mi to vypisuje.. Warning: mysql_fetch_array() [function.mysql-fetch-array]: The result type should be either MYSQL_NUM, MYSQL_ASSOC or MYSQL_BOTH. in C:\Software\VertrigoServ\www\prace\superpokec_beta\class\mysql_dotaz.php on line 28 |
||
Mike8748 Profil |
#2 · Zasláno: 30. 1. 2009, 19:39:22
podivej se do php manualu, na funkci mysql_fetch_array
prijdes na to ze druhej parametr funkce nema bejt resource pripojeni do db, ale neco jinyho |
||
Majkl578 Profil |
#3 · Zasláno: 30. 1. 2009, 19:39:57 · Upravil/a: Majkl578
tak se koiukni na spravnou syntaxi te funkce, mas ji spatne
edit: pozde |
||
Jack06 Profil |
#4 · Zasláno: 30. 1. 2009, 20:25:15
a tak mi prosím poradíto co jak přepsat?? děkuji
|
||
Měsíček Profil |
#5 · Zasláno: 30. 1. 2009, 20:27:00
Přečetl sis tu hlášku a alespoň jednu stránku v dokumentaci k funkci mysql_fetch_array()? Trochu snahy by ti neuškodilo.
|
||
Jack06 Profil |
#6 · Zasláno: 30. 1. 2009, 20:34:51
Mno četl jsem to, ale s php5 začínám.. Spíše mě udivuje že když to mám v jednom souboru tak to jde akdyž to hodím jako require na to tak to nejde.. jak to napsat normálěn vím, ale zkouším jak to napsat v php5 a nejde mi to.. už jsem zkoušel otočit více věcí na tom řádku.. a nic.. Bych se jinak neptal :-(
|
||
Měsíček Profil |
#7 · Zasláno: 30. 1. 2009, 20:40:01
Tak já to zkusím jinak. Funkce mysql_fetch_array nemá parametr pro spojení. Ty ho tam, ale planceš viz
mysql_fetch_array($this->dotaz, $this->spojeni); |
||
Jack06 Profil |
#8 · Zasláno: 30. 1. 2009, 20:42:51
Měsíček Aháá.. díky.. ale pak jakto, že to fungovalo když byla třída spolu s vyvoláním v jednom souboru??
|
||
AM_ Profil |
#9 · Zasláno: 30. 1. 2009, 20:45:45 · Upravil/a: AM_
Jack06
na php.net nalezneš dokumentaci (on-line i ke stažení), když používáš nějakou funkci a nevíš přesně, jak, podívej se tam. Přesně jak říká měsíček, máš tam parametr navíc. Jinak třída dotaz mi přijde trochu zbytečná, zkus se podívat na třídu mysqli, která je součástí PHP5: http://cz.php.net/manual/en/book.mysqli.php EDIT: v tom jednom souboru ti to spíš nějakou náhodou neházelo chybu nebo jsi ji neviděl, ale chybná syntaxe je to v každém případě. |
||
Jack06 Profil |
#10 · Zasláno: 31. 1. 2009, 15:21:41
Ještě dotaz.. Dá se nějak udělat, abych při každém dotazu nemusel psát tento řádek??
$dotaz_na_databazi = new mysql_dotaz('localhost', 'root', 'vertrigo', 'pokus'); |
||
tomin Profil * |
#11 · Zasláno: 31. 1. 2009, 15:27:43
ano, dá :-)
|
||
Jack06 Profil |
#12 · Zasláno: 31. 1. 2009, 16:54:01
a poradíš prosím jak?? a ještě aby se mi kdyžtak zapsalo toto :
mysql_query("SET CHARACTER SET utf8"); pls?? děkuji.. to já to zkouším alě hází mi to error nebo mi to nepracuje jak má.. :-( Nějako se nemohu dostat na kloub php 5 :-( Moc díky předem |
||
Jan Tvrdík Profil |
#13 · Zasláno: 31. 1. 2009, 18:32:57
Jack06
Já jen doufám, že si jehom hraješ se syntaxí PHP 5 a nehodláš ten kód používat v praxi :) |
||
Jan Tvrdík Profil |
#14 · Zasláno: 31. 1. 2009, 18:34:24
„Dá se nějak udělat, abych při každém dotazu nemusel psát tento řádek??
$dotaz_na_databazi = new mysql_dotaz('localhost', 'root', 'vertrigo', 'pokus');“ Ukládaj si spojení do statické proměnné (protected static $spojeni); |
||
Jack06 Profil |
#15 · Zasláno: 31. 1. 2009, 20:20:48
Jan Tvrdík
Tak prozatím se v tom šťourám abych porozuměl jak to pracuje.. Proč bych to pak nemohl použít?? Nebo jak bych to měl napsat aby to mělo stejnou funkci?? |
||
AM_ Profil |
#16 · Zasláno: 31. 1. 2009, 21:10:08 · Upravil/a: AM_
Neměl bys psát nic, předběhli tě programátoři PHP, kteří napsali třídu mysqli. Tvoje třída mysql_dotaz je jen její malý postižený bráška. (Třída MySQLi je součástí PHP5, dokumentace na PHP.NET, viz můj post výše, vážně nechápu, proč se patláš tady s tímhle :) )
|
||
Jan Tvrdík Profil |
#17 · Zasláno: 31. 1. 2009, 21:26:53 · Upravil/a: Jan Tvrdík
Jack06
„Tak prozatím se v tom šťourám abych porozuměl jak to pracuje“ To je zcela v pořádku, jen tak dál. „Proč bych to pak nemohl použít?“ Protože už existují hotová kvalitní řešení (koukni třeba na dibi). Bude trvat ještě dost dlouho, než si dokážeš napsat něco lepšího. Tím statickým přístupem jsem myslel něco jako: class DB { protected static $spojeni; public static $dotaz; public static function pripoj($hostitel, $jmeno, $heslo, $databaze) { self::$spojeni = @mysql_connect($hostitel, $jmeno, $heslo); if (self::$spojeni === FALSE) { throw new Exception('Spojení s databází selhalo!'); } if (@mysql_selectdb($databaze, self::$spojeni) !== TRUE) { throw new Exception('Nebylo možné vybrat databázi'); } } public static function dotaz($dotaz) { self::$dotaz = mysql_query($dotaz, self::$spojeni); if (self::$dotaz === FALSE) { throw new Exception('Chyba SQL dotazu'); } return self::$dotaz; } } |
||
Jack06 Profil |
#18 · Zasláno: 31. 1. 2009, 21:39:07
Mockrát díky.. A když jsem u toho tak mám ještě jeden problém.. zkouším použít tento script:
ZDE JE Jde o to, že pokud ho vyvolám přez tlačítko refrešuje mi to výpis z mysql v pohodě.. když ho nechám ale vyvolat přez window.setInterval , tak napíše chybu: Fatal error: Call to a member function dotaz() on a non-object in C:\Software\VertrigoServ\www\pokusy\refresh\print_text.php on line 2 Nevíte proč?? |
||
Jack06 Profil |
#19 · Zasláno: 31. 1. 2009, 22:26:30 · Upravil/a: Jack06
dibi třída je pro mě zbytečně složitá.. a kopírovat kódy se mi nechce...
:-) |
||
tiso Profil |
#20 · Zasláno: 31. 1. 2009, 22:49:34
Jack06 „a kopírovat kódy se mi nechce...“
Tak ich nekopíruj. |
||
Jack06 Profil |
#21 · Zasláno: 31. 1. 2009, 23:00:01
Však nekopíruju.. Učím se z rad druhých.. Udělám si třídy, dostačující mému použití a budu spokojen :-). Už 3 den a to více jak 16 hodin prosedím u pc a hledám kde co a jak o php5. Bohužel nechápu pořád asi nějako základy...
Třebas viz script od Jan Tvrdík nevím jak nastavím ty přihlašovací údaje .. aby to bylo dle pravidel správně.. :-( |
||
tiso Profil |
#22 · Zasláno: 31. 1. 2009, 23:11:28
Jack06 - chýbajú ti základy, začni s niečim jednoduchším.
|
||
Jan Tvrdík Profil |
#23 · Zasláno: 1. 2. 2009, 01:47:50 · Upravil/a: Jan Tvrdík
Jack06
Bohužel na českém internetu chybí kvalitní zdroj informací o objektovém programování v PHP. Asi nejlepší, co v současnosti existuje, je seriál na intervalu – http://php.interval.cz/objektove-orientovane-programovani-oop-v-php/ |
||
Jack06 Profil |
#24 · Zasláno: 1. 2. 2009, 07:28:20
Jan Tvrdík
Ano tento serial jsem již četl.. Z tohoto serialu je tato třída k DB. Proto ji zde mám vypsanou a ptal jsem se na ni.. viz: http://php.interval.cz/clanky/specialni-metody/ Potřeboval bych zjistit, jak napřiklad udělám třídu s přístupem do mysql, abych v souboru config.php měl např jako u dibi array(v něm údaje jako host-> jmeno-> heslo-> db-> "a pokudmožno i charset viz : mysql_query("SET CHARACTER SET utf8"); a nemusel, jako to mají v příkladě na intervalu pořád psát: $dotaz_na_databazi = new DotazNaDatabazi('localhost', '', '', 'databaze'); ale jen třeba: $dotaz = bd_class::dotaz(...........) , nebo $dotaz = dotaz->(....) Na intervalu to mají sice zajímavě popsané, ale vše konkrétnš.. Je tam uvedeno málo příkladů, aby se dalo zjistit pro mě jako začátečníka možné využití a způsoby zápisu. lozím i po php.net ale ikdyž se anglicky učím tak zas tak dobře neumím . :-( Moc díky |
||
AM_ Profil |
#25 · Zasláno: 1. 2. 2009, 09:53:53
Škoda, že mě pořád ignoruješ, kdybys použil mysqli, vyhnul by ses i tomuhle. Jednou se připojíš ($pripojeni = new mysqli('localhost...')) a pak už jenom provádíš $pripojeni->query(dotaz). Ale jestli tam nutně musíš mít vlastnoručně napsanou mysql třídu, která ti nevím v čem pomáhá, tak ti asi není rady.
|
||
Jack06 Profil |
#26 · Zasláno: 1. 2. 2009, 10:03:15 · Upravil/a: Jack06
AM_
Koukal jsem na tu mysqli, ale pořád nechápu, jak to napsat do configu aby to fakalo.. EDIT: už to asi mám :-) Tak jsem an to zvědavej.. Jdu zkoušet :-D PS: nevíte ještě jak s tím setInterval?? |
||
AM_ Profil |
#27 · Zasláno: 1. 2. 2009, 10:10:22
Tam nepotřebuješ žádný autoload, mysqli je standardní součástí PHP, nemusíš jí odnikud načítat.
|
||
Jack06 Profil |
#28 · Zasláno: 1. 2. 2009, 10:13:30
AM_
Jojo už vím.. měl jsem špatně zapsanou mysqli .. už to jde :-) THX |
||
Jack06 Profil |
#29 · Zasláno: 1. 2. 2009, 13:27:26
Poradí ještě někdo s problémem okolo setinterval píšu tady nebo :
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=8&topic=89232&page=-1#5 |
||
Časová prodleva: 15 let
|
0