Methoden in andere Klassen verwenden

Methoden in andere Klassen verwenden

am 19.07.2006 22:19:27 von Hadhafang

Gruß an alle
Ich hab erstens eine Frage und zweitens ein Problem.

1:
ich habe eine Klasse mit zwei Funktionen(SQL Anweisungen) erstellt. In
einer weiteren Klasse würde ich gern auf diese Funktionen zugreifen um
beispielsweise deren Inhalt zu prüfen.(genauer gesagt will ich eine
Anmeldefunktion programmieren,welche die ergebnisse der funktionen
verwendet und prüft, wenn erfolgreich sollte sich ein neues fenster
öffnen).Nur leider habe ich kein Ahnung wie das gehen soll.
ich hab gelesen das man mit KlassenName::Methode auf Methoden von
anderen Klassen zugreifen kann aber wie ich das realieren soll habe ich
keine ahnung!

require 'Datenbankzugriff.php'

$person =3D new sqlStatements();
$passwort =3D new sqlStatements();
$person->selectBenutzer();
$passwort->selectPasswort();


class sqlStatements{

public $benutzer;
public $passwort;

public function selectBenutzer()
{



if (isset($_POST["vorname"])&&($_POST["passwort"]))
{
$this->benutzer =3D $_POST["vorname"];
$sql=3D"SELECT Benutzer FROM benutzer WHERE Benutzer =3D
'".$this->benutzer."'";
mysql_query($sql) or die('SQL: '.mysql_error());
echo 'SQL: '.$sql.'
';
}
else { echo "Bitte alle Felder ausfüllen"; }
mysql_close();

}

public function selectPasswort()
{


if (isset($_POST["vorname"])&&($_POST["passwort"]))
{

$this->passwort =3D $_POST["passwort"];
$this->benutzer =3D $_POST["vorname"];

$sql_pw=3D"SELECT Password FROM benutzer WHERE Benutzer =3D
'".$this->benutzer."'";
mysql_query($sql) or die('SQL: '.mysql_error());
echo 'SQL: '.$sql.'
';
}
else { echo "Bitte alle Felder ausfüllen"; }
mysql_close();
}
}


2: das problem bei dieser Klasse ist, dass plötzlich(vor zwei stunden
hatts funktioniert) eine 'No Database selected' Meldung kommt wenn ich
diese Klasse ausführen will.an der Datenbankzugriff.php habe ich
nichts geändert.
aber vollständigkeitshalber hier der quellcode
DEFINE ('DB_USER', 'root');
DEFINE ('DB_PASSWORD', '');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'terminplanung');


$dbc =3D @mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) OR die ('Keine
Verbindung' . mysql_error() );
mysql_select_db(DB_NAME) OR die ('Auswahl der Datenbank nicht möglich'
.. mysql_error() );

ich bin über jede Hilfe und jeden Ansatz dankbar
MfG Valentin

Re: Methoden in andere Klassen verwenden

am 20.07.2006 10:28:23 von Ulf Kadner

Hadhafang@lycos.de wrote:

Bitte gibt Deinen reellen Namen an!

Re: Methoden in andere Klassen verwenden

am 20.07.2006 10:53:26 von Hadhafang

Ulf Kadner schrieb:

> Hadhafang@lycos.de wrote:
>
> Bitte gibt Deinen reellen Namen an!

steht doch da Valentin

Re: Methoden in andere Klassen verwenden

am 20.07.2006 10:56:16 von Sven Jacobs

Hallo Valentin,

> 1:
> ich habe eine Klasse mit zwei Funktionen(SQL Anweisungen) erstellt. In
> einer weiteren Klasse würde ich gern auf diese Funktionen zugreifen um
> beispielsweise deren Inhalt zu prüfen.(genauer gesagt will ich eine
> Anmeldefunktion programmieren,welche die ergebnisse der funktionen
> verwendet und prüft, wenn erfolgreich sollte sich ein neues fenster
> öffnen).Nur leider habe ich kein Ahnung wie das gehen soll.
> ich hab gelesen das man mit KlassenName::Methode auf Methoden von
> anderen Klassen zugreifen kann aber wie ich das realieren soll habe ich
> keine ahnung!

Über KlassenName::Methode greifst Du auf statische Methoden einer Klasse
zu. In Deinem Fall musst Du eine Instanz von der Klasse sqlStatements in
der anderen Klasse erzeugen:

$sqlstmt = new sqlStatements;
$sqlstmt->selectBenutzer();
$sqlstmt->selectPasswort();

Nicht böse gemeint, aber Du solltest Dir dringend Grundkenntnisse der
objektorientierten Programmierung (in PHP, aber auch
programmiersprachenunabhängig) aneignen:
http://de3.php.net/manual/de/print/language.oop.php,
http://de3.php.net/manual/de/print/ref.classobj.php

Hier noch ein paar Verbesserungsvorschläge:

> class sqlStatements{
>
> public $benutzer;
> public $passwort;

Die Variablen sollten auf jeden Fall private oder protected deklariert
werden. Wenn Du von Außerhalb auf sie zugreifen möchtest, solltest Du
Getter und Setter verwenden.

>
> public function selectBenutzer()
> {
> if (isset($_POST["vorname"])&&($_POST["passwort"]))
> {
> $this->benutzer = $_POST["vorname"];
> $sql="SELECT Benutzer FROM benutzer WHERE Benutzer =
> '".$this->benutzer."'";
> mysql_query($sql) or die('SQL: '.mysql_error());

Das ist *sehr* gefährlich, Stichwort SQL-Injection! Du musst auf jeden
Fall prüfen, ob sich in $_POST["vorname"] oder $_POST["passwort"] böse
SQL-Statements befinden, bevor Du diese in einem SQL-String verwendest.