Autor Zpráva
Jack06
Profil
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
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
tak se koiukni na spravnou syntaxi te funkce, mas ji spatne

edit: pozde
Jack06
Profil
a tak mi prosím poradíto co jak přepsat?? děkuji
Měsíček
Profil
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
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
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
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
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
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 *
ano, dá :-)
Jack06
Profil
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
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
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
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
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
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
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
dibi třída je pro mě zbytečně složitá.. a kopírovat kódy se mi nechce...
:-)
tiso
Profil
Jack06a kopírovat kódy se mi nechce...
Tak ich nekopíruj.
Jack06
Profil
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
Jack06 - chýbajú ti základy, začni s niečim jednoduchším.
Jan Tvrdík
Profil
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
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
Š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
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
Tam nepotřebuješ žádný autoload, mysqli je standardní součástí PHP, nemusíš jí odnikud načítat.
Jack06
Profil
AM_
Jojo už vím.. měl jsem špatně zapsanou mysqli .. už to jde :-) THX
Jack06
Profil
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

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: