PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Daten verschwinden!!



Joki
12.01.2004, 12:09
Hi Leute,

Ich hab ein Problem mit Formulardaten.
Das Formular wird mit folgendem Code ausgelesen:


<?php
if(isset($_POST['senden'])){
foreach($HTTP_POST_VARS as $schluessel => $wert){
if(gettype($wert)== "array"){
echo "<tr><td>";
echo $schluessel."</td>";
foreach($wert as $endwert){
if($endwert == $wert[0]){
echo "<td><b><input type='text' value='".$endwert."'></b></td></tr>";
}
else{
echo "<td>&nbsp;</td><td><b><input type='text' value='".$endwert."'></b></td></tr>";
}
}
}
else{
echo "<tr><td>";
if($schluessel == 'senden'){
echo " ";
}
else{
echo $schluessel."</td><td><b><input type='text' value='".$wert."'></b></td></tr>";
}

}
}

}
?>


Wenn ich jetzt senden drücke, gehen mir die Array-Werte verloren, warum???
Ich habe den Code in ein Form-tag eingebettet, damit die werte formatiert gesendet werden können.
Dazu hab ich folgenden Code verwendet:



$body = "<div align='left'><table border='0' width='70%'>";
$body.= "<br><h1>Sehr geehrte Damen und Herren $Ansprechpartner hat geschrieben:</h1><br>";
if(isset($_POST['send'])){
foreach($HTTP_POST_VARS as $schluessel => $wert){
if(gettype($wert)== "array"){
$body.= "<tr><td>";
$body.= $schluessel."</td>";
foreach($Arrangement as $wert){
if($Arrangement == $wert['0']){
$body.= "<td><b>".$Arrangement."</b></td></tr>";
}
else{
$body.= "<td>&nbsp;</td><td><b>".$Arrangement."</b></td></tr>";
}
}
}
else{
$body.= "<tr><td>";
if($schluessel == 'send'){
$body.= " ";
}
else{
$body.= $schluessel."</td><td><b>".$wert."</b></td></tr>";
}
}
}
$body .= "</div>";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "from: $Ansprechpartner"."<".$EmailAdresse.">"."\r\n";
//$headers .= "Cc: roediger@cc-hotels.de\r\n";
$body.=$css;
$mailer=@mail("walter-ginsberg@web.de","Veranstaltungs Anfrage",$body,$headers);
if($mailer)
{
echo "Die Anfrage wurde erfolgreich weitergeleitet<br>";
echo "<a href='veranstaltung_form.htm'>Zur&uuml;ck zum Formular</a>";
}
else{
echo "Beim senden der Mail ist ein Fehler unterlaufen";
}
}
echo "</table>";
?>


Wo liegt mein Denkfehler?? Wer kann mir einen Tipp geben?

Danke schonmal

Joki

betrazivis
12.01.2004, 15:08
Erst mal was anderes:
Womit du mit Sicherheit Probleme bekommen wirst, ist der Zeilenumbruch im Mailheader.
"\r\n" (carriage return, linefeed) ist Windows "\n" ist Unix/Linux.


Zum anderen Problem: Bei mir funktioniert alles wunderbar. Die Formalardaten werden auf der nächsten Seite schön in Formfelder eingetragen...Wo verschwinden denn jetzt deine Daten??

Joki
12.01.2004, 16:56
hi betrazivis,

füll mal die Mehrfachauswahlfelder aus, die werden ja auf der anzeigen.php schön angezeigt, aber wenn ich die Daten dann sende, hab ich in der Mail nur den ersten wert des Array`s und der Rest geht mir verloren!! Genau das ist mein Problem!!

Gruss Joki

meikel
12.01.2004, 18:22
Original von betrazivis
Erst mal was anderes:
Womit du mit Sicherheit Probleme bekommen wirst, ist der Zeilenumbruch im Mailheader.
"\r\n" (carriage return, linefeed) ist Windows "\n" ist Unix/Linux.
Im Mail Header ist das korrekt.

meikel
12.01.2004, 18:30
Original von Joki
Ich hab ein Problem mit Formulardaten.
Wenn ich jetzt senden drücke, gehen mir die Array-Werte verloren, warum???
Wenn ich sowas lese, muß ich immer ganz spontan an den PHP 4.2.x Bug denken.

Könntest erst mal mit phpinfo() (letzte Tabelle) die korrekte Übergabe der Formulardaten überprüfen?

Joki
12.01.2004, 19:37
Hi Meikel,

Meinst Du die Eintrag SERVER REQUEST METHOD?

Der steht auf den Server auf "get"

Jetzt hab ich die Method auf get gesetzt, aber die Array-Werte gehen mir nach wie vor verloren!!

*ratlosbin*

Was kann oder muss ich tun?

Gruss Joki

meikel
12.01.2004, 22:02
Original von Joki
Meinst Du die Eintrag SERVER REQUEST METHOD?
Nein. Ich meine die Formulardaten, die dort angezeigt werden unter $_REQUEST.

Der steht auf den Server auf "get"
Wer bei Formularen GET verwendet, weiß hoffentlich, daß damit nur 2048 Zeichen übertragen werden können.

Außerdem hatte ich Dich indirekt nach Deiner PHP Version gefragt.

Joki
13.01.2004, 09:00
Hi Meikel,

Die Version von PHP ist 4.3.1


Nein. Ich meine die Formulardaten, die dort angezeigt werden unter $_REQUEST.

Da weiss ich nicht was Du genau meinst, mit phpinfo() sehe ich in der letzten Tabelle nur den Eintrag:

_SERVER["REQUEST_METHOD"] GET , aber das meinst Du wohl nicht, oder?

meikel
13.01.2004, 13:45
Original von Joki
Die Version von PHP ist 4.3.1
Fein, wenigstens kein PHP 4.2.x.


Nein. Ich meine die Formulardaten, die dort angezeigt werden unter $_REQUEST.
Da weiss ich nicht was Du genau meinst, mit phpinfo() sehe ich in der letzten Tabelle nur den Eintrag:
_SERVER["REQUEST_METHOD"] GET , aber das meinst Du wohl nicht, oder?
Ich sehe da mehr:
_REQUEST["test"] 123
_GET["test"] 123
...
_SERVER["REQUEST_METHOD"] GET
_SERVER["QUERY_STRING"] test=123
_SERVER["REQUEST_URI"] /phpinfo.php?test=123
_SERVER["SCRIPT_NAME"] /phpinfo.php
_SERVER["PHP_SELF"] /phpinfo.php
_SERVER["argv"] Array
(
[0] => test=123
)
_SERVER["argc"] 1

Dem entnehme ich, daß die Variablen $_REQUEST['test'] und $_GET['test'] mit dem Wert 123 gefüllt wurde, daß die Request Methode GET hieß und daß das Startscript /phpinfo.php ist.

Joki
13.01.2004, 15:32
Hi Meikel,

Jetzt hab ich verstanden, was Du meinst und habe das selbe Ergebnis!!
Nur versteh ich nicht, warum das Script die Daten des Array`s nicht komplett mitnimmt!

Ich hab eben gesehen, dass ich das falsche Script angezeigt hab.

Hier noch mal mein check.php


