PHP OOP und Variablen (Übergabe/Ausgabe)

TomHH

Mitglied
Schönen Tach :-)

Ich habe hier (mal wieder) so eine Sache, die ich nicht verstehe. Ich habe folgende Funktion(en):
Code:
	function checkinput()
	{
	$this->name = $_POST['name'];
	$this->vname = $_POST['vname'];
	$this->nick = $_POST['nick'];
	$this->pass = $_POST['userpass'];

		if ( $this->name == "")
		{//if1
			$error = "Bitte geben Sie einen Namen ein";
			forum::err_form($this->name,$this->vname,$this->nick,$error);
		}//if1
		
			if ( $this->vname == "")
			{//if2
				$error = "Bitte geben Sie einen Vornamen ein";
				forum::err_form($this->name,$this->vname,$this->nick,$error);
			}//if2
		
				if ( $this->nick == "")
				{//if3
					$error = "Bitte geben Sie einen Nick ein";
					forum::err_form($this->name,$this->vname,$this->nick,$error);
				}//if3
		
					if ( $this->pass == "")
					{//if4
						echo $this->error = "<br>Bitte geben Sie ein Passwort ein";
						forum::err_form($this->name,$this->vname,$this->nick,$this->error);
					}//if4
		else
		{
			forum::newuser();
		}//else
	}//fn checkinput

Sie ist Teil der class forum () in der Datei global.php

Wie zu sehen ist, erzeuge ich jedesmal eine $error bzw. $this->error (unterschiedlich zu Testzwecken), um die entsprechende Fehlermeldung in der Datei getaccount.php anzeigen zu können.

Code:
function err_form($name,$vname,$nick,$error)
	{
		//echo $error; EDIT So würde sie ausgegeben werden, also                                
               //steht auch das richtige drin... ==> isset /EDIT
		include_once 'getaccount.php';
	}

Nun ist aber genau hier das Problem. Die Fehlermeldung wird nicht ausgegeben, wenn ich sie in getaccount.php auf diese Weise versuche ausgeben zu lassen - Bsp.:
Code:
<tr>
			  <td>Dein Nick:</td>
			  <td><?php echo $error."<br>" ?><input type="text" name="nick" value="<?php echo $nick; ?>" size="50"/></td>
			</tr>
dann kommt nichts!

Ich weiß nicht, ob es zum Verständnis reicht, aber ich hoffe ;-) Hat jemand zufällig einen Hinweis?

Merci beaucoup!

Tom 8)
 
keine ahnung!

Ich kann Dir leider nicht helfen, bin so ziemlich am Anfang noch :rolleyes:

Mich würde aber interessieren, ob Du bei $this->* nur mit Kopien einer Variable arbeitest oder mit den Orginalen.
 
Also ich habe mal dein Script kurz ausprobiert und ich denke es liegt an dem Include_once. Vielleicht hattest du die datei "getaccount.php" schonmal eher eingebunden. Mach das mal mit include. Und die Fkt. err_form kannste auch über $this->err_form aufrufen anstatt forum::err_form.

@Sibra. Schöner Spam ;) Wenn du Variablen in der Klasse ansprichst, also mit $this->variable dann arbeitest du mit den orginalen. Also bei $this->variable = 0; wird die Variable in der Klasse wirklich 0 ;)

edit: TomHH versuch mal deine Fehlerstrings in ' zu fassen anstatt in ". Hast ja keine Variablen drin, die du berücksichtigen musst.

Noch ein Fehler, warum es nicht gehen könnte. Du schreibst include_once 'getaccount.php'. Müsste wenn schon dann include_once('getaccount.php') heissen, wenn ich mich nicht irre.
 
