mehrseitiges formular, sticky forms email ?

abert

Grünschnabel
Hallo alle zusammen,

ich sitze for einem problem ein mehrseitiges Anfrage formular zu basteln das aus einer php Datei besteht per mail befehl via post befehl per email zu versenden. Hab schon viele bücher durchgeforstet und sämtliche foren durchsucht aber irgendwie bin ich fast schon am verzweifeln. Würde mich freuen wenn mir da jemand unter die Arme greifen kann, denn ich kann mir nicht vorstellen, dass ich der einzige bin der so etwas realisieren möchte. Aber vielleicht kann man das ganze auch wesentlich leichter realisieren.

Hier der Code:

Code:
<html>
<head>
<title>Formulare</title>
<style>
* { font-family: Verdana; }
.activeNumber
{
color: red;
background-color:#0099cc;
text-align:center;
font-size: 14pt;
}
.inactiveNumber
{
color: #cccccc;
background-color:#ddddff;
text-align:center;
font-size: 14pt;
}
.activeTable
{
display:visible;
height:100px;
width:500px;
}
.inactiveTable
{
display:none
}
</style>
</head>
<body>
<?php
function GetField($name, $default = '')
{
return empty($_POST[$name]) ? $default : $_POST[$name];
}
$action = $_SERVER['PHP_SELF'];
$currentPage = empty($_POST['currentPage']) ? 1 : (int)
$_POST['currentPage'];
$prevDisabled = $nextDisabled = '';
if (!empty($_POST['prev']))
{
$currentPage--;
if ($currentPage == 1)
{
$prevDisabled = 'disabled';
}
}
if (!empty($_POST['next']))
{
$currentPage++;
if ($currentPage == 4)
{
$nextDisabled = 'disabled';
}
}
$fldName = GetField('Name');
$fldAddress = GetField('Address');
$fldZip = GetField('Zip');
$fldCity = GetField('City');
$fldConditions = GetField('Conditions');
$fldLogonName = GetField('LogonName');
$fldPassword = GetField('Password');
$fldNews = GetField('News');
if (!empty($_POST['Send']))
{
$currentPage = 0;
echo "Vielen Dank für das Ausfüllen des Formulars";
exit;
}
?>
<table width="500">
<tr>
<td class="<?= ($currentPage==1)
? 'activeNumber' : 'inactiveNumber' ?>">1</td>
<td class="<?= ($currentPage==2)
? 'activeNumber' : 'inactiveNumber' ?>">2</td>
<td class="<?= ($currentPage==3)
? 'activeNumber' : 'inactiveNumber' ?>">3</td>
<td class="<?= ($currentPage==4)
? 'activeNumber' : 'inactiveNumber' ?>">4</td>
</tr>
</table>
<form action="<?=$action?>" method="POST">
<input type="hidden" name="currentPage"
value="<?=$currentPage?>"/>
<table width="500" class="<?= ($currentPage==1)
? 'activeTable' : 'inactiveTable' ?>">
<tr>
<td valign="top">Name</td>
<td valign="top">
<input type="text" name="Name" value="<?=$fldName?>"/>
</td>
</tr>
<tr>
<td valign="top">Anschrift</td>
<td valign="top">
<input type="text" name="Address" value="<?=$fldAddress?>"/>
</td>
</tr>
<tr>
<td valign="top">PLZ-Ort</td>
<td valign="top">
<input type="text" name="Zip" value="<?=$fldZip?>"/> -
<input type="text" name="City" value="<?=$fldCity?>"/>
</td>
</tr>
</table>
<table width="500" class="<?= ($currentPage==2)
? 'activeTable' : 'inactiveTable' ?>">
<tr>
<td valign="top">AGB's</td>
<td valign="top" >
<input type="checkbox" name="Conditions" value="Yes"
<?=$fldConditions == 'Yes' ? 'checked' : ''?>/>
bestätigen
</td>
</tr>
</table>
<table width="500" class="<?= ($currentPage==3)
? 'activeTable' : 'inactiveTable' ?>">
<tr>
<td valign="top">Anmeldename</td>
<td valign="top">
<input type="text" name="LogonName"
value="<?=$fldLogonName?>"/>
</td>
</tr>
<tr>
<td valign="top">Kennwort</td>
<td valign="top">
<input type="password"
name="Password" value="<?=$fldPassword?>"/>
</td>
</tr>
</table>
<table width="500" class="<?= ($currentPage==4)
? 'activeTable' : 'inactiveTable' ?>">
<tr>
<td valign="top">Newsletter</td>
<td valign="top">
Type 1 <input type="radio" name="News" value="Type1"
<?= $fldNews=='Type1' ? 'checked' : '' ?> />
<br/>
Type 2 <input type="radio" name="News" value="Type2"
<?= $fldNews=='Type2' ? 'checked' : '' ?> />
</td>
</tr>
<tr>
<td valign="top">Kennwort</td>
<td valign="top">
<input type="submit" name="Send" value="Abschicken"/>
</td>
</tr>
</table>
<table>
<tr>
<td></td>
<td>
<input <?=$prevDisabled?> type="submit"
name="prev" value="Zurück"/>
</td>
<td>
<input <?=$nextDisabled?> type="submit"
name="next" value="Weiter"/>
</td>
<td></td>
</tr>
</table>
</form>
</body>
</html>

