PHP Php Form problem

Lordwurst

Ensign
Dabei seit
Okt. 2008
Beiträge
181
Moin, habe hier ein kleines problem.
Auf meinem web server habe ich PHP 5 laufen und diese web form.
Code:
<?php
//--------------------------Set these paramaters--------------------------

// Subject of email sent to you.
$subject = 'Results from Contact form'; 

// Your email address. This is where the form information will be sent. 
$emailadd = 'emailaddress.co.uk'; 

// Where to redirect after form is processed. 
$url = 'Enquiry sent.html'; 

// Makes all fields required. If set to '1' no field can not be empty. If set to '0' any or all fields can be empty.
$req = '1'; 

// --------------------------Do not edit below this line--------------------------
$text = "Results from form:\n\n"; 
$space = ' ';
$line = '
';
foreach ($_POST as $key => $value)
{
if ($req == '1')
{
if ($value == '')
{echo "$key is empty";die;}
}
$j = strlen($key);
if ($j >= 20)
{echo "Name of form element $key cannot be longer than 20 characters";die;}
$j = 20 - $j;
for ($i = 1; $i <= $j; $i++)
{$space .= ' ';}
$value = str_replace('\n', "$line", $value);
$conc = "{$key}:$space{$value}$line";
$text .= $conc;
$space = ' ';
}
mail($emailadd, $subject, $text, 'From: '.$emailadd.'');
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';
?>

Mein problem ist die web form geht leider nicht und ich bin mir auch nicht sicher ob das PHP 5 ist. kann mir einer helfen?
 
M

Mr. Snoot

Gast
Was heißt denn geht nicht, kommt ein Fehler etc.. ?

Du schreibst bspw.
PHP:
foreach ($_POST as $key => $value)
Normalerweise sollte hinter Post noch der Name eines Eingabefeldes o.ä. stehen
PHP:
foreach ($_POST['feld'] as $key => $value)
Andernfalls müsste die Variable - bzw. hier ein Array - zumindest vorher irgendwo mal definiert sein.
 
Zuletzt bearbeitet:

Lordwurst

Ensign
Ersteller dieses Themas
Dabei seit
Okt. 2008
Beiträge
181
@killray, ja die Variablen habe ich angepast, also fuer diesen post habe ich die email geaendert.
@Mr. Snoot, also ich habe mein web host service geaendert und seit dem geht die form nicht mehr.

der fehler liegt darin das wenn ich auf mein button click nix passiert :S

bekomme aber keine error message
 

XimeX

Lt. Commander
Dabei seit
Aug. 2008
Beiträge
1.242
und ändere deinen code oben von einer [ CODE ] einbettung auf [ PHP ] um. dann tun wir uns leichter beim lesen ;)
 

Lordwurst

Ensign
Ersteller dieses Themas
Dabei seit
Okt. 2008
Beiträge
181
OK, ermm ich habes wieder hin bekommen. Ich war so schlau und habe die <form> tags unter die eigentliche form gebaun sprich keine parameters zum insert. :freak: Sorry fuer diesen post

Aber vielen dank fuer die hilfe :D
 

mercsen

Lt. Commander
Dabei seit
Apr. 2010
Beiträge
1.641
Zitat von Mr. Snoot:
Was heißt denn geht nicht, kommt ein Fehler etc.. ?

Du schreibst bspw.
PHP:
foreach ($_POST as $key => $value)
Normalerweise sollte hinter Post noch der Name eines Eingabefeldes o.ä. stehen
PHP:
foreach ($_POST['feld'] as $key => $value)
Andernfalls müsste die Variable - bzw. hier ein Array - zumindest vorher irgendwo mal definiert sein.

PHP:
foreach ($_POST as $key => $value)
ist durchaus richtig. eine foreach schleife iteriert ja über einen array.

PHP:
foreach ($_POST['feld'] as $key => $value)
funktioniert nur wenn $_POST['feld'] seinerseits wieder auf einen array zeigt ;)
 

mercsen

Lt. Commander
Dabei seit
Apr. 2010
Beiträge
1.641
hmm worauf könnte sich $_POST beziehen ?
Vlt. auf POST daten die per http request gesendet wurden ? ;)

wenn du in html ein formular abschickst, z.b. sowas:

PHP:
<form action="index.php" method = "POST">
  <input type = "TEXT" name = "name">
  <input type = "TEXT" name = vorname">
  <input type = "SUBMIT" name = "submit" value="Senden">
</form>

jetzt kannst du in der index.php auf folgende Variablen zugreifen (nachdem man auf senden geklickt hat)

$_POST = array
$_POST['name'] = wert von inputfeld "name"
$_POST['vorname'] = wert von inputfeld "vorname"
$_POST['submit'] = "Senden" (da der wert vorgegeben und nich geändert werden kann)

hätte man als methode GET angegeben würde alles in $_GET stehen, sind beides so genannte superglobal Arrays die ihre werte aus dem HTTP Header auslesen
 

mercsen