Zuletzt bearbeitet:
Original geschrieben von KoMtuR
Also ich habe mal dein Script kurz ausprobiert und ich denke es liegt an dem Include_once. Vielleicht hattest du die datei "getaccount.php" schonmal eher eingebunden. Mach das mal mit include. Und die Fkt. err_form kannste auch über $this->err_form aufrufen anstatt forum::err_form.
Nun, das mit dem include_once musste ich machen, da ich eine Session zuvor initialisiere und bei include hat er rumgemotzt, obwohl ich eine Prüfung habe, ob die Session bereits existiert!?
Code:
Fatal error: Cannot redeclare newsession() (previously declared in C:\Development\xampp\htdocs\inc\global.php:41) in C:\Development\xampp\htdocs\inc\global.php on line 40
$this->err_form() klappt auch! Gut zu wissen...
edit: TomHH versuch mal deine Fehlerstrings in ' zu fassen anstatt in ". Hast ja keine Variablen drin, die du berücksichtigen musst.
Hat nichts geändert :-(
Noch ein Fehler, warum es nicht gehen könnte. Du schreibst include_once 'getaccount.php'. Müsste wenn schon dann include_once('getaccount.php') heissen, wenn ich mich nicht irre. [
Nö, geht anscheinend beides. Hatte ich auch kurz gedacht und in anderen Scripts von mir nachgeschaut und gesehen, dass es geht. Sonst wäre ohnehin eine Fehlermeldung geworfen worden...

Komisch das alles....
&nbsp;
 
hmm. naja ich hatte ja das include_once... mit dem Text ersetzt, den du angegeben hattest und da ging es einwandfrei. Also muss irgendwas in der getaccount.php stehen, was nicht gerade so günstig ist ;)
 
Nun denn hier mal der bisherige Code von getaccount.php:
Code:
<?php
include ("inc/global.php");
newsession();
$conn = new forum();
$conn -> hconnect();
$conn -> dbselect();

if (isset($_POST["send"])){
	$this->name = $_POST['name'];
	$this->vname = $_POST['vname'];
	$this->nick = $_POST['nick'];
	$this->pass = $_POST['userpass'];
	$conn -> checkinput();
}//if1
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Neuen User-Account anlegen</title>
</head>

<body>
  <table width="800" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td><img src="images/spacer.gif" width="400" height="1" /></td>
      <td><img src="images/spacer.gif" width="400" height="1" /></td>
    </tr>
    <tr>
      <td colspan="2">
	  	<form name="newuser" action="<?php echo $PHP_SELF ?>" method="post">
		  <table width="100%"  border="0" align="center" cellspacing="2" cellpadding="2">
			<tr>
			  <td><img src="images/spacer.gif" width="160" height="1" /></td>
			  <td><img src="images/spacer.gif" width="640" height="1" /></td>
			</tr>
			<tr>
			  <td>Dein Name:</td>
			  <td><?php echo $error."<br>" ?><input type="text" name="name" value="<?php echo $name; ?>" size="50"/></td>
			</tr>
			<tr>
			  <td>Dein Vorname:</td>
			  <td><?php echo $error."<br>" ?><input type="text" name="vname" value="<?php echo $vname; ?>" size="50"/></td>
			</tr>
			<tr>
			  <td>Dein Nick:</td>
			  <td><?php echo $error."<br>" ?><input type="text" name="nick" value="<?php echo $nick; ?>" size="50"/></td>
			</tr>
			<tr>
			  <td>Gew&uuml;nschtes Passwort:</td>
			  <td><?php echo $error."<br>" ?><input type="password" name="userpass" value="" size="50"/></td>
			</tr>
			<tr>
			  <td>&nbsp;</td>
			  <td><input type="submit" name="send" value="Daten eintragen" />&nbsp;
		      <input type="reset" name="reset" value="Daten l&ouml;schen" /></td>
			</tr>
		  </table>
	  	</form>
	  </td>
    </tr>
    <tr>
      <td><img src="images/spacer.gif" width="400" height="1" /></td>
      <td><img src="images/spacer.gif" width="400" height="1" /></td>
    </tr>
  </table>
</body>
</html>
 
Also irgendwie ist dein Code ein wenig komisch. Du includest eine Seite, die dann wieder prüft, ob deine Eingaben ok sind. Ausserdem erstellst du noch ein forum-Objekt. Irgendwie nicht logisch :)