Würde mich sehr freuen wenn mir jemand erklärt und weiterhelfen kann wie ich die Daten die ich in diesem Formular eingetragen habe dann per email sauber formatiert empfangen kann. Wenn es funktioniert irgendwie Tabellarisch. Bin echt schon am verzweifeln und probier schon mehrere Tage dran herum. Aber vielleicht funktioniert das ganze ja irgendwie auf andere Art und Weise wesentlich leichter.
Über Datenbank hab ich auch schon nachgedacht aber davon habe ich zu wenig ahnung hab zwar schon ein bischen damit rum probiert aber hab jetzt doch wieder die finger davon gelassen. Bin für jede Antwort und Hilfe sehr dankbar.

Vielen Dank schon mal für eure Hilfe

ciao thomas abert
 
Hi

Du kannst die Mailfunktion direkt an der Stelle einsetzen, nachdem das Formular über den Button send abgeschickt wird. Ich würde allerdings noch eine Feldvalidierung einbauen (z.B. für Email-Adresse).

PHP:
if (!empty($_POST['Send']))
{
$currentPage = 0;
// Mail-Funktion
echo "Vielen Dank für das Ausfüllen des Formulars";
exit;
}
?>

http://de2.php.net/manual/de/function.mail.php
 
Funktioniert das bei einem derartigen Formular eine Überprüfung einzubauen, die ein einziges Feld überprüft ob Inhalt drin ist und wenn ja das ein zusätzliches Feld bzw. eine weitere Seite erscheint die es auszufüllen gilt?

Also quasi
Feldname=x

Wenn Feld mit Name x Inhalt habe gebe -> Seite 5 aus.

Geht das, wenn ja wie?
 
Hallo

das sind ja in dem Sinne keine Seiten bei o.g. Formularbeispiel.

Es werden via CSS unterschiedliche Bereich auf display:visible gesetzt. Diese Aktion passiert einfach über einen "Weiter" Button.

Hier nochmal mit Validierung.

PHP:
<html>
<head>
<title>Formulare</title>
<style>
* { font-family: Verdana;
font-size:100%;
 }
td {
font-size:80%;
}
.activeNumber
{
color: red;
background-color:#0099cc;
text-align:center;
font-size: 14pt;
}
.inactiveNumber
{
color: #cccccc;
background-color:#ddddff;
text-align:center;
font-size: 14pt;
}
.activeTable
{
display:visible;
height:100px;
width:500px;
}
.inactiveTable
{
display:none
}
input {
border:1px solid #000066;
}
.error {
font-size:90%;
color:red;
}
</style>
</head>
<body>
<?php
$fehler="&nbsp;";
function GetField($name, $default = '')
{
return empty($_POST['c'][$name]) ? $default : $_POST['c'][$name];
}

$fldName = GetField('Name');
$fldAddress = GetField('Address');
$fldZip = GetField('Zip');
$fldCity = GetField('City');
$fldConditions = GetField('Conditions');
$fldLogonName = GetField('LogonName');
$fldPassword = GetField('Password');
$fldNews = GetField('News');
$fldEmail = GetField('email');


$action = $_SERVER['PHP_SELF'];
$currentPage = empty($_REQUEST['currentPage']) ? 1 : (int)
$_REQUEST['currentPage'];
$prevDisabled = $nextDisabled = '';
if (!empty($_REQUEST['prev']))
{
	$currentPage--;
}
if (!empty($_POST['next']))
{

$allesok = 1;
	if(empty($fldName) && $currentPage==1){
	$allesok = 0;
	$fehler = '<span class="error">bitte Namen einfügen</span>';
	}
	

	if(empty($fldCity) && $currentPage==1){
	$allesok = 0;
	$fehler = '<span class="error">bitte stadt einfügen</span>';
	}
	
	if(empty($fldConditions)&& $currentPage==2){
	$allesok = 0;
	$fehler = '<span class="error">bitte agb ausfüllen</span>';
	}
	
	if($allesok) {
	$currentPage++;
	}
	
if ($currentPage == 4)
{
$nextDisabled = 'disabled';
}
}
if ($currentPage == 1){$prevDisabled = 'disabled';}
if (!empty($_POST['Send']))
{
$currentPage = 0;
echo "Vielen Dank für das Ausfüllen des Formulars<hr>";
foreach($_POST['c'] as $value) {
	if($value != "") {
	echo $value."<br>";
	}
	}

exit;
}
?>

