"We are back" « oc.at

PHP - Formulardaten senden (arrays)

Nightstalker 09.09.2007 - 19:41 1288 10
Posts

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6903
Hi

folgendes Problem, ich hab ein Formular bestehend aus Feldern für Vor-, Nachname, Emailadresse und eine Textnachricht sowie 5 Checkboxen und zu jeder Checkbox nochmal ein Textfeld.

Ich will nun die Daten per Mail (also vom Server aus) versenden. Ich hab das soweit alles schon geschafft aber die checkboxen machen mir Probleme!


Code: PHP
              <input type="checkbox" name="anmeldung[]" value="Seminar1">  

So sehen die checkboxes aus, ok?

Was ich nun machen möchte ist beim Versenden eine Nachricht zu generieren die wie folgt aussieht:

Nachricht von
Name Vorname

Nachricht:
Meine persönliche Mitteilung

Ich melde mich für folgende Seminare an:
Seminar 1, Seminar 2, usw.

Der 1. Teil Funktioniert auch aber ich bekomme das mit dem Array nicht in den Griff, es soll so sein dass der Text " ich melde mich für folgende Seminare an" auch nur dann angezeigt werden soll wen auch eines oder mehrere Seminare angekreuzt sind und genau diese sollen dann eben unten gelistet werden.

Irgendwie will mir das nicht gelingen!


Das Formular selbst ist ganz simpel in HTML gemacht, versendet soll über eine externe PHP Datei werden die im Prinzip nur prüft ob Absender usw. eingetragen sind und dann die Werte in einer Variable "message" zusammenhängt und per mail funktion an die definierte Adresse sendet.

Bitte helft mir dabei die Checkboxwerte in das Mail zu bekommen!

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11346
Zitat von Nightstalker
Irgendwie will mir das nicht gelingen!

Gehts auch mit einer genaueren Beschreibung? Wie hast du es denn versucht?

Nico

former person of interest
Registered: Sep 2006
Location: -
Posts: 4082
durchlaufe das array mit einer schleife (foreach). falls das array leer ist -> gib nichts aus : das machst du mit einer zählvariabel , während es durchlaufen wird ($x++).
wenn $x > 0 dann kommt der satz.

alles klar? :)
Bearbeitet von Nico am 09.09.2007, 20:01

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6903
Also wie hab ichs versucht, schwer zu erklären und das Formular hab ich jetzt nicht hier ich versuchs mal sonst post ich am Abend den code.

Ich hab 2 varianten probiert, einmal eine in der ich das Sendescript in der formular Datei hatte und eine wo es extern (mail.php) war beides mit gleichem Ergebnis.

So sieht mein Formular aus:

Code: PHP
<form id="kontakt" name="kontakt" method="post" action="mail.php">
  <p>Kontaktformular</p>
  <p>
    <label>Name
    <input type="text" name="name" id="name" tabindex="1" />
    </label>
  </p>
  <p>
    <label>Nachname
    <input type="text" name="nachname" id="nachname" tabindex="2" />
    </label>
  </p>
  <p>
    <label>email
    <input type="text" name="email" id="emaiil" tabindex="3" />
    </label>
  </p>
  <p>
    <label>Nachricht <br />
    <textarea name="nachricht" id="nachricht" cols="45" rows="5" tabindex="4"></textarea>
    </label>
  </p>
  <p>Anmeldungen:<br />
      <label>
        <input type="checkbox" name="anmeldung[]" id="seminar1" value="Seminar 1" tabindex="5" />
        Seminar 1</label>
        <br />
        <label>
        <input type="checkbox" name="anmeldung[]" id="seminar2" value="Seminar 2" tabindex="6" />
Seminar 2</label>
        <br />
        <label>
        <input type="checkbox" name="anmeldung[]" id="seminar3" value="Seminar 3" tabindex="7" />
Seminar 3</label>
        <br />
        <label>
        <input type="checkbox" name="anmeldung[]" id="seminar4" value="Seminar 4" tabindex="8" />
Seminar 4</label>
        <br />
        <label>
        <input type="checkbox" name="anmeldung[]" id="seminar5" value="Seminar 5" tabindex="9" />
Seminar 5</label>
  </p>
  <p>
    <input type="submit" name="Absenden" id="button" value="gesendet" />
  </p>
  <p><br />
    
    <br />
  </p>
</form>

