Hi Leute,
ich wollte heute mal wieder etwas in PHP programmieren und dabei wollte ich auf die OOP zurückgreifen.
Projekt ist "noch" ein Email Script.
Bisher sieht das Kontaktformular schlicht gehalten aus. Dies ist auch so gewollt, denn mir geht es im wesentlichen Sinne eher darum etwas die OOP kennen zu lernen.
Das Kontaktfomular wie folgt:
PHP-Code:
<?php
require_once 'Email.php';
echo "
<!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' xml:lang='de' lang='de'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<title>Email.php Test</title>
</head>
<body>
<form action='".$PHP_SELF."' method='POST'>
<input type='text' name='from' /><br />
<input type='text' name='subject' /><br />
<textarea name='text'></textarea><br />
<input type='submit' name='send' value='submit' /><br />
</form>
</body>
</html>
";
if ($send) {
$email = new Email($_POST['subject'], $_POST['text']);
print $email->_sendEmail();
}
?>
bitte nicht wegen dem statischen html im echo Befehl nörgeln
.
hier die Email Klasse in Email.php
PHP-Code:
<?php
$to = '*********';
$header = "MIME-Version: 1.0\n";
$header .= "Content-type: text/html; charset=iso-8859-1\n";
$header .= "From: ".$_POST['from']."\n";
class Email
{
var $subject = '';
var $text = '';
function Email($subject, $text)
{
$this->subject = $subject;
$this->text = $text;
return Email::_sendEmail();
}
function _sendEmail()
{
global $to;
global $header;
if (isset($to, $subject, $text)) {
mail($to, $subject, $text, $header);
return 'Successful';
} else {
return 'Not successful';
}
}
}
?>
Jetzt habe ich das Problem, dass mir sobald ich den submit Button in dem Formular betätige, mir ein "Not successful" ausgegeben wird, obwohl ich alle Felder gesetzt habe.
Außerdem hätte ich noch eine Frage: Funktioniert der Konstruktor wie ich ihn möchte überhaupt?
Wäre für Hilfe dankbar
MfG Matze
$to wegen Spamgefahr/angst ^^ geändert.
/* --------------------------------------------------------------------------------------------------------------------------------------- */
Ich habe es jetzt soweit hinbekommen, dass die Email versendet wird:
PHP-Code:
<?php
require_once 'Email.php';
echo "
<!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' xml:lang='de' lang='de'>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
<title>Email.php Test</title>
</head>
<body>
<form action='".$PHP_SELF."' method='POST'>
<input type='text' name='from' /><br />
<input type='text' name='subject' /><br />
<textarea name='text'></textarea><br />
<input type='submit' name='send' value='submit' /><br />
</form>
</body>
</html>
";
if ($send) {
$email = new Email($_POST['subject'], $_POST['text']);
}
?>
PHP-Code:
<?php
$to = '**********';
$header = "MIME-Version: 1.0\n";
$header .= "Content-type: text/html; charset=iso-8859-1\n";
$header .= "From: ".$_POST['from']."\n";
class Email
{
var $subject = '';
var $text = '';
function Email($subj, $txt)
{
$this->subject = $subj;
$this->text = $txt;
return Email::_sendEmail();
}
function _sendEmail()
{
global $to;
global $header;
if ($this->subject !== '' && $this->text !== '') {
mail($to, $this->subject, $this->text, $header);
return 'Successful';
} else {
return 'Not successful';
}
}
}
?>
Ich musste print $email->_sendEmail(); löschen da sonst das script zweimal ausgeführt werden würde.
Dennoch verstehe ich nicht warum ich meine klasseninternen Variablen $subject und $text nicht in dieser Form verwenden kann - sondern nur mittels $this->subject bzw. $this->text!???
Außerdem wird mir jetzt der Return von _sendEmail() nicht mehr zurückgeben!? Wenn ich print $email schreibe wird nur "Object" ausgegeben. Wie bekomme ich den Return "ausgegeben"?
Vielen Dank schon im Voraus!
MfG Matze
(ist !== richtig?)