Skip to forum
PHP ... Plan irgend...
 
Benachrichtigungen
Alles löschen

[Geschlossen] PHP ... Plan irgendwer?

29 Beiträge
8 Benutzer
0 Reactions
2,292 Ansichten

Moin!

Versuche seit Stunden ein Kontaktformular zu bauen... er schickt aber nie was ab.

Kennt sich jemand aus mit php?


28 replies

Wie sieht den Dein Code so ungefähr aus?
Stell doch den relevanten code mal hier rein. Sollte ja nicht soviel sein.
Dann kann man ja mal schauen.


Jo Mittlerweile kommt tatsächlich etwas an! Allerdings haben die Mails keinen Inhalt...

Der Code sieht zusammengefasst so aus:

<form action="kontakt.php" method="post">

<textarea name="Sonstiges" cols="35" rows="8" class="Textfelder">Sonstige Anfragen, Lob, Kritik, Anregungen etc.</textarea>

<?php

@mail("office@hoodlumz.de", "Kontaktformular (Jobsuchende)", $_post['Sonstiges'], "From: $_POST");

?>
</form>

Der link ist: 3w.rentthehand.de/kontakt.php

Wenn Du Dir das Formular da anguckst isses viel umfangreicher. Das wird aber zu kompliziert hier alles reinzustellen. Mir reichts erstmal wenn überhaupt irgendwas ankommt.

$_post['Sonstiges'] -->

das bedeutet doch das er mir den Inhalt des Textfeldes 'sonstiges' schicken soll oder?


Kernobst
Joined: 26.10.2009

Du solltest in deinem PHP-Code wohl zuerst die Variablen definieren, also sowas wie:

$sonstiges = $_POST['sonstiges'];
$email = $_POST['eMail'];

Auf den meisten Webservern sind die register_globals auf OFF gestellt, was den automatischen Zusammenhang der geposteten Formularfelder und der gleichnamigen Variablen unterbindet, falls sie nicht gesondert angegeben sind (also so wie oben). Außerdem würde ich an deiner Stelle zum Testen das @ vor dem mail weglassen, da du ja gerade die Fehler sehen möchtest, die es erzeugt.

Das @ ist natürlich nicht grundsätzlich falsch: Später beim Betrieb will man natürlich keine hässliche PHP-Fehlermeldung mitten auf der Seite haben, logisch.

Ach so mir fällt noch auf, dass du an dieser Stelle im Code zwei Fehler gemacht hast:

Original von OoFELIXoO
@mail("office@hoodlumz.de", "Kontaktformular (Jobsuchende)", $_post['Sonstiges'], "From: $_POST");

Einerseits ist dein POST klein geschrieben und andererseits hast du bei From die ' einfachen Anführungszeichen bei eMail vergessen. Das sind zwar eigentlich Fehler, allerdings ist PHP normalerweise sehr tolerant. Gewöhn dir bitte trotzdem nicht so einen schlechten Stil an.

Kernobst


Erste Frage. Der Senden Button ist Typ "submit" ?

Hab hier mal Teile einer funktionierenden Seite. Hoffe das ich nicht zuviel wegschneide:

Das Beispiel setzt eine Dropdown List mit Werten aus einer Tabelle hat dann Radiobuttons und ein Textarea. Mit Druck auf den "Submit" Button werden die Daten an PHP verschickt

Attention:

blabla

<?php
$username=$_POST['username'];
$data=$_POST['data'];
$someflags=$_POST['someflags'];
$id = "somesuser";
$pw = "sometest";
$host = "localhost";
$database = "somedb";