<?php
//Mit css??
$cssbody=implode("",file("cc_hotels.css"));
$css = '<style type="text/css">'.$cssbody."</style>";
$body = "<div align='left'><table border='0' width='70%'>";
$body.= "<br><h1>Sehr geehrte Damen und Herren $Ansprechpartner hat geschrieben:</h1><br>";
if(isset($_GET['send'])){
foreach($HTTP_GET_VARS as $schluessel => $wert){
if(gettype($wert)== "array"){
$body.="<tr><td>";
$body.=$schluessel."</td>";
foreach($wert as $endwert){
if($endwert == $wert['0']){
$body.="<td><b>".$endwert."</b></td></tr>";
}
else{
$body.="<td>&nbsp;</td><td><b>".$endwert."</b></td></tr>";
}
}
}
else{
$body.= "<tr><td>";
if($schluessel == 'send'){
$body.= " ";
}
else{
$body.= $schluessel."</td><td><b>".$wert."</b></td></tr>";
}
}
}
$body .= "</div>";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "from: $Ansprechpartner"."<".$EmailAdresse.">"."\r\n";
$body.=$css;
$mailer=@mail("walter-ginsberg@web.de","Veranstaltungs Anfrage",$body,$headers);
if($mailer)
{
echo "Die Anfrage wurde erfolgreich weitergeleitet<br>";
echo "<a href='veranstaltung_form.htm'>Zur&uuml;ck zum Formular</a>";
}
else{
echo "Beim senden der Mail ist ein Fehler unterlaufen";
}
}
echo "</table>";
?>


Meine Frage jetzt: Liegt mein Fehler in der foreach-Schleife, oder oben in anzeige.php?

