PHP OPP, podstawy

0

Witam. Od dziś zaczynam naukę obiektówki w PHP, oświadczam <ort>w szerz</ort> i <ort>w obec</ort>. Mam taką klasę:

class obiektySportowe {

   public $get;

   public function __construct($get){
   $this->get=$get;
   }
}
 

A taki problem: Jak przekazać(przypisać) do zmiennej $get zmieną z $_GET[] i $_POST[]; :(

Może lepiej tak, cała kalasa:

<?
class obiektySportowe {

 $s;
    public function __construct($get){
		$this->s=$get;
    }
	
	public function quary (){
		$query = "SELECT * FROM `rekreacja` WHERE `id` = '$this->s' AND `uid` = 4";
		$arrSample = array();
		$result = mysql_query($query) or die('zle zapytanie MySQL');

			while ($row = mysql_fetch_assoc($result)) {
			$arrSample[] = $row;
			}
		return 	$arrSample;
	}			  
}

$s=$_GET['s']

$arrSample = new obiektySportowe("$s");
$arrSample->quary();

$smarty->assign('listing', $arrSample->quary(););

?>

 
1

$arrSample = new obiektySportowe($s);

1

Działałoby i tak jak podał @poniatowski.

zaraz po rozpoczęciu definicji klasy dopisz private przed $s; (jak to w ogóle Ci się uruchamia? Mi wywala błąd składni).
Dodaj średnik po $s=$_GET['s'] -- i znowu - jak Ci się to w ogóle uruchamia?! -- sprawdzaj kod przed wklejeniem na forum.
Poza tym kod działa.

Aha - query to nie quary ;)

Anyway - ten kod działa (nie zapomnij przekazać parametru GET):

class obiektySportowe {

	private $s;
	public function __construct($get){
		$this->s=$get;
	}

	public function quary (){
		$query = "SELECT * FROM `rekreacja` WHERE `id` = '$this->s' AND `uid` = 4";
		die($query);
	}
}

$s=$_GET['s'];

$arrSample = new obiektySportowe("$s"); // tutaj wywal te cudzysłowia
$arrSample->quary();
0

Nie dziala mi ten kod:
tablica jest nie pusta na 100%. a tu wyświelta mi ze jest pusta :(

<?
class obiektySportowe {
	private $s = 0;
	public $a = array();
	// public $imiona;
    public function __construct($get){
		$this->s=$get;
    }
	
	public function quary(){
		$query = "SELECT * FROM `rekreacja` WHERE `id` = '$this->s' AND `uid` = '4'";
		$result = mysql_query($query) or die('zle zapytanie MySQL');

			while ($row = mysql_fetch_assoc($result)) {
			$a[] = $row;
			}
		return $a;
	}			  
	
	public function pr(){
	$imiona = Array('Marcin', 'Daniel', 'Magda', 'Paulina', 0, 1.11);
		if(empty($a)){
			echo "pusta";
		}
		else{ echo "FULL !";}
	}

}

$arrSample = new obiektySportowe($_GET['s']);

$arrSample->pr();

$smarty->assign('listing', $arrSample->quary());

?>


 
1

daj cały kod, a nie takie zmasakrowane kawałki, z których nic nie wynika

wyedytowałeś to i ja wyedytuję.

Przyjrzyjmy się metodzie quary(), coś sobie pobiera, coś zapisuje do lokalnej (istniejącej tylko w granicach funkcji) zmiennej $a.
Potem zwraca tę zmienną.

Twoja metoda pr(). Definiuje jakąś tablicę, potem sprawdza czy lokalna, niezdefiniowana wcześniej, a więc "pusta" zmienna $a jest pusta. Tak jest. Skoro nic do niej nie zapisałeś to na pewno jest pusta.

Widzę za to, że dodałeś atrybut klasy o nazwie $a. Widzę też, że nauczyłeś się do niego odwoływać poprzez wskaźnik $this. Użyj tego, bo zapewne w quary() chcesz wrzucić wynik do atrybutu obiektu, a nie do lokalnej zmiennej, która przestaje istnieć po zakończeniu funkcji.

Dodatkowo pierwsze wykonujesz pr() -- czyli wyświetlanie zawartości, a dopiero później quary() - czyli pobranie zawartości z bazy (i przypisanie zwróconej przez return wartości do szablonów).

Generalnie to ja widzę, że próbujesz ogarniać parę rzeczy na raz (szablony, obiektowość i może coś jeszcze). Chyba potrzebujesz iść mniejszymi kroczkami i z jakąś pomocą (jak ww. książka).

Idę spać. Powodzenia.

0

I jeszcze jedno pytanie :) Do PHP OOP trzeba pisać samemu jakiegoś debugera? Czy jak mam np localhosta na XAMPPie to sam powyświetla mi ewentualne byki w kodzie ?

0
<?
class obiektySportowe {
	public $s = 0;
	public $a = array();
	public $imiona;
	
    public function __construct($get){
		$this->s=$get;
    }
	
	public function quary(){
		$query = "SELECT * FROM `rekreacja` WHERE `id` = '$this->s' AND `uid` = '4'";
		$result = mysql_query($query) or die('zle zapytanie MySQL');

			while ($row = mysql_fetch_assoc($result)) {
			$this->a[] = $row;
	     }
		return $this->a;
	}			  
	
	public function pr(){
	$imiona = Array('Marcin', 'Daniel', 'Magda', 'Paulina', 0, 1.11);
		if(empty($this->a)){
			echo "pusta";
		}
		else{ echo "FULL !";}
	}

}

$arrSample = new obiektySportowe($_GET['s']);
$arrSample->quary();
$arrSample->pr();

$smarty->assign('listing', $arrSample->quary());

?>
1

Tag otwierający - używaj <?php -- unikniesz ew. kłopotów w przyszłości. Wyświetlanie błędów kontrolujesz przez error_reporting (ale lepiej ustaw sobie to w php.ini). o SQL Incjection też poczytaj. Na magic quotes nie polegaj - wyłącz to sobie.

0

Czy tak jest już ok:

 
    public function __construct($get){
		$this->get = 
              //bez tego ?  mysql_escape_string(
                mysql_real_escape_string(
                htmlspecialchars(
                stripslashes($get))));  
		$this->tab = array();
    }
0

Po za tymi rzeczami wypisanymi na forum, widzę jakie mam jeszcze 'błędy'. Najpierw zapytanie SQL oraz tablica są niezgodne ze stylem zorientowanym obiektowo :/ Prawda ?

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