PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Formular mit Checkboxen übermitteln - Komme nicht weiter (http://www.selfphp.de/forum/showthread.php?t=16332)

M.Kreimer 09.03.2007 15:22:29

Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Hallo Community,

ich habe mich gerade hier angemeldet, da ich momentan eine kleine Umfrage für unser Praktikum umsetzen soll.

Folgendes ist Stand der Dinge.

Es wird eine Befragung verlangt, wo es nur darum gilt, dass Checkboxen übermittelt werden.

Dies sieht z.B. so aus

Frage 1: Seit wieviel Jahren haben Sie Ihren Führerschein

[ ] 0 - 5 Jahre
[ ] 6 - 10 Jahre
[ ] 11 - 15 Jahre
[ ] 16 - 20 Jahre
usw.

Frage 2 (ist dann von der Art her gleich, nur halt andere Fragen

Jetzt habe ich ein Problem damit, die Checkboxen zu übermitteln. Wir haben vorher ein ganz normales kleines Mailformular erstellt, wo wir folgendes Script zur Verfügung gestellt bekommen haben

Zitat:

<?php
if($sentemail == "2"){
include("sorry.php");

}else{

$num = $sentmessage + 1;
setcookie("sentemail","$num",time()+600); //set the cookie

$email = "Name:\t$v1\nVorname:\t$vvname\n\nStrasse:\t$vstreet\nWohnort:\t$vort\ nTelefon:\t$vtelefon\nMobil:\t$vmobil\nTelefax:\t$vfax\nE-Mailadresse:\t$vmail / \n\n\nNachricht:\t$vmsg\n\nIP Adresse des Versenders:\t$REMOTE_ADDR\n\n";
$to = "meineemailadresse@domain.de";
$subject = "Kontakt durch Webseite";
$mailheaders = "From: $vmail <> \n";
$mailheaders .= "Reply-To: $vmail\n\n";
mail($to, $subject, $email, $mailheaders);
include("dankeecho.php");
}
?>
Bei dem Mailformular haben wir den Eingabefeldern immer einen Variablennamen geben müssen (z.B. vname, vort usw.)

Dieses Formular wollte ich jetzt zum Übermitteln der Checkboxen "missbrauen", aber das scheint nicht zu funktionieren :(

Die Checkboxen haben ich so angelegt

Zitat:

<input name="1" type="checkbox" id="1" tabindex="1" value="v1">
<input name="2" type="checkbox" id="2" tabindex="2" value="v2">
<input name="3" type="checkbox" id="3" tabindex="3" value="v3">
usw.
Dumm ist leider, dass es beim Projekt um die 150 Checkboxen gibt und ich gar nicht mehr weiter weiss.

Ich kann den Checkboxen ja so wie bei Eingabefeldern keinen Variablennamen geben, oder?

Kann mir da jemand helfen, wie ich das Script oben richtig umbaue, damit die Checkboxen auch übermittelt werden? Ich bin blutiger Anfänger :(

Gruß
Marko

Andes 09.03.2007 17:18:07

AW: Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Namen und Id`s sollten eigentlich nicht nur aus Zahlen bestehen und mit einem Buchstaben beginnen. Genauso verhält es sich bei Variablenbezeichnungen.
Du kannst dir viel Schreibarbeit ersparen, wenn du die Checkboxen einer Frage als Array definierst.
HTML-Code:

<input name="check1[]" type="checkbox" id="check1" tabindex="1" value="v1">
<input name="check1[]" type="checkbox" id="check2" tabindex="2" value="v2">
<input name="check1[]" type="checkbox" id="check3" tabindex="3" value="v3">

Übermittelt werden nur die Checkboxen die aktiviert wurden. In dem Beispiel enthält das übermittelte Array $check1 alle Werte der aktivierten Checkboxen.
Auslesen kannst du sie so.
PHP-Code:

if(isset($_POST['check1'])) $check1 $_POST['check1']; 


M.Kreimer 09.03.2007 17:21:22

AW: Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Hi Andes,

erstmal vielen Dank für deine Info.

Verstanden habe ich das bis jetzt noch nicht so, aber ich versuche es zumindest.

Wie verhält sich das denn nun mit meinem Mailscript? Dort muss ich doch dann auch irgendwie die Sache auch übermitteln!?

Edit: Ah, dann brauche ich das nur irgendwo in meinem Mailscript platzieren?

Ich habe das jetzt so verstanden:

Für Frage 1 mache ich bei input name = check1[]
Für Frage 2 dann bei input name = check2[]
usw.

Habe ich das richtit verstanden? Oder kann ich es bei check1[] belassen und es werden trotzdem alle übermittelt, egal wieviele Fragen ich habe?

Entschuldigt bitte mein Unwissen, aber ich bin sozusagen Quereinsteiger und erst seit ein paar Tagen damit zugange.

Heinrich 09.03.2007 18:44:56

AW: Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Nein, du musst schon für jede Frage eigene Inputfelder definieren. Wie Andes sagte sollten die keine Zahlen, sondern Bezeichnungen als Name haben. Z.B. für "Wie lange Führerschein":
PHP-Code:

<form action="ziel.php" method="post">
<
input name="fs_dauer" type="checkbox" id="fs_dauer1" tabindex="1" value="0-5">
<
input name="fs_dauer" type="checkbox" id="fs_dauer2" tabindex="2" value="6-10">
//usw.
<input type="submit" value="Abschicken">
</
form

In der zieldatei.php liest du die Werte so aus:
PHP-Code:

if(isset($_POST['fs_dauer'])) $fs_dauer $_POST['fs_dauer']; 

Die Variable $fs_dauer kannst du dann in den Text deines Mailscripts einbauen.

Als Array (name="fs_dauer[]") brauchst du die Checkboxen nur zu definieren, wenn Mehrfachantworten gegeben werden. Das solltest du übrigens bei der Beispielfrage ausschließen, indem du Radioboxen (input type="radio") statt Checkboxen verwendest.

Bei Checkboxen und Mehrfachantworten musst du das Array dann in der Zieldatei mit einer Schleife (for oder foreach) auslesen. Aber dazu vielleicht, wenn du mit dem ersten Kram fertig bist.

P.S. Wozu du die id und tabindex brauchst, weiß ich nicht...

M.Kreimer 09.03.2007 18:56:27

AW: Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Hallo Heinrich,

auch bei dir möchte ich mich für deine Hilfestellung erstmal recht herzlich bedanken.

Ich muss zugeben, dass es unheimlich schwer für jemanden wie mich ist, wenn man erst seit 2-3 Tagen damit konfrontiert wird. Da fallen Begriffe wie for oder foreach, damit kann ich noch überhaupt nichts anfangen :-)

Das tabindex wurde uns so erklärt, dass man mittels Tabulator dann in der Reihenfolgen die Checkboxen anwählen kann, wenn man z.B. lieber mit der Tastatur, anstatt der Mouse navigiert. Die IDs wurden uns so eigentlich nicht genauer erklärt.

Ich habe allerdings immer noch Probleme damit, wo ich diese "if(isset($_POST['fs_dauer'])) $fs_dauer = $_POST['fs_dauer'];"
einbauen muss.

Kann ich das ohne Weiteres in mein obiges Mailscript einbauen? Die Zeile $email usw. brauche ich ja normalerweise in meinem Fall nicht, da keine Eingabe von Name, Vorname, Straße usw. möglich ist. Die Umfrage erscheint sofort und ohne Textfelder. Es sind nur Checkboxen vorhanden, und diese sind auch vorgegeben.

Nur mal zum Verständnis:

Kann ich in meinem oben geposteten Mailscript so vorgehen?

$fs_dauer = if(isset($_POST['fs_dauer'])) $fs_dauer = $_POST['fs_dauer'];
$automarke if(isset($_POST['automarke'])) $automarke = $_POST['automarke'];
$lieblingsfarbe = if(isset($_POST['lieblingsfarbe'])) $lieblingsfarbe = $_POST['lieblingsfarbe'];

Kann ich das so einfach in mein vorhandenes Script irgendwo platzieren? Und Mehrfachantworten sind teilweise auch dabei, wo in der Vorgabe auch drinsteht, dass Mehrfachantworten möglich sein sollen.

Ich glaube ich bin einfach zu blöd für diese Arbeit :(

Andes 09.03.2007 19:10:57

AW: Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Zitat:

Zitat von M.Kreimer (Beitrag 98945)
Ah, dann brauche ich das nur irgendwo in meinem Mailscript platzieren?

Ich habe das jetzt so verstanden:

Für Frage 1 mache ich bei input name = check1[]
Für Frage 2 dann bei input name = check2[]
usw.

Habe ich das richtit verstanden?

Richtig! Wie sie benannt werden ist aber deine Sache.
Zitat:

Zitat von M.Kreimer (Beitrag 98945)
Oder kann ich es bei check1[] belassen und es werden trotzdem alle übermittelt, egal wieviele Fragen ich habe?

Vom Prinzip schon, bloß machst du es dir beim Auslesen und zuordnen zu den Fragen unütz schwer.

Um jetzt die Antworten in deinen E-Mail Text einzufügen, kannst du folgendes tun.
PHP-Code:

$email "Dein Text .....";
if(isset(
$_POST['check1'])) $email .= implode("\n"$_POST['check1']); 
//dies fügt das Array zu einem Striing zusammen und erzeugt nach jeder Antwort einen Zeilenumbruch 

Wie Heinrich schon schrieb, wäre es bei deiner Beispielfrage nicht sinnvoll mehrfach Antworten zu zulassen.
Da kommst du besser diese als Radio-Button zu definieren.
HTML-Code:

<input type="radio" name="fs" value="0-5 Jahre">0-5 Jahre
<input type="radio" name="fs" value="6-10 Jahre">6-10 Jahre
u.s.w.

Bei Radio-Button ist nur eine Antwort möglich und dessen Wert wird als String übermittelt.
PHP-Code:

$email "Dein Text ...";
if(isset(
$_POST['fs'])) $email .= $_POST['fs']; 

Mach dir doch für das bessere Verständnis erst einmal ein kleines Formular mit Checkboxen und Radio-Button und übermittle diese an ein PHP-Script. Welches diese Daten ausliest.
In dem PHP-Script brauchst du ja erst mal nichts weiter zu tun als die Variablen auszulesen und auszugeben. Hilfreich kann dir var_dump() sein, damit du siehst wie die Variablen aufgebaut sind und von welchen Type sie sind.
PHP-Code:

var_dump($_POST);
//oder
var_dump($_POST['fs']);
//oder
var_dump($_POST['check1']); 


M.Kreimer 09.03.2007 19:19:11

AW: Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Ok Leute, ich versuche das übers Wochenende mal irgendwie auf die Reihe zu bekommen.

Es ist halt - wie gesagt - unheimlich schwer das alles so schnell und auf einmal irgendwie unterzubekommen, wenn man vorher PHP noch nicht mal im normalen Sprachgebrauch kannte ;-)

Ich werde jetzt mal so vorgehen. Ich baue mir selber ein ganz anderes Formular auf mit einer einzigen Frage. Diese versuche ich dann mal zu übermitteln. Sollte das gehen, so denke ich, dass eine Erweiterung dann auch nicht mehr ganz sooo schwer ist.

Übrigens: Das mit dem var_dump habe ich überhaupt nicht verstanden und dies ist komplettes Neuland :)

Andes 09.03.2007 19:27:47

AW: Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Vielleicht verstehst du ja dies besser.^^
var_dump()

Heinrich 09.03.2007 22:00:04

AW: Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Genau! Versuch das mal Stück für Stück und lass dir immer das Ergebnis ausgeben.

Übrigens: Als ich angefangen habe, hat mir das Buch "PHP for Dummies" (keine Verarsche) ziemlich geholfen.

M.Kreimer 10.03.2007 10:12:02

AW: Formular mit Checkboxen übermitteln - Komme nicht weiter
 
Hi Leute,

ich habe es jetzt fast die ganze Nacht versucht, aber leider keinen Erfolg erzielen können.
Ich bekomme wohl eine eMail, aber dort steht einfach nichts drin.

Habe mir versucht eine Datei anzulegen, wo ich einmal mit Radiobuttons und einmal mit Checkboxen arbeiten (Checkboxen mit Mehrfachnennungen sind im Projekt enthalten und werden auch verlangt)

So sieht meine Test HTML-Seite aus

HTML-Code:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Praktikum</title>
</head>

<body>
<table width="500" height="338" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td align="left" valign="top"><form id="form1" name="form1" method="post" action="submit.php">
      <p>Frage 1: Wie alt sind Sie?</p>
      <p>
        <label>
        <input type="radio" name="alter" value="20 - 25 Jahre" tabindex="1" />
        </label>
        20-25 Jahre<br />
        <label>
        <input type="radio" name="alter" value="26 - 30 Jahre" tabindex="2" />
        </label>
        26-30 Jahre<br />
        <label>
        <input type="radio" name="alter" value="31 - 35 Jahre" tabindex="3" />
        </label>
        31 - 35 Jahre</p>
      <p>Was sind Ihre Lieblingsfarben?</p>
      <p>
        <label>
        <input type="checkbox" name="farbe" value="Gruen" tabindex="4" />
        </label>
        Gruen<br />
        <label>
        <input type="checkbox" name="farbe" value="Blau" tabindex="5" />
        </label>
        Blau<br />
        <label>
        <input type="checkbox" name="farbe" value="Gelb" tabindex="6" />
        </label>
        Gelb<br />
        <label>
        <input type="checkbox" name="farbe" value="Schwarz" tabindex="7" />
        </label>
        Schwarz</p>
      <p>
        <label>
        <input type="submit" name="Submit" value="Senden" />
        </label>
      </p>
    </form>
    </td>
  </tr>
</table>
</body>
</html>

Die submit.php sieht so aus

PHP-Code:

<?php 
if($sentemail == "2"){ 
include(
"sorry.php"); 

}else{ 

$num $sentmessage 1
setcookie("sentemail","$num",time()+600); //set the cookie 

$email "Das ist ein Test";
if(isset(
$_POST['alter'])) $email .= $_POST['alter'];
if(isset(
$_POST['farbe'])) $email .= implode("\n"$_POST['farbe']);  
//dies fügt das Array zu einem Striing zusammen und erzeugt nach jeder Antwort einen Zeilenumbruch 
$to "xyz@xyz.de"
$subject "Testprojekt"
$mailheaders "From: $vmail <> \n"
$mailheaders .= "Reply-To: $vmail\n\n"
mail($to$subject$mailheaders); 
include(
"dankeecho.php"); 

?>

Die dankeecho.php ist nur eine weisse Seite wo steht: Hat funktioniert.

So, wenn ich das jetzt so mache, dann erhalte ich folgende Fehlermeldung:

Warning: implode() [function.implode]: Bad arguments. in /www/htdocs/v269981/test/submit.php on line 12

Nehme ich die line12 komplett aus dem Script raus, dann wirft er mir zwar keine Fehlermeldung raus und gibt auch die dankeecho dann aus, allerdings sind die eMails nur leer und es ist nichts enthalten :-(

Das Dummie Buch habe ich mir heute früh schon bei Amazon bestellt. Ich will das unbedingt irgendwie lernen


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:15:18 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.