meikel
13.01.2004, 18:13
Original von Joki
Jetzt hab ich verstanden, was Du meinst und habe das selbe Ergebnis!!
Nur versteh ich nicht, warum das Script die Daten des Array`s nicht komplett mitnimmt!
Ich wollte, bevor ich mich um das Script kümmere, erst einmal klarstellen, ob a. bei phpinfo() alles angezeigt wird und b. ob Du nicht ev. PHP 4.2.x verwendest, weil diese Version einen lästigen Alzheimer-Bug bei indizierten Formulardaten hat.

Meine Frage jetzt: Liegt mein Fehler in der foreach-Schleife, oder oben in anzeige.php?

Ich lösche aus dem Script mal das Unwesentliche raus:


<?php

if(isset($_GET['send']))
{
foreach($HTTP_GET_VARS as $schluessel => $wert){
?>

Das ist vom Ansatz her umständlich, sich mit foreach durch alle Formulardaten zu graben.
Weiterhin ist es nicht ratsam, Formulardaten per GET zu übermitteln. Außerdem brauche ich zumindest noch das Formular, um weiterzubasteln.

Das Formular bitte nicht komplett sondern nur das Wesentliche - also alle input Tags und die form Tags. Lösch also den Tabellenkram und CSS Krempel vorher raus, bevor Du es hier reinkippst.

Joki
13.01.2004, 19:45
Hi Meikel,

Hier ist mal mein Formular in abgespechter Version.

Bei dem Options-Auswahlfeld nimmt mein Script nur den ersten Wert mit.
Danke schon mal für Deine Hilfe.

Gruss Joki

P.S. Da ich leider nicht weiss,wie html-Code gepostet wird, hab ich ihn mal in den Quote-Tag gesetzt, sorry.



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Unbenannt</title>
</head>
<body>
<table width="800" border="0" cellspacing="0" cellpadding="0">
<form name="veranstaltungs_form" action="anzeigen.php" method="post">
<tr valign="top">
<td><strong>Abreisedatum</strong></td>
<td colspan="2"><input name="Abreise-Datum" type="text" id="Abreise-Datum" size="15" maxlength="50"></td>
<td><strong>Uhrzeit</strong></td>
<td colspan="2"><input name="Abreise-Uhrzeit" type="text" id="Abreise-Uhrzeit" size="15" maxlength="50"></td>
<td colspan="3">&nbsp;</td>
</tr>
<tr valign="top">
<td><strong>Technik</strong></td>
<td colspan="2"><select name="Technik[]" size="4" multiple>
<option>---Technik---</option>
<option value="Overhead Projektor">Overhead Projektor</option>
<option value="Beamer">Beamer</option>
<option value="Leinwand">Leinwand</option>
<option value="Flipchart">Flipchart</option>
<option value="Musik">Musik</option>
<option value="Video">Video</option>
<option value="Strom">Strom</option>
<option value="Mikrofon">Mikrofon</option>
<option value="ISDN">ISDN</option>
<option value="Telefon">Telefon</option>
</select></td>
<td colspan="6"> <input name="Technik-Nein" type="radio" value="Nein">
Nein</td>
</tr>
</tr>
<tr valign="top">
<td>&nbsp;</td><br>
<td colspan="2"><input type="submit" name="senden" value="Anzeigen"></td>
<td width="170"><input name="loeschen" type="reset" value="Zur&uuml;cksetzen"></td>
<td colspan="2">&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

stormjedi
13.01.2004, 19:54
jetzt mal eine weit hergeholte vermutung... darf man den - zeichen als objektbezeichner nehmen ?(

<input name="Abreise-Datum" type="text" id="Abreise-Datum" size="15" maxlength="50">

oder einen abstand ->
<option value="Overhead Projektor">Overhead Projektor</option>

siehe http://selfhtml.teamone.de/html/formulare/eingabe.htm#felder

den erläuterungsabsatz

mach das mal einfacher, benutze eindeutige, sinnvolle variebelnamen, die jede programmiersprache benutzen kann.


und html kannst du schön posten indem du es in den [code ] tag schließt das ist der bbcode button mit dem # drauf

meikel
13.01.2004, 20:23
Original von Joki
Hier ist mal mein Formular in abgespechter Version.
Wenn's doch nur so wäre...

Bei dem Options-Auswahlfeld nimmt mein Script nur den ersten Wert mit.
Danke schon mal für Deine Hilfe.


<form name="veranstaltungs_form" action="anzeigen.php" method="post">
Huch? Wenn Du POST benutzt, dann stehen Deine Variablen in $_POST

<input name="Abreise-Datum" type="text" id="Abreise-Datum" size="15" maxlength="50">
<input name="Abreise-Uhrzeit" type="text" id="Abreise-Uhrzeit" size="15" maxlength="50">
Die Namen mußt Du anders wählen:
verzichte auf Sonderzeichen und bevorzuge die Kleinschreibung, wenn Du den Kram wiederfinden willst.

<select name="Technik[]" size="4" multiple>
Auch hier: Kleinschreibung. $_REQUEST['Technik'] und $_REQUEST['technik'] sind zwei unterschiedliche Latschen!

<option>---Technik---</option>
<option value="Overhead Projektor">Overhead Projektor</option>
<option value="Beamer">Beamer</option>
<option value="Leinwand">Leinwand</option>
<option value="Flipchart">Flipchart</option>
<option value="Musik">Musik</option>
<option value="Video">Video</option>
<option value="Strom">Strom</option>
<option value="Mikrofon">Mikrofon</option>
<option value="ISDN">ISDN</option>
<option value="Telefon">Telefon</option>
</select>
<input name="Technik-Nein" type="radio" value="Nein">
Ein einzelner Radio-Knopp ist sinnfrei.

<input type="submit" name="senden" value="Anzeigen">
<input name="loeschen" type="reset" value="Zur&uuml;cksetzen">
### keinen schließenden Form Tag gefunden!
</form>




if(isset($_REQUEST['send']))
{
$abreisedatum = $_REQUEST['Abreise-Datum'];
$abreiseuhrzeit = $_REQUEST['Abreise-Uhrzeit'];
$technik = '';
if (isset($_REQUEST['Technik']) AND is_array($_REQUEST['Technik']))
{
$technik = implode (', ', $_REQUEST['Technik']);
}
}
# Ausgabeformatierung kannst Du selber.
# wichtig ist, daß jede Zeile incl. dem HTML Schnodder nicht länger als 79 Zeichen ist und mit einem \n abgeschlossen wird.

Joki
15.01.2004, 08:58
Endlich hab ich es geschafft, die Mail so zuversenden, wie ich es mir vorgestellt hab, war eben nur sehr viel Arbeit, das ganze Formular zu formatieren. Ich dachte eben nur, das es mit der foreach-Schleife einfacher zu erledigen wär.

Danke noch mal für die Hilfe!!

Gruss Joki