Wątek przeniesiony 2015-10-03 09:15 z PHP przez dzek69.

Jak uzewnętrznić zmienną w klasie

0

Witam pisze sobie taki prosty skrypt do obsługi mysql-a chcialem to opakować w klasy, ale mam problem, że to co znajduje się wewnątrz funkcji "BazeCreate" a konkretnie chodzi o** "$sql"** które znajduje się w innej funkcji** "polaczenie()"**

Jak zrobić by zmienne w jednej funkcji kontaktowały się ze zmiennymi w innej funkcji, bo one się nie widzą i zwraca błąd
**"Notice: Undefined variable: sql in D:\Programy\xampp\htdocs\mojcms\class\db.php on line 40

Warning: mysql_query() expects parameter 2 to be resource, null given in D:\Programy\xampp\htdocs\mojcms\class\db.php on line 40
Error creating database:"**

Poniżej kod

<?php
class MySQL
{
public $nazwaBazy;	
public $login;
public $haslo;
public $bazaCreate;

/////////////////  KONSTRUKCJA /////////////////////
	
public function __construct($parm1,$parm2,$parm3)
{
$this->nazwaBazy = $parm1;	
$this->login = $parm2;	
$this->haslo = $parm3;		
}


///////////  POLACZENIE Z BAZA DANYCH I OBSLUGA BLEDOW //////////////	
public function polaczenie()
{	
$sql = @mysql_connect($this->nazwaBazy, $this->login, $this->haslo);
if (!$sql)
  {
	
die('<b><font color="red">WYSTAPIL BLAD W POLACZENIU Z BAZA DANYCH:</font> ' . mysql_error());

  }	
}


////////////// Tworzenie bazy danych //////////////

public function BazaCreate($bazaName)
{
	
echo	$this->bazaCreate = $bazaName;

	$sqlquery = 'CREATE DATABASE '.$this->bazaCreate;
if (mysql_query($sqlquery, $sql)) {
    echo "Database my_db created successfully\n";
} else {
    echo 'Error creating database: ' . mysql_error() . "\n";
}		


	
}





}

$baza = new MySQL('127.0.0.1','root','');
$baza->polaczenie();
$baza->BazaCreate('jakas');
?>
1

Zapisz $sql jako pole klasy? :|
Btw, masz beznadziejne nazewnictwo klas, metod, zmiennych... wszystkiego w sumie.

0

No faktycznie nie pomyslalem o tym :D
a nazewnictwo jest takie miszmasz polsko-angielski ze wzgledu na to ze latwiej mi sie odnalezc w kodzie potem :}
wiem ze dla innych to smietnik ale mi tak wygodnie.
Pozdro i dzieki

0

wiem ze dla innych to smietnik ale mi tak wygodnie.

Nie, nie, nie.
Jesteś newbie, zatem od początku ucz się porządnie, bo potem to się negatywnie odbije pod każdym możliwym względem, nawet jeśli będziesz sam pracował (zobaczysz, że po miesiącu pracy nad jakimś poważniejszym projektem przy takiej postawie jedyne, o czym będziesz myślał, to harakiri).
Chyba nie przychodzisz do instruktora jazy i panie, ja będę jeździł pod prąd - wiem że to źle, ale tak mi wygodnie.

0

prosze zmienione na życzenie :D rzeczywiście wyrazniej się czyta.
Można zamknąć temat.

<?php
class MySQL
{
public $nazwaBazy;	
public $login;
public $password;
public $CreateDB;
public $sql;
public $zap;
public $SelectDB;
/////////////////  KONSTRUKCJA /////////////////////
	
public function __construct($parm1,$parm2,$parm3)
{
$this->nazwaBazy = $parm1;	
$this->login = $parm2;	
$this->password = $parm3;		

 //$this->zap = $parm5;
}


///////////  ConnectDB Z BAZA DANYCH I OBSLUGA BLEDOW //////////////	
public function ConnectDB()
{	
$this->sql = @mysql_connect($this->nazwaBazy, $this->login, $this->password);
if (!$this->sql)
  {
	
die('<b><font color="red">WYSTAPIL BLAD W POLACZENIU Z BAZA DANYCH:</font> ' . mysql_error());

  }	
}


////////////// Tworzenie bazy danych //////////////

public function CreateDB($bazaName)
{
	
$this->CreateDB = $bazaName;

	$sqlQuery = 'CREATE DATABASE '.$this->CreateDB;
if (mysql_Query($sqlQuery, $this->sql)) {
    echo "<b>Baza zostala utworzona\n";
} else {
    echo '<b>Wystapil blad w tworzeniu bazy: ' . mysql_error() . "\n";
}		


	
}

////////////// Wybieranie bazy danych ///////////////////////
public function SelectDB($wybierz){
 $this->SelectDB = $wybierz;	
	$wybor = mysql_select_db($this->SelectDB);
	if(!$wybor){
		echo '<B>BAZA O NAZWIE: <font color="red">'.$this->SelectDB.'</font> nie istnieje';
	}
	
	
}


public function Query($zapytanie)
{
	 $this->zap = $zapytanie;
	
	
 echo $IDquery = mysql_Query($this->zap);
 

 
	
}




}

$baza = new MySQL('127.0.0.1','root','');
$baza->ConnectDB();
$baza->CreateDB('jakas');
$baza->SelectDB('jakas');
$baza->Query("SELECT `id`,`nazwisko`,`lata`,`punkty` FROM `nba`");




?>
 
1

Nadal kijowo

  1. złe wcięcia
  2. //////////////*/ KONSTRUKCJA */////////////////// nie dość że z d**y to jeszcze błędny
  3. unikaj die i echo w metodach klasy
  4. W nowszych wersjach php mysql_query() jest wyłączone, lepiej używać PDO
  5. piszesz zmienne raz tak raz tak. Albo piszesz po polsku albo po angielsku. Ale lepiej po angielsku.
  6. class MySQL nazwa z d**y dla klasy
  7. w ogóle to wygląda na to że piszesz swoją wersje klasy PDO - czyli na nowo tworzysz koło
1
$this->zap = $zapytanie;
echo $IDquery = mysql_Query($this->zap);

Po co to zapytanie zapisujesz do $this->zap?

$this->CreateDB = $bazaName; /* ... */ $this->SelectDB = $wybierz;

To także nie ma sensu, po co to zapisywać?

public function __construct($parm1,$parm2,$parm3)

Oh tak, $parm1 to tak wiele sugerująca nazwa parametru.

Plus:

  • nadal mieszasz angielski z polskim.
  • nie skracaj nazw metod, public function selectDatabase($databaseName), public function connectToDatabase() (lub samo connect() lub doConnect() (osobiście moim faworytem jest to drugie)) są znacznie ładniejsze.
  • po co Ci CreateDB?
  • nie rób żadnego die czy echo czy innego wypisywania danych w metodach za to nie odpowiedzialnych. Jeśli połączenie z bazą danych się nie powiodło, z metody zwracaj false i obsługuj wyświetlanie błędu po stronie widoku.
  • tak się nie komentuje kodu, zapoznaj się z https://en.wikipedia.org/wiki/PHPDoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1