Soweit so gut, die mail.php sieht in etwa so aus (das original hab ich nicht hier ich habs also mal nachgebastelt wie es aussehen könnte

Zuerst die Variablen holen richtig?
Code: PHP
<?php
$gesendet = $_POST['gesendet'];
$email = $_POST['email'];
$name = $_POST['name'];
$nachname = $_POST['nachname'];
$nachricht = $_POST['nachricht'];
$betreff = "Kontaktanfrage"

Nun sollte ich also wissen ob das Forumlar über den Button gesendet wurde, ich sollte eine absender email haben, den Namen und Nachnamen sowie die Nachricht.

Dann erstelle ich eine Abfrage die eine Nachricht versendet wenn das Formular als "gesendet" gilt und bastle den Text zusammen...

Code: PHP
if ($gesendet == "Absenden") {
 $an ="meineadresse@meinedomain.at";

 $text ="Hallo,\n Sie haben eine neue Nachricht von $vorname $nachname erhalten:\n\n
 ====\n $nachricht\n====\n\n";

 mail($an,$betreff,$text,"From: ".$email);
 echo "<b>Ihre Nachricht wurde gesendet!</b>";
}
else { ?>

Und hier soll nun, falls Checkboxen gewählt wurden, unter dem Nachricht Text eine Zeile kommen die sagt:

Ich möchte mich für folgende Seminare anmelden:
Seminar 1, Seminar 2, usw.

Daher brauch ich also die Werte aus dem array anmeldung[] richtig?
Code: PHP
foreach ($anmeldung as $seminare)

edit: ach ja dazu muss ich ja auch das array aus dem Formular übergeben oder?
Code: PHP
$anmeldung= ($_POST['anmeldung']
Stimmt das so?



So und wie bekomme ich das nun so zusammengestoppelt dass dann in meiner Nachricht unten drann besagte Zeile angezeigt wird wenn man im Formular eine der Boxen auswählt?

Zugegeben ich war gestern etwas müde und hab mich am Fleck gedreht, vielleicht hätt ichs geschafft wenn ich ausgeschlafen gewesen wäre !?

Vielleicht könnt ihr mir ja den entscheidenden Hinweis geben, ich hab irgendwo nen Fehler drinn gehabt ich weiß auch garnichtmehr was ich alles probiert habe.

lg
Bearbeitet von Nightstalker am 10.09.2007, 10:47

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
Würde es dir was ausmachen die kompletten files irgendwo zu pasten (nicht hier), damit wir uns ein Bild machen können?

der fehler wird sich recht flott finden lassen

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6903
Hi

nö würde es im Grunde nicht der Code steht aber eh oben ;) Mehr ist es nicht!

Gestern noch ein wenig gebastelt und hier ist die aktuelle Version des PHP Scripts

Hab da gestern noch mit einem Kollegen rumgebastelt, die Formatierung passt mir noch nicht aber das ist mal Nebensache. Ich bin mit der Lösung nicht ganz zufrieden denn er übergibt hier ja JEDE Checkbox, was ich nicht brauche, ich will am Ende nur die ausgewählten übergeben da ich keine grafische Darstellung will (das bräucte ich wenn ich z.B. das Formular als HTML übergeben wollte um dann auch die Checkboxen gesetzt und nicht gesetzt anzuzeigen ok)

Es sollte ja genügen die Checkboxen alle mit "anmeldung[]" im name atribut zu versehen? Damit müsste man ja eigentlich alle Values im Array anmeldung haben oder? Dann müsste man nurnoch mit foreach aus dem Array anmeldung alle Werte in eine Variable (bei mir eben als $seminare angegeben) schreiben und diese könnte man dann ja auch ausgeben. So stehts jedenfalls geschrieben

Beispielcode
Code: PHP
<?php
  foreach($anmeldung as $seminare)
  echo $seminare,"<br>";
  ?>

Das müsste dann eigentlich den Inhalt des Arrays ausgeben richtig? Woran ich aber gescheitert bin ist, das ganze noch in die Variable $text zu bekommen und zwar so dass eben der Satz "ich möchte mich ... anmelden" nur kommt wenn auch welche angewählt wurden.

Eigentlich ist das ganze ja lächerlich aber irgendwo hab ich einen Denkfehler drinn glaub ich ;)

Ok damt es nun ganz unübersichtlich wird noch meine Idee, kann das so gehen, eigentlich sollte das doch passen, kann es leider hier nicht testen ich hab keinen Server der PHP laufen hat.

Code: PHP
<?php
$Absenden = $_POST['Absenden'];
$email = $_POST['email'];
$name = $_POST['name'];
$nachname = $_POST['nachname'];
$nachricht = $_POST['nachricht'];
$anmeldung = $_POST['anmeldung'];
$betreff = "Kontaktformular Anfrage";

if ($Absenden == "Absenden") {
 $an ="meineadresse@meinedomain.at";
 
 foreach ($anmeldung as $seminare) {
	 $seminaranmeldungen = $seminare
 }

 $text ="Hallo,\n Sie haben eine neue Nachricht von $vorname $nachname erhalten:\n\n
 
 
 ====\n $msgtext\n====\n\n
 
 Ich möchte mich für folgende Seminare anmelden: $seminaranmeldungen\n\n
 
 
 Sie können $name $nachname unter dieser $email erreichen.";

 mail($an,$betreff,$text,"From: ".$email);
 echo "<b>Ihre Nachricht wurde gesendet!</b>";
}
else {
	echo "kein mail zum senden";
}

?>

DANKE!

Nico

former person of interest
Registered: Sep 2006
Location: -
Posts: 4082
und wo is der zähler?

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
Code: PHP
foreach ($anmeldung as $seminare) {
    $seminaranmeldungen = $seminare
} 

hier gehört einmal ein Strichpunkt, wundert mich wenn dein code überhaupt läuft wenn du ihn nur herausgepastet hast ;)