Würde die Seite einfach nochmal per header neu laden lassen und dann damit den fehler ausgeben lassen. Also mit $_GET.
PHP:
function err_form($name,$vname,$nick,$error)
	{
		//echo $error; EDIT So würde sie ausgegeben werden, also                                
               //steht auch das richtige drin... ==> isset /EDIT
		header("Location: getaccount.php?name=$name&vname=$vname&nick=$nick&error=$error");
	}

Und deine getaccount.php musst du nur nochmal umschreiben.

PHP:
<?php
include ("inc/global.php");
newsession();
$conn = new forum();
$conn -> hconnect();
$conn -> dbselect();

if (isset($_POST["send"])){
	$this->name = $_POST['name'];
	$this->vname = $_POST['vname'];
	$this->nick = $_POST['nick'];
	$this->pass = $_POST['userpass'];
	$conn -> checkinput();
}//if1
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Neuen User-Account anlegen</title>
</head>

<body>
  <table width="800" border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
      <td><img src="images/spacer.gif" width="400" height="1" /></td>
      <td><img src="images/spacer.gif" width="400" height="1" /></td>
    </tr>
    <tr>
      <td colspan="2">
	  	<form name="newuser" action="<?php echo $PHP_SELF ?>" method="post">
		  <table width="100%"  border="0" align="center" cellspacing="2" cellpadding="2">
			<tr>
			  <td><img src="images/spacer.gif" width="160" height="1" /></td>
			  <td><img src="images/spacer.gif" width="640" height="1" /></td>
			</tr>
			<tr>
			  <td>Dein Name:</td>
			  <td><?php echo $_GET['error'] ,"<br>" ?><input type="text" name="name" value="<?php echo $_GET['name'] ?>" size="50"/></td>
			</tr>
			<tr>
			  <td>Dein Vorname:</td>
			  <td><?php echo $_GET['error'] , "<br>" ?><input type="text" name="vname" value="<?php echo $_GET['vname'] ?>" size="50"/></td>
			</tr>
			<tr>
			  <td>Dein Nick:</td>
			  <td><?php echo $_GET['error'] , "<br>" ?><input type="text" name="nick" value="<?php echo $_GET['nick'] ?>" size="50"/></td>
			</tr>
			<tr>
			  <td>Gewünschtes Passwort:</td>
			  <td><?php echo $_GET['error'] , "<br>" ?><input type="password" name="userpass" value="" size="50"/></td>
			</tr>
			<tr>
			  <td> </td>
			  <td><input type="submit" name="send" value="Daten eintragen" /> 
		      <input type="reset" name="reset" value="Daten löschen" /></td>
			</tr>
		  </table>
	  	</form>
	  </td>
    </tr>
    <tr>
      <td><img src="images/spacer.gif" width="400" height="1" /></td>
      <td><img src="images/spacer.gif" width="400" height="1" /></td>
    </tr>
  </table>
</body>
</html>

Hoffe hab nun alles geändert. Probier das mal so. ist vielleicht einfacher :)
 
Irgendwie hab ich mir den Code nochmals angeschaut und wiedermal frage ich mich, ob in getaccount.php eine Klasse steckt. Aber irgendwie seh ich da kein Sinn. Mysteriös ;)
 
@KoMtuR

Vielen Dank schon mal! Es klappt :-)
Ich muss zugeben, dass ich gerade dabei bin die PHP-Programmierung beizubringen und die OOP ist mir noch nicht ganz klar :-)

Ich wäre also für hilfreiche Alternativen sehr empfänglich ;-) Ich dachte mir, dass es wenig Sinn macht, extra eine Datei mit der Logik der Prüfung und so weiter anzulegen und dachte es sei besser die globals.php als zentralen Logik-Container zu nutzen!? Wäre es denn besser (oder für mein Ansinnen einfacher) ein anderes Vorgehen zu wählen?

@Johannes Röttger
Welche Stelle des Codes meinst du?

Echt klasse von euch, mir so viel Zeit zu opfern!

Tom
&nbsp;
 
Zurück