$conn_id = mysql_connect($host,$id,$pw) or die("Verbindung konnte nicht hergestellt werden");
mysql_select_db($database,$conn_id) or die("Die Datenbank konnte nicht gefunden werden");
?>
<form action="<?= $PHP_SELF ?>" method="POST">
Username:
<select name="username" size="1">
<?php
$sql="select nickname from table where userid>0 order by nickname";
$Result=mysql_query($sql,$conn_id);
if(!$Result)
{
printf("select Error: Result %d Error %s
\n",$Result,mysql_error($connid));
}
else
{
while($Zeile=mysql_fetch_array($Result))
{
printf("<option>%s</option>\n",$Zeile["nickname"]);
}
}

?>
</select>

<input type="radio" name="someflags" value="value1"> set value1

<input type="radio" name="someflags" value="value2"> set value2

Factors:

<textarea name="data" cols="60" rows="20"></textarea>

<input type="submit" name="send" />
</form>

<?php

if (isset($_REQUEST['send'])&&!isset($_REQUEST['someflags']))
{
printf("<font color=\"red\">Please choose a booking mode !</font>
\n",$TestString);
}


Original von Kernobst
Gewöhn dir bitte trotzdem nicht so einen schlechten Stil an.
Kernobst

Ich versuche es.

Die Variablen definieren bedeutet ich definiere immer den

<textarea name="Sonstiges"

durch

$sonstiges = $_POST['sonstiges'];

und das schreib ich irgendwo in den php Tag?


Im Prinzip ja.

Ach ja zu meinem "Codebeispiel". Beinhaltet garantiert unsauberen Code oder schlechten Stil.


Vielen Dank für Eure Hilfe! Ich probier das erstmal aus...


Also irgendwie haben die Mails noch immer keinen Inhalt. Ich hab jetzt jede Variable definiert:

<?php
@mail("office@hoodlumz.de", "Kontaktformular (Jobsuchende)", $_post['Sonstiges'], "From: $_POST");

$Frau = $_POST['Frau'];
$Herr = $_POST['Herr'];
$Name = $_POST['Name'];
$Vorname = $_POST['Vorname'];
$Geburtstag = $_POST['Geburtstag'];
$Geburtsmonat = $_POST['Geburtsmonat'];
$Geburtsjahr = $_POST['Geburtsjahr'];
$Straße = $_POST['Straße'];
$Postleitzahl = $_POST['Postleitzahl'];
$Nationalität = $_POST['Nationalität'];
$Telefonnummer = $_POST['Telefonnummer'];
$Mobil = $_POST['Mobil'];
$eMail = $_POST['eMail'];
$Tag = $_POST['Tag'];
$Monat = $_POST['Monat'];
$Jahr = $_POST['Jahr'];
$Uhrzeit = $_POST['Uhrzeit'];
$Umzugshilfe = $_POST['Umzugshilfe'];
$Gartenhilfe = $_POST['Gartenhilfe'];
$Haushaltshilfe = $_POST['Haushaltshilfe'];
$Hilfsarbeiten = $_POST['Hilfsarbeiten'];
$Landwirtschaft = $_POST['Landwirtschaft'];
$Kassiererinnen = $_POST['Kassiererinnen'];
$Informatik = $_POST['Informatik'];
$Musikunterricht = $_POST['Musikunterricht'];
$Nachhilfe = $_POST['Nachhilfe'];
$Korrekturlesen = $_POST['Korrekturlesen'];
$Flyerverteiler = $_POST['Flyerverteiler'];
$Babysitten = $_POST['Babysitten'];
$Musikunterricht = $_POST['Musikunterricht'];
$Nachhilfetext = $_POST['Nachhilfetext'];
$Sonstiges = $_POST['Sonstiges'];
$AGB = $_POST['AGB'];
?>

Das form Tag sieht so aus:

<form action="kontakt.php" method="post">

Anrede:
<input type="radio" name="Frau" value="radiobutton" />
Frau
<input type="radio" name="Herr" value="radiobutton" />
Herr

Name*:
<input name="Name" type="text" class="Textfelder" />

Vorname*:
<input name="Vorname" type="text" class="Textfelder" />

Geburtsdatum:
<input name="Geburtstag" type="text" class="Textfelder" size="6" />
<input name="Geburtsmonat" type="text" class="Textfelder" size="6" />
<input name="Geburtsjahr" type="text" class="Textfelder" size="11" />

Straße*:
<input name="Straße" type="text" class="Textfelder" />

Postleitzahl*/Ort*:
<input name="Postleitzahl" type="text" class="Textfelder" />

Nationalität:
<input name="Nationalität" type="text" class="Textfelder" />

Telefonnummer:
<input name="Telefonnummer" type="text" class="Textfelder" />

Mobil:
<input name="Mobil" type="text" class="Textfelder" />

eMail Adresse*:
<input name="eMail" type="text" class="Textfelder" />

Benötigte Dienstleistung/-en

Am:
<input name="Tag" type="text" class="Textfelder" size="6" />
<input name="Monat" type="text" class="Textfelder" size="6" />
<input name="Jahr" type="text" class="Textfelder" size="11" />

Uhrzeit:
<input name="Uhrzeit" type="text" class="Textfelder" />

Umzugshilfe
<input name="Umzugshilfe" type="checkbox" value="checkbox" />

Gartenhilfe
<input type="checkbox" name="Gartenhilfe" value="checkbox" />

Haushaltshilfe
<input type="checkbox" name="Haushaltshilfe" value="checkbox" />

technische Hilfsarbeiten
<input type="checkbox" name="Hilfsarbeiten" value="checkbox" />

Forst- und Landwirtschaft
<input type="checkbox" name="Landwirtschaft" value="checkbox" />

Bürokräfte, Kassierer/-innen
<input type="checkbox" name="Kassiererinnen" value="checkbox" />

Informatik Studenten
<input type="checkbox" name="Informatik" value="checkbox" />

Musikunterricht
<input type="checkbox" name="Musikunterricht" value="checkbox" />

Nachhilfe
<input type="checkbox" name="Nachhilfe" value="checkbox" />

Korrekturlesen
<input type="checkbox" name="Korrekturlesen" value="checkbox" />

Flyer- und Plakatverteiler
<input type="checkbox" name="Flyerverteiler" value="checkbox" />

<textarea name="Babysitten" cols="35" rows="8" class="Textfelder">Babysitten (welches Alter/Erfahrung?)</textarea>

<textarea name="Musikunterricht" cols="35" rows="8" class="Textfelder">Musikunterricht (welches Instrument?)</textarea>

<textarea name="Nachhilfetext" cols="35" rows="8" class="Textfelder">Nachhilfe (welche Fächer?)</textarea>

<textarea name="Sonstiges" cols="35" rows="8" class="Textfelder">Sonstige Anfragen, Lob, Kritik, Anregungen etc.</textarea>

Hiermit aktzeptiere ich die AGB
<input type="checkbox" name="AGB" value="checkbox" />

<input type="submit" value="Senden" name="Senden" class="Textfelder" />

Müsste das nicht laufen jetzt?


Kernobst
Joined: 26.10.2009

Original von OoFELIXoO
Die Variablen definieren bedeutet ich definiere immer den

<textarea name="Sonstiges"

durch

$sonstiges = $_POST['sonstiges'];

und das schreib ich irgendwo in den php Tag?

Ja genau, nur dass du dich auf eine Schreibweise festlegen solltest. Also beide klein bzw. beide groß schreiben. Ich schreibe dabei fast alles klein und nutze für Leerzeichen die _ Unterstriche.


Kernobst
Joined: 26.10.2009

Ui, eigentlich wollte ich gerade den PC ausmachen. Aber gut, ich schreibe dir mal meine Meinung:

Original von OoFELIXoO
@mail("office@hoodlumz.de", "Kontaktformular (Jobsuchende)", $_post['Sonstiges'], "From: $_POST");

Zuerst einmal: Der Befehl zu mailen kommt normalerweise an das Ende deines PHP-Codes. Genau wie die Variablendefinition immer an den Anfang kommt. Also erstmal beides tauschen. Dann ist es momentan bei dir der Fall, dass du bei jedem Neuladen der Seite eine E-Mail verschickst, nicht nur, wenn der Button geklickt wurde. Daher empfehle ich dir, erstmal (also den gesamten PHP-Code umschließend) zu prüfen, ob das Formular überhaupt abgesendet wurde.

Dazu musst du dem Submit-Button einen Namen geben. Der ist bei dir in diesem Fall "Senden" (also name, nicht value), was (wieder für den Stil) ein nicht allzu passender Name ist. Falls du mehrere Formulare hast, brauchst du schon "Senden1" und "Senden2" um festzustellen, welches Formular gesendet wurde. Irgendwann blickt man dann bei den Nummern nicht mehr durch, daher empfehle ich dir, aussagekräftige Namen zu verwenden, die ausdrücken, welches Formular gesendet wurde.

Z.B. : <input type="submit" value="Senden" name="submitdataform" class="Textfelder" />

Dann kannst du im PHP-Code einfach die Bedingung des abgesendeten Formulars aufschreiben:

<?php
if ($_REQUEST['submitdataform']) {

/*
hier kommt alles rein, was nur dann passiert
z.B der "mail"-Befehl und ganz wichtig: vorher auf Eingabefehler (also leere/falsch ausgefüllte Felder) überprüfen
*/
......

}
?>

Original von OoFELIXoO
$Frau = $_POST['Frau'];
$Herr = $_POST['Herr'];

Das ist ziemlicher Unsinn, da du im Formular zwei Radiobuttons definiert hast. Radiobuttons sind immer nur zur Auswahl eines Wertes gedacht, in deinem Formular kann man jedoch beide anwählen (dann nur leider nicht mehr abwählen).

Das liegt daran, dass du zwei verschiedene Namen vergeben hast. Eine Gruppe von zusammengehörigen Radiobuttons muss immer den gleichen Namen, jedoch unterschiedliche Werte (value) haben. In deinem Beispiel wäre das dann:

<?php
$anrede = $_POST['anrede'];
?>

Und im Formular:

Anrede:
<input type="radio" name="anrede" value="Frau" />
Frau
<input type="radio" name="anrede" value="Herr" />
Herr

Ich hoffe, du verstehst meine Ausführungen. Falls nicht, frage einfach nochmal nach. Ach so: Da ich einige Anfängerfehler bemerkt habe, empfehle ich dir, dir ein Anfängerbuch zu kaufen.

Mein erstes PHP-Buch kann ich sehr weiterempfehlen, es werden darin viele Grundlagen behandelt und auch auf MySQL eingegangen: Amazon

Außerdem gibt es noch bis einschließlich morgen ein kostenloses PHP-Buch bei buecherbillig.de. Du zahlst nur die Versandkosten. Den buecherbillig-Newsletter kann ich dir auch ans Herz legen, es werden monatlich wirklich SEHR günstige / kostenlose Bücher zum großen Thema Programmierung angeboten.


Kernobst
Joined: 26.10.2009

Nabend!

Jo vielen Dank nochmal für Deine Hilfe!! Also ich hab das jetzt versucht umzusetzen und der code sieht jetzt so aus:

<?php

... die ganzen Variablendefinitionen ...

...
$Sonstiges = $_POST['Sonstiges'];
$AGB = $_POST['AGB'];
$submitdataform = $_GET['submitdataform'];

if($_REQUEST['submitdataform']) {
if(@mail("office@hoodlumz.de", "Kontaktformular (Jobsuchende)", ...

$_post['Sonstiges'], $_post['Anrede'], $_post['Name'], $_post['Vorname'], $_post['Geburtstag'], $_post['Geburtsmonat'], $_post['Geburtsjahr'], $_post['Straße'], $_post['Postleitzahl'], $_post['Nationalität'], $_post['Telefonnummer'], $_post['Mobil'], $_post['Tag'], $_post['Monat'], $_post['Jahr'], $_post['Uhrzeit'], $_post['Umzugshilfe'], $_post['Gartenhilfe'], $_post['Haushaltshilfe'], $_post['Hilfsarbeiten'], $_post['Landwirtschaft'], $_post['Kassiererinnen'], $_post['Informatik'], $_post['Musikunterricht'], $_post['Nachhilfe'], $_post['Korrekturlesen'], $_post['Flyerverteiler'], $_post['Babysitten'], $_post['Musikunterricht'], $_post['Nachhilfetext'], $_post['Sonstiges'], $_post['AGB'],

"From: $_POST")) { echo "Ihre Nachricht wurde verschickt";
} else { echo "Ein Fehler ist aufgetreten";
}
}
?>

Leider macht der das nicht! Er schickt nichts ab... aber ich hab mir auf jeden Fall auch dieses Buch bestellt. Das gabs ja echt hinterhergeschmissen!


Kernobst
Joined: 26.10.2009

Original von OoFELIXoO
aber ich hab mir auf jeden Fall auch dieses Buch bestellt. Das gabs ja echt hinterhergeschmissen!

Welches Buch hast du dir bestellt? Beide oder nur das kostenlose? Also beim kostenlosen von buecherbillig.de weiß ich nicht, wie das ist. Aber das andere "PHP & MySQL" ist wirklich sehr empfehlenswert.

Original von OoFELIXoO
$submitdataform = $_GET['submitdataform'];

Das verstehe ich nicht ganz. Wie kommst du an dieser Stelle auf $_GET? Also dein Formular ist ja im POST-Modus. Für $_REQUEST['submitdataform'] musst du keine neue Variable verwenden, da du diesen Wert sowieso nur hier brauchst:
if($_REQUEST['submitdataform']) {
Das heißt, es reicht, den Originalwert zu nehmen und die neue Variablendefinition (bzw. Zuweisung) solltest du einfach weglassen.

Original von OoFELIXoO
if(@mail("office@hoodlumz.de", "Kontaktformular (Jobsuchende)", ...

$_post['Sonstiges'], $_post['Anrede'], $_post['Name'], $_post['Vorname'], $_post['Geburtstag'], $_post['Geburtsmonat'], $_post['Geburtsjahr'], $_post['Straße'], $_post['Postleitzahl'], $_post['Nationalität'], $_post['Telefonnummer'], $_post['Mobil'], $_post['Tag'], $_post['Monat'], $_post['Jahr'], $_post['Uhrzeit'], $_post['Umzugshilfe'], $_post['Gartenhilfe'], $_post['Haushaltshilfe'], $_post['Hilfsarbeiten'], $_post['Landwirtschaft'], $_post['Kassiererinnen'], $_post['Informatik'], $_post['Musikunterricht'], $_post['Nachhilfe'], $_post['Korrekturlesen'], $_post['Flyerverteiler'], $_post['Babysitten'], $_post['Musikunterricht'], $_post['Nachhilfetext'], $_post['Sonstiges'], $_post['AGB'],

usw.
}

Hmm, das würde ich anders lösen. Ersteinmal: Warum schreibst du plötzlich in den Mail-Text alle POSTs rein? Du definierst ja oben die Variablen (also z.B. $Sonstiges), damit du NICHT mehr diese lange und umständliche Schreibweise mit den POSTs benutzen musst. Des weiteren würdest du bei diesem Funktionsaufruf der mail-Funktion alle Werte direkt, unformatiert hintereinander schreiben. Also sowas wie:

HerrMustermannMax01.01.2000Januar2000 usw.

Ich empfehle dir, deine Mails nach einem festen Muster zu strukturieren, sodass im eigentlichen Funktionsaufruf nur kurze Variablen stehen. Generell lässt sich sagen, dass ein mehrzeiliger Funktionsaufruf immer hässlich und unübersichtlich ist.

Ich verwende dabei folgende Form:

//Mail verschicken
$an = $email; // Empfänger-Adresse

$betreff = "Nachricht von x";
$text = "Guten Tag $vorname

Hier steht eine tolle E-Mail, die wunderbar formatiert ist.

Deine x-Webseite";
mail($an,$betreff,$text,$header_mail);

Die Variable $header_mail ist bei mir recht umfangreich, da mein Webhoster nur Mails mit sehr speziellen Headern erlaubt.

Was ich dir generell noch empfehlen würde: Mach doch mal eine neue PHP-Datei und schreibe nur den Funktionsaufruf mail rein. Das müsste ja auch funktionieren, also z.B.

<?php
mail("blablubb@bla.de","Betreff","Guten Morgen, dies ist der Text","From: @asdf.de">asdf@asdf.de");
?>

Viel Spaß mit PHP.

Kernobst


Renne01
Joined: 15.05.2007

Wenn du ein Buch zum Lernen hast ist das gut, wobei aber nicht alle gut für Einsteiger geeignet sind. Wenn du einfach nur dieses Form brauchst, schau mal da:
http://www.homepage-total.de/

bzw.

http://www.homepage-total.de/tools/kontaktformular-generator.php

Da findest du viele fertige Skripte, auch Kontaktformulare.


das vermutlich beste php tutorial: http://tut.php-quake.net/de/
aber heutzutage würde ich netmehr mit php anfangen, ist einfach nichtmehr zeitgemäß ;)


Kernobst
Joined: 26.10.2009

Original von elbarto132
aber heutzutage würde ich netmehr mit php anfangen, ist einfach nichtmehr zeitgemäß ;)

Nicht mehr zeitgemäß? Was schlägst du denn als Alternative vor?


python oder ruby, jeweils halt mit nem entsprechenden framework wie http://www.djangoproject.com/ bzw http://www.rubyonrails.de/


jokerhb
Joined: 30.01.2007

Original von elbarto132aber heutzutage würde ich netmehr mit php anfangen, ist einfach nichtmehr zeitgemäß ;)
Die Aussage finde ich - vorsichtig formuliert - falsch. PHP5 (V. 4 und drunter ist definitiv Schrott) bietet alles, was eine Scriptsprache(!) bieten sollte. Den wohl einzigen ernsthaften Punkt, den man an PHP bemängeln kann ist wohl das Fehlen strenger Typisierung, was allerdings ettliche Menschen (not me) durchaus als Vorteil ansehen.

Gute Entwicklungsframeworks gibt es für PHP ebenfalls, siehe z.B. cakePHP und Zend Framework.

my2cents
joker


Deradon
Joined: 03.09.2007

Original von jokerhb
Gute Entwicklungsframeworks gibt es für PHP ebenfalls, siehe z.B. cakePHP und Zend Framework.

my2cents
joker

[highjackmode]
Kannst du mir evt. noch Tuts für den Beginn von cakePHP verlinken?
Würd mich da gerne in das Framework die nächsten Tage reinarbeiten.

Das Manual auf der offiziellen Seite hab ich schon gesichtet und die 2 gegebenen Tuts werd ich durcharbeiten.

Am besten wär was, in dem es nen Sessionmanagement schon gibt und perfekt wenn es dazu auch noch was mit nem Downloadmanagement gibt :)
[/highjackmode]

Sorry 4 highjack :)