<table width="500">
<tr>
<td class="<?= ($currentPage==1)
? 'activeNumber' : 'inactiveNumber' ?>">1</td>
<td class="<?= ($currentPage==2)
? 'activeNumber' : 'inactiveNumber' ?>">2</td>
<td class="<?= ($currentPage==3)
? 'activeNumber' : 'inactiveNumber' ?>">3</td>
<td class="<?= ($currentPage==4)
? 'activeNumber' : 'inactiveNumber' ?>">4</td>
</tr>
</table>
<? echo $fehler ?>
<form action="<?=$action?>" method="POST">
<input type="hidden" name="currentPage"
value="<?=$currentPage?>"/>
<table width="500" class="<?= ($currentPage==1)
? 'activeTable' : 'inactiveTable' ?>">
<tr>
<td valign="top">Name*</td>
<td valign="top">
<input name="c[Name]" type="text" id="c[Name]" value="<?=$fldName?>"/>
</td>
</tr>
<tr>
<td valign="top">Anschrift</td>
<td valign="top">
<input name="c[Address]" type="text" id="c[Address]" value="<?=$fldAddress?>"/>
</td>
</tr>
<tr>
<td valign="top">PLZ-Stadt*</td>
<td valign="top">
<input name="c[Zip]" type="text" id="c[Zip]" value="<?=$fldZip?>" size="5"/> 
-
<input name="c[City]" type="text" id="c[City]" value="<?=$fldCity?>"/>
</td>
</tr>
<tr>
  <td valign="top">Email</td>
  <td valign="top"><input name="c[email]" type="text" id="c[email]" value="<?=$fldEmail?>"/></td>
</tr>
</table>
<table width="500" class="<?= ($currentPage==2)
? 'activeTable' : 'inactiveTable' ?>">
<tr>
  <td colspan="2" valign="top">AGBs<br>
    Lorem Ipsum is simply dummy text of the printing and typesetting industry.
    Lorem Ipsum has been the industry's standard dummy text ever since the 1500s,
    when an unknown printer took a galley of type and scrambled it to make a
    type specimen book. It has survived not only five centuries, but also the
    leap into electronic typesetting, remaining essentially unchanged. It was
    popularised in the 1960s with the release of Letraset sheets containing Lorem
    Ipsum passages, and more recently with desktop publishing software like Aldus
    PageMaker including versions of Lorem Ipsum.</td>
  </tr>
<tr>
<td width="58" valign="top">AGB's</td>
<td width="430" valign="top" >
<input name="c[Conditions]" type="checkbox" id="c[Conditions]" value="Yes" <?=$fldConditions == 'Yes' ? 'checked' : ''?>/>
bitte bestätigen
!</td>
</tr>
</table>
<table width="500" class="<?= ($currentPage==3)
? 'activeTable' : 'inactiveTable' ?>">
<tr>
<td width="154" valign="top">Anmeldename</td>
<td width="334" valign="top">
<input name="c[LogonName]" type="text" id="c[LogonName]" value="<?=$fldLogonName?>"/>
</td>
</tr>
<tr>
<td valign="top">Kennwort</td>
<td valign="top">
<input name="c[Password]" type="text" id="c[Password]" value="<?=$fldPassword?>"/>
</td>
</tr>
</table>
<table width="500" class="<?= ($currentPage==4)
? 'activeTable' : 'inactiveTable' ?>">
<tr>
<td width="132" valign="top">Newsletter</td>
<td width="356" valign="top">
Text
  <input name="c[News]" type="radio" value="text" checked
<?= $fldNews=='Type1' ? 'checked' : '' ?> />
<br/>
html
<input type="radio" name="c[News]" value="html"
<?= $fldNews=='Type2' ? 'checked' : '' ?> />
</td>
</tr>
<tr>
<td valign="top">&nbsp;</td>
<td valign="top">
<input type="submit" name="Send" value="Abschicken"/>
</td>
</tr>
</table>
<table>
<tr>
<td></td>
<td>
<input <?=$prevDisabled?> type="submit"
name="prev" value="Zurück"/>
</td>
<td>
<input <?=$nextDisabled?> type="submit"
name="next" value="Weiter"/>
</td>
<td></td>
</tr>
</table>
</form>
</body>
</html>

Falls Du Aktionen von z.B. Textfeldern abhängig machen möchtest, müsstest Du den Weg über Javascript gehen oder AJAX.
 
Das weiß ich ja, ich weiß nur nicht wie ich die Abfrage mit JS oder Ajax realisieren kann, weil ich da nicht so versiert drin bin. Um es mal vorsichtig auszudrücken.
 
Hi

sorry, da kann ich Dir leider auch nicht weiterhelfen.
Mit Javascirpt und Ajax kenne ich mich leider auch nicht aus.

Vielleicht kann Dir aber jemand anderes hier im Forum helfen.
 
Zurück