Fatal error: Call to a member function query() on a non-object

Souli2k

Grünschnabel
In der oberen Klasse versuche ich mit hilfe des Constructors die Connection bzw das Objekt zu erstellen so das ich sie unten nur noch benutzen muss, ohne sie in jeder Funktion neu zu erstellen ...
Mein Problem liegt dadrin das ich es nicht hinbekomme und immer den Fehler bekomme:
Fatal error: Call to a member function query() on a non-object

Sowas wie $this->mysql->query geht hier nicht oder?

Ich bin mir recht sicher das es an den hier liegt: $mysql->query <- weiß aber gerade ums brechen nicht wie es richtig geht... könnt ihr mir helfen?

Vielen Dank im Vorraus!

PHP:
<?
class Login
{

  private $mysql;

  public function __construct ()
  {
	include_once 'class/database.php';
	$this->mysql = new MySQL ();
  }

  public function login_text() {
  	return $this->login_text= "<form method=\"post\" action=\"index.php\">
			<input class=\"eingabe\" type=\"text\" name=\"Benutzer\"  value=\"Benutzer\" onfocus='this.value=\"\"' /> <br />
  			<input class=\"eingabe\" type=\"password\" name=\"Password\" class=\"search-text\" value=\"Password\" onfocus='this.value=\"\"' />
			<input class=\"login-submit\" type=\"submit\" class=\"search-submit\" value=\"Login\" />
			<br /> </form>"; 

  }

  public function check_login($login_name,$login_pass){
	$login_pass = md5($login_pass);
	$mysql->query('SELECT * FROM user;');
  	while($row = $mysql->fetchRow($login_name)){
	$username = $row['Username'];
	$userpass = $row['Password'];

		if ($login_name == $username && $login_pass == $userpass)
			$check_result = 1;

	}
	return $check_result;
  }

  public function set_login($login_name){
		$result = $mysql->query("SELECT * FROM user Where Username = '$login_name';");
  		while($row = $this->mysql->fetchRow($result)){
		$_SESSION['Benutzer'] = $row['Username'];
		$_SESSION['Recht'] = $row['recht'];	
		}
	}
}
?>
PHP:
<?
class MySQL
{
  private $db;
  private $result;

  public function __construct ()
  {
	require('config/config.php');
    $this -> db = mysql_connect ($host, $user, $password);
	mysql_select_db($database, $this->db);
  }

  public function query($query) {
  	$this->result= mysql_query($query,$this->db);
	return $this->result;
  }

  public function fetchRow() {
  	return mysql_fetch_array($this->result);
  }
}
?>

Ps: nicht wundern über die login_text funktion ^^
 
Zuletzt bearbeitet:
Ändere mal alle
PHP:
$mysql->query( /* ... */ );
in
PHP:
$this->mysql->query( /* ... */ );
um.

Gruß

Edit//
Dieses auch!
PHP:
$mysql->fetchRow( /* ... */ );

Dein ganzes Loginkonstrukt passt aber auch nicht.
 
Zuletzt bearbeitet:
Hier mal ein Ansatz wie man es machen Könnte:
PHP:
class Login
{
    private $mysql;

    public function __construct ()
    {
        require_once 'class/database.php';
        $this->mysql = new MySQL();
    }

    public function login_text()
    {
        return $this->login_text = "<form method=\"post\" action=\"index.php\">
        <input class=\"eingabe\" type=\"text\" name=\"Benutzer\"  value=\"Benutzer\" onfocus='this.value=\"\"' /> <br />
        <input class=\"eingabe\" type=\"password\" name=\"Password\" class=\"search-text\" value=\"Password\" onfocus='this.value=\"\"' />
        <input class=\"login-submit\" type=\"submit\" class=\"search-submit\" value=\"Login\" />
        <br /> </form>";

    }

    public function check_login( $login_name, $login_pass )
    {
        $login_name = $this->mysql->escape( $login_name );
        $login_pass = md5( $login_pass );

        $this->mysql->query("
            SELECT
                Username,
                recht
            FROM
                user
            WHERE
                Username = {$login_name}
            AND
                Password = {$login_pass};
        ");

        // Kontrollstrukturen einbauen?
        $row = $this->mysql->fetchRow();

        $_SESSION['Benutzer'] = $row['Username'];
        $_SESSION['Recht']    = $row['recht'];
    }
}
PHP:
class MySQL
{
    private $db;
    private $result;

    public function __construct ()
    {
        // Kontrollstrukturen einbauen?
        require_once 'config/config.php';
        $this->db = mysql_connect ( $host, $user, $password );
        mysql_select_db( $database, $this->db );
    }

    public function query( $query )
    {
        // Kontrollstrukturen einbauen?
        $this->result = mysql_query( $query, $this->db );
        return $this->result; // Braucht man das?
    }

    public function fetchRow()
    {
        return mysql_fetch_array( $this->result, MYSQL_ASSOC ); // oder MYSQL_NUM oder MYSQL_BOTH
    }

    public function escape( $string )
    {
        return mysql_real_escape_string( $string );
    }
}

Gruß
 
Danke Raisch versuche es gerade auch umzusehen :)

bei dem hier bin ich mir gerade nicht ganz sicher wofür es ist:
MYSQL_ASSOC ); // oder MYSQL_NUM oder MYSQL_BOTH <-

Irgendwo hatte ich mal ein Problem das er einen Rückgabewert brauchte
darum
return $this->result; // Braucht man das? <---

Danke dir aufjedenfall erstmal :)
 
Schau mal hier:
php.net/mysql_fetch_array hat gesagt.:
Gibt ein Array von Zeichenketten zurück, das der gelesenen Zeile entspricht oder FALSE falls keine weiteren Zeilen vorhanden sind. Der Typ des zurückgegebenen Arrays hängt davon ab, wie result_type definiert ist. Nutzen sie MYSQL_BOTH (Standard), erhalten sie ein Array mit sowohl assoziativen als auch numerischen Indice. Nutzen sie MYSQL_ASSOC erhalten sie nur assoziative Indice (wie mysql_fetch_assoc() arbeitet), mit MYSQL_NUM erhalten sie nur numerische Indice (wie mysql_fetch_row() arbeitet).

Falls zwei oder mehrere Spalten des Ergebnisses den gleichen Feldnamen haben, dann wird nur der Wert der letzten Spalte im Array unter diesem Feldnamen abgelegt. Um auch auf die anderen gleichnamigen Spalten zugreifen zu können, müssen Sie den numerischen Index der Spalte verwenden oder einen Alias für die Spalte vergeben. Falls Sie Aliase für Spalten verwenden, können Sie auf die Inhalte dieser Spalten nicht über ihren ursprünglichen Namen zugreifen.
 

Neue Beiträge

Zurück