Lt. Commander
Dabei seit
Apr. 2010
Beiträge
1.641
Wie kommst du jetzt auf diese idee?
Sorry aber hast du schonmal mit PHP gearbeitet ?
$_POST[0] gibt es nicht da keine nummerierten indzies übergeben werden.
Wenn dein input feld den namen "0" hätte könntest du auf $_POST['0'] zugreifen und das würde auf den inhalt des selbuigen Formularfeldes zeigen. (wobei ich gar nich weiß ob Formular namen mit ner zahl anfangen dürfen)

wenn du z.b. in
<input type = "TEXT" name = "feldABC">
etwas eingibts, nehmen wir an du schreibst "Hallo Welt" in das feld (mit dem NAMEN, bzw. HTML ATTRIBUT "name") und schickst das formular ab, an ein php script.

Dann, und NUR dann, hast du die Variable $_POST['feldABC'] die den wert "Hallo Welt" hat.
$_POST ist standart mäßig immer vorhanden, da sie wie gesagt aus dem Header des requests ausgelesen werden, aber alle anderen Felder zeigen auf null, bzw. es gibt keine weitere definierten indizies.
 
Zuletzt bearbeitet:
M

Mr. Snoot

Gast
Du schreibst "$_POST = array" - woher kommen die Daten die da in der Foreach-Schleife ausgegeben werden sollen? Und sofern Daten im Array vorhanden sind, muss doch zwangsläufig bei $_POST[0] auch etwas drinstehen!?


PHP? Noch nie gehört :evillol:
 
Zuletzt bearbeitet: (['0'] -> [0])

mercsen

Lt. Commander
Dabei seit
Apr. 2010
Beiträge
1.641
so, ich sage es nun zum dritten und letzen mal ;)
$_POST wird aus dem Header des HTTP requests gefüllt !
dort steht dann sowas wie
"feld1=abc&feld2=def&feld3=ghi"
dann hast du automatisch einen Array der wie folgt assoziert ist
PHP:
$_POST = {
   'feld1' => "abc",
   'feld2' => "def",
   'feld3' => "ghi"
}

und ob nun php oder java o.ä. eine foreach schleife iteriert über einen array solange wie indizies vorhanden sind.

und die POST daten werden vom Browser erzeugt sobald man ein Formular abschickt, alternativ kann man auch mit JS (oder einen beliebig anderen programmier sprache) ein HTTP request erzeugen, geht ja einfach über TCP, der header muss halt nur stimmen.

PHP:
foreach($_POST['feld1'] as $key => $value)
wird nicht einmal durchlaufen da man z.b. "abc" nicht nach $key => value auflösen kann

in speziellen fällen kann es gehen wenn man z.b. checkboxen mit dem selben namen hat, dann bekommt man einen Array in einem Array.

zudem ist $_POST[0] etwas anderes als $_POST['0'] ! ;) Integer != Char/String
 
Zuletzt bearbeitet:
M

Mr. Snoot

Gast
Na also. Was liefert mir foreach($_POST as $key => $value) im ersten Durchlauf für einen Wert? Den Namen.
 
Zuletzt bearbeitet:

mercsen

Lt. Commander
Dabei seit
Apr. 2010
Beiträge
1.641
Beispiel
PHP:
$_POST =  array(
   'feld1' => "abc",
   'feld2' => "def",
   'feld3' => "ghi"
);

foreach($_POST as $key => $value) {
   echo "Key: " . $key . " => " . $value . "<br>";
}

ausgabe:

Code:
Key: feld1 => abc
Key: feld2 => def
Key: feld3 => ghi

sprechen wir überhauot die selbe sprache ? :p

was für einen namen meinst du eigentlich ??
Es wird immer ein key, value paar erzeugt, IMMER !
Es sei denn du lässt as $key => $value weg und schreibst nur as $value, dan bekommst du die werte ohne die indizies
 
Zuletzt bearbeitet:
M

Mr. Snoot

Gast
Diesen Namen meinte ich: <input type = "TEXT" name = "name"> - das erste Element im Array (quasi [0] (weil es ein assoziatives Array ist nicht wirklich)) liefert mir in dem Bspw. den Namen.
 

mercsen

Lt. Commander
Dabei seit
Apr. 2010
Beiträge
1.641
Negativ!
Wie schon gesgat gibt es keine Int Indizies bei $_POST
siehe hier:

PHP:
<form method="post" action ="b.php">
    <input type="text" name="bla">
    <input type="text" name="bla2">
    <input type="text" name="bla3">
    <input type="submit" value="keine">
</form>
<?php
foreach($_POST as $key => $value ){
    echo "K: ".$key." -> ".$value."<br>";
}
echo "<hr>";
for($i = 0; $i < count($_POST); $i++) {
    echo "Post ".$i." -> ".$_POST[$i]."<br>";
}
?>

hat zur ausgabe:

K: bla -> a
K: bla2 -> b
K: bla3 -> c
-------------------------------------
Post 0 ->
Post 1 ->
Post 2 ->

(habe a, b und c in die einzelnen felder eingegeben)
 
Top