Weiters kann das in meinen augen nicht funktionieren, du vergisst: du ließt mit foreach jedes element einzeln aus dem array aus. wenn du es in einem anderen array speicehrn willst musst du es so machen, ist aber sinnfrei:
(anm: ich schreib extra $seminar denn es ist immer nur eine einheit)
Code: PHP
$seminaranmeldungen = array();
foreach ($anmeldung as $seminar) {
    $seminaranmeldungen[] = $seminar;
} 

wenn du den text in einem string speichern möchtest

Code: PHP
$seminaranmeldungen = "";
foreach ($anmeldung as $seminar) {
    $seminaranmeldungen .= $seminar." ";
} 

Ich hoffe das hilft dir weiter, ansonsten empfehle ich dir mal:
http://aktuell.de.selfhtml.org/artikel/php/checkboxen/
http://at2.php.net/manual/en/contro...res.foreach.php

Wie in dem selfhmtl artikel beschrieben wäre auch für dich wohl ein einfaches http://at2.php.net/manual/en/function.implode.php am besten :)

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6903
Ne der ist nicht gapastet, zumindest nicht von ner anderen Seite, hab ich aus dem Editor im Hintergrund kopiert, den ; hab ich einfach vergessen, kann ja mal vorkommen nicht gleich steinigen bitte *g*
Ich bin ja auch Grafiker und kein Coder!

Was mir gefehlt hat war das was du unten gepostet hast > text in string speichern!
Ich war immer der Meinung dass mir foreach ($array as $wert) dann ALLE WERTE in der variablen $wert drinnen stehen da das in den ganzen Beispielen die man so im Netz findet immer so aussieht

z.B. hier http://www.schattenbaum.net/php/array.php

Der hat genau so ein Konstrukt
Zitat
Mit foreach wird jeder Wert des Arrays vorrübergehend einer Variable zugeordnet und dann zB gelistet. Der Name der Variable wird durch den Befehl as angegeben.
Code: PHP
  <?php
  foreach($blumen as $meine_blume)
  echo $meine_blume,"<br>";
  ?>
Die Liste würde dann so aussehen:

Rose
Tulpe
Nelke
Sonnenblume

Mein Irrglaube war dass das so in der Variable gespeichert wird, in wirklichkeit wird einfach (weil foreach ja eine schleife ist) bei jedem Durchlauf EINER (also der nächste) der Werte in die $wert geschrieben und beei jedem Durchgang ausgegeben... Somit ist mir auch klar warum das nicht funktioniert haben kann.
Daher ich muss so wie du unten gepostet hast das ganze in einen String schreiben, der beinhaltet dann alle Werte nacheinander mit "," getrennt und DEN kann ich dann in $text auch ausgeben mit $string

Mit impode() hab ichs auch schon versucht gehabt, das hat nicht geklappt ich weiß nun aber auch warum denn da hab ich irgendwo eine flasche angabe drinn gehabt. Werd mich heute nochmal hinsetzen und das machen sobald ich wieder zu meinem Server kann!


Ich denke nun ist der Groschen gefallen, ja wie gesagt, ich bin kein coder ;)
Bearbeitet von Nightstalker am 11.09.2007, 11:02

moidaschl

Vollzeit-Hackler
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
Wie gesagt, machs mit implode dann ersparst du dir eine leidige foreach.

Code: PHP
$seminare = implode(',', $anmeldung);
echo $seminare;
=> "Seminar1,Seminar2"

Verstanden? :)

Nightstalker

ctrl+alt+del
Avatar
Registered: Jan 2002
Location: .^.
Posts: 6903
Jup, hab ich gleich nach meinem Postin so gemacht ;) Testen kann ich hald noch nicht...

Alles roger!


Jetzt muss ich noch diverse Abfragen einbauen wie Emailadresse, Name usw. und ev. noch nen "Spamschutz" aber das dürfte weniger Aufregend sein, dazu findet sich eh einiges das sich gut adaptieren lässt da müssen im Normalfall nurnoch die Variablen geändert werden.

Danke für die Hilfe jedenfalls mal, ich komme wieder wenn ich was brauch!
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz