loginform class bzw. object method

kiklami

Grünschnabel
Morgen,

ich bekomme es einfach nicht hin aus dem "editor::editor" das richtige Objekt zu finden. Das Problem tritt erst seit dem Umstieg auf Php5 auf vielleicht sieht ja jemand sofort das Problem... Danke!

Code:
<?php
# Include Path
ini_set ('include_path', '.' . PATH_SEPARATOR . 'includes');

# Prüfen ob das Script ordnungsgemäß installiert ist
if (!file_exists ('./includes/DBSettings.php'))
   header ('Location: ./install/install.php');

# Error Stack
$sgError = array();

# Includes
REQUIRE ('StdInc.php');

# Objekte erstellen
# ~~~~~~~~~~~~~~~~~

$ssn = new Session('bp');
$db = new DB_Sql();
$res = $db->connect ();
if ($res == 'connect' || $res == 'select')   die (smDBError ($res));
$sets = new Settings ($db);



if (isset ($_POST['login_submit'])){

if (Editor::Editor($_POST['editor_field'], $_POST['password_field'])){
         header("Location: " . $ssn->Url ("http://".$_SERVER['HTTP_HOST']
                            . dirname($_SERVER['PHP_SELF'])
                            . "/index.php"));
         exit;
   }
   else{
      $style = 'style="border: solid 2px #BB0000"';
   }
}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<link href="style/main.css" type="text/css" rel="stylesheet">
	</head>

	<body bgcolor="#FFFFFF" leftmargin="0" marginheight="0" marginwidth="0" topmargin="0">
		<div align="center">
			<br>
			<br>
			<br>
			<table width="685" border="0" cellspacing="0" cellpadding="0">
				<tr>
					<td width="1"><img src="http://www.tutorials.de/forum/images/2pointwhite.jpg"></td>
					<td width="352"><img src="http://www.tutorials.de/forum/images/name.gif" height="66" width="352"></td>
					<td width="323"><img src="http://www.tutorials.de/forum/images/housetop.jpg" height="66" width="323"></td>
					<td width="10">&nbsp;</td>
				</tr>
				<tr>
					<td height="31" background="http://www.tutorials.de/forum/images/poitntgreen.gif"><img src="http://www.tutorials.de/forum/images/poitntgreen.gif"></td>
					<td background="http://www.tutorials.de/forum/images/poitntgreen.gif">
						<div align="center">
							<span class="textwhite">Administrator Login</span></div>
					</td>
					<td><img src="http://www.tutorials.de/forum/images/housebottom.jpg" height="31" width="323"></td>
					<td valign="top"><img src="http://www.tutorials.de/forum/images/afterhouse.jpg" height="31" width="9"></td>
				</tr>
				<tr>
					<td background="http://www.tutorials.de/forum/images/poitntgreen.gif"><img src="http://www.tutorials.de/forum/images/poitntgreen.gif"></td>
					<td colspan="2" valign="top" background="http://www.tutorials.de/forum/images/poitntgreen.gif">
						<div align="center">
							<table border=0 cellPadding=2 cellSpacing=2 align="center" width="99%" bgcolor="white">
								<form name="loginform" action="<?=$ssn->Url($_SERVER['PHP_SELF'])?>" method="POST" target="_top">
									<tr>
										<td colspan="2" align="right"><img src="http://www.tutorials.de/forum/images/spacer.gif" alt="" height="50" width="1" border="0"></td>
									</tr>
									<tr>
										<td width="230" align="right"><span class="text">Login</span>:</td>
										<td><input <?=$style?> type="text" name="editor_field" style="width: 50%" value="<?=$_POST['editor_field']?>" size="46"></td>
									</tr>
									<tr>
										<td width="230" align="right"><span class="text">Passwort</span>:</td>
										<td><input <?=$style?> type="password" name="password_field" style="width: 50%" value="<?=$_POST['password_field']?>" size="46" maxlength="12"></td>
									</tr>
									<tr>
										<td width="230" align="right"></td>
										<td><span class="formSubText">Sollten Sie die Daten vergessen haben, k&ouml;nnen Sie in der Datei DBSettings.php in dem Verzeichnis includes nachschlagen.</span></td>
									</tr>
									<tr>
										<td width="230" align="right"></td>
										<td><input class="formSubmit" type="submit" name="login_submit" value="Einloggen" border="0"></td>
									</tr>
									<tr>
										<td colspan="2" align="right"><img src="http://www.tutorials.de/forum/images/spacer.gif" alt="" height="50" width="1" border="0"></td>
									</tr>
								</form>
							</table>
						</div>
					</td>
					<td valign="top" background="http://www.tutorials.de/forum/images/strigfon.jpg"><img src="http://www.tutorials.de/forum/images/stolbright.jpg" height="7" width="9"></td>
				</tr>
			</table>
			<table width="685" border="0" cellspacing="0" cellpadding="0">
				<tr>
					<td valign="top" width="15%" height="11" background="http://www.tutorials.de/forum/images/bottom2.jpg"><img src="http://www.tutorials.de/forum/images/bottom1.jpg" height="11" width="9"></td>
					<td valign="top" background="http://www.tutorials.de/forum/images/bottom2.jpg">
						<div align="right">
							<img src="http://www.tutorials.de/forum/images/bottom3.jpg" height="11" width="16"></div>
					</td>
				</tr>
			</table>
		</div>
	</body>

</html>

Solte wahrscheinlich irgendwie so ausschauen:
Code:
if ($Editor->Editor($_POST['editor_field'], $_POST['password_field']))

Aber kapieren tue ich es irgendwie nicht...
 
Zuletzt bearbeitet:
Der Aufruf mittels :: ist ein statischer Aufruf der Methode Editor()

Seit PHP5 werden Konstruktoren nicht mehr über den Namen der Klasse aufgerufen sondern über die Methode
PHP:
public function __construct(){}

Ich weiss jetzt ja nicht genau wie die Klasse aussieht, daher kann ich keine genau aussage machen wie der Befehl aussehen müsste.
 
Das würde so aussehen.

Code:
<?php

class Editor {

   # Editor ID

   var $id = 0;



   # Administrator

   var $admin = FALSE;



   # Konstrutkor

   function Editor ($editor_name, $editor_password, $in_sess = FALSE){

      # Variablen vorbereiten

      global $sets;

      $editor_name       = trim ($editor_name);

      $editor_password   = trim ($editor_password);

      # Administrator

      if ($editor_name == $sets->Get('administrator_login')

                  && $editor_password == $sets->Get('administrator_password')) {

         $this->admin = TRUE;

         if (!$in_sess){

            $_SESSION['editor_name']     = $editor_name;

            $_SESSION['editor_password']   = $editor_password;

         }

         return TRUE;

      }

   }



   # Liefert Variable Admin Zürück

   function IsAdmin () { return $this->admin; }

   # Liefert Variable ID

   function GetId () { return $this->id; }

}

?>
 
Also hier sind gleich ein paar Fehler drin.

1. Konstruktoren können keine statischen Methoden sein
2. wenn die Methode statisch sein sollte dann kannst du in der Methode nicht auf Eigenschaften der Klassen zugreifen ($this->admin = TRUE;)


Für mich sieht es so aus als würde es mehr sinn machen die Klasse zu instanzieren und dann auf die Methode zuzugreifen, dann fällt nämlich auch der 2.Punkte weg.

Dabei musst du aber drauf achten das Konstruktoren keinen return-Wert hab können!!

PHP:
<?php
# Include Path
ini_set ('include_path', '.' . PATH_SEPARATOR . 'includes');

# Prüfen ob das Script ordnungsgemäß installiert ist
if (!file_exists ('./includes/DBSettings.php'))
   header ('Location: ./install/install.php');

# Error Stack
$sgError = array();

# Includes
REQUIRE ('StdInc.php');

# Objekte erstellen
# ~~~~~~~~~~~~~~~~~

$ssn = new Session('bp');
$db = new DB_Sql();
$res = $db->connect ();
if ($res == 'connect' || $res == 'select')   die (smDBError ($res));
$sets = new Settings ($db);



if (isset ($_POST['login_submit'])){

$editor = new Editor($_POST['editor_field'], $_POST['password_field']);

if ($editor->IsAdmin()){
         header("Location: " . $ssn->Url ("http://".$_SERVER['HTTP_HOST']
                            . dirname($_SERVER['PHP_SELF'])
                            . "/index.php"));
         exit;
   }
   else{
      $style = 'style="border: solid 2px #BB0000"';
   }
}


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<link href="style/main.css" type="text/css" rel="stylesheet">
	</head>

	<body bgcolor="#FFFFFF" leftmargin="0" marginheight="0" marginwidth="0" topmargin="0">
		<div align="center">
			<br>
			<br>
			<br>
			<table width="685" border="0" cellspacing="0" cellpadding="0">
				<tr>
					<td width="1"><img src="http://www.tutorials.de/forum/images/2pointwhite.jpg"></td>
					<td width="352"><img src="http://www.tutorials.de/forum/images/name.gif" height="66" width="352"></td>
					<td width="323"><img src="http://www.tutorials.de/forum/images/housetop.jpg" height="66" width="323"></td>
					<td width="10">&nbsp;</td>
				</tr>
				<tr>
					<td height="31" background="http://www.tutorials.de/forum/images/poitntgreen.gif"><img src="http://www.tutorials.de/forum/images/poitntgreen.gif"></td>
					<td background="http://www.tutorials.de/forum/images/poitntgreen.gif">
						<div align="center">
							<span class="textwhite">Administrator Login</span></div>
					</td>
					<td><img src="http://www.tutorials.de/forum/images/housebottom.jpg" height="31" width="323"></td>
					<td valign="top"><img src="http://www.tutorials.de/forum/images/afterhouse.jpg" height="31" width="9"></td>
				</tr>
				<tr>
					<td background="http://www.tutorials.de/forum/images/poitntgreen.gif"><img src="http://www.tutorials.de/forum/images/poitntgreen.gif"></td>
					<td colspan="2" valign="top" background="http://www.tutorials.de/forum/images/poitntgreen.gif">
						<div align="center">
							<table border=0 cellPadding=2 cellSpacing=2 align="center" width="99%" bgcolor="white">
								<form name="loginform" action="<?=$ssn->Url($_SERVER['PHP_SELF'])?>" method="POST" target="_top">
									<tr>
										<td colspan="2" align="right"><img src="http://www.tutorials.de/forum/images/spacer.gif" alt="" height="50" width="1" border="0"></td>
									</tr>
									<tr>
										<td width="230" align="right"><span class="text">Login</span>:</td>
										<td><input <?=$style?> type="text" name="editor_field" style="width: 50%" value="<?=$_POST['editor_field']?>" size="46"></td>
									</tr>
									<tr>
										<td width="230" align="right"><span class="text">Passwort</span>:</td>
										<td><input <?=$style?> type="password" name="password_field" style="width: 50%" value="<?=$_POST['password_field']?>" size="46" maxlength="12"></td>
									</tr>
									<tr>
										<td width="230" align="right"></td>
										<td><span class="formSubText">Sollten Sie die Daten vergessen haben, k&ouml;nnen Sie in der Datei DBSettings.php in dem Verzeichnis includes nachschlagen.</span></td>
									</tr>
									<tr>
										<td width="230" align="right"></td>
										<td><input class="formSubmit" type="submit" name="login_submit" value="Einloggen" border="0"></td>
									</tr>
									<tr>
										<td colspan="2" align="right"><img src="http://www.tutorials.de/forum/images/spacer.gif" alt="" height="50" width="1" border="0"></td>
									</tr>
								</form>
							</table>
						</div>
					</td>
					<td valign="top" background="http://www.tutorials.de/forum/images/strigfon.jpg"><img src="http://www.tutorials.de/forum/images/stolbright.jpg" height="7" width="9"></td>
				</tr>
			</table>
			<table width="685" border="0" cellspacing="0" cellpadding="0">
				<tr>
					<td valign="top" width="15%" height="11" background="http://www.tutorials.de/forum/images/bottom2.jpg"><img src="http://www.tutorials.de/forum/images/bottom1.jpg" height="11" width="9"></td>
					<td valign="top" background="http://www.tutorials.de/forum/images/bottom2.jpg">
						<div align="right">
							<img src="http://www.tutorials.de/forum/images/bottom3.jpg" height="11" width="16"></div>
					</td>
				</tr>
			</table>
		</div>
	</body>

</html>
 
PHP:
class Foo
{
	private $meineInterneEigenschaft = "bar2";
	
	/** statische Eigenschaft **/
	static $meineStatischeEigenschaft = "bar";
	
	
	static public function MeineStatischeMathode() {
		return self::$meineStatischeEigenschaft;
	}
	
	static public function MeineStatischeMethode2() {
		return $this->meineInterneEigenschaft;
	}
}
 
 
/** statischer Aufruf **/
echo Foo::MeineStatischeMathode();

/** statischer Aufruf, wirft allerding einen Fehler da auf Interne Eigenschaften der Klasse nicht zugegriffen werden kann**/
echo Foo::MeineStatischeMethode2();





/** Konstruktoren können keinen return-wert haben **/
class Bar
{
	public function __construct() {
		return "test";
	}
}

$bar = new Bar();
echo $bar;

?>
 
So richtig verstehe ich dein Beispiel noch nicht. Auch weil ich den Fehler bekomme.(rote Markierung)
Using $this when not in object context
Code:
<?php 
class Foo
{
    private $meineInterneEigenschaft='bar2';
    
    /** statische Eigenschaft **/
    static $meineStatischeEigenschaft = 'bar';

    
    static function MeineStatischeMathode() {
        return self::$meineStatischeEigenschaft;
    }
    
   static function MeineStatischeMethode2() {
        return $this->meineInterneEigenschaft;
    }
}
 
 
/** statischer Aufruf **/
echo Foo::MeineStatischeMathode();

/** statischer Aufruf, wirft allerding einen Fehler da auf Interne Eigenschaften der Klasse nicht zugegriffen werden kann**/
echo Foo::MeineStatischeMethode2();





/** Konstruktoren können keinen return-wert haben **/
class Bar
{
    public function __construct() {
        return "test";
    }
}

$bar = new Bar();
echo $bar;

?>
 
Zuletzt bearbeitet:
Es wirft deswegen ein Fehler weil der gewollt ist

/** statischer Aufruf, wirft allerding einen Fehler da auf Interne Eigenschaften der Klasse nicht zugegriffen werden kann**/
echo Foo::MeineStatischeMethode2();


-> kommentieren und Fehler ist weg
 

Neue Beiträge

Zurück