Fehler im Formular
zipfelcompany
- php
0 Tom0 zipfelcompany0 Tom0 zipfelcompany0 Tom0 zipfelcompany0 Tom0 zipfelcompany0 Tom
0 Der Martin
Hallo
Ich habe ein Gästebuch zu einem Nachrichten-Formular umgestaltet. Die Personen AA bis pp können so einander Nachrichten schreiben, welch in ihre .txt Datei gespeichert werden. Nun werden sie da aber nicht mehr gespeichert. Ist im Quelltext etwas falsch?:
<body>
<a href="gb01.php">zurück</a>
<form name="eintragsform" method="post" action="eintrag01.php">
<table width="374" border="0">
<tr>
<td width="70"><span class="Stil1">Empfänger:</span></td>
<td width="307"><label>
<select name="select">
<option value="01">AA</option>
<option value="02">BB</option>
<option value="03">cc</option>
<option value="04">dd</option>
<option value="05">ee</option>
<option value="06">ff</option>
<option value="07">gg</option>
<option value="08">hh</option>
<option value="09">ii</option>
<option value="10">jj</option>
<option value="11">kk</option>
<option value="12">ll</option>
<option value="13">mm</option>
<option value="14">nn</option>
<option value="15">oo</option>
<option value="16">pp</option>
</select>
</label></td>
</tr>
<tr>
<td><span class="Stil1">Eintrag:</span></td>
<td width="307"><textarea name="text" cols="35" rows="8"></textarea> </tr>
<tr>
<td><span class="Stil1"></span> </td>
<td width="307">
<div align="left">
<input type="submit" name="Submit1" value="Eintragen">
</div> </td>
</tr>
</table>
</form>
<?php
$date = (date ("d.m.Y"));
if ($text != "")
{
$text = trim($text);
$text = ltrim($text);
$text = ereg_replace ("\n", "<BR>", $text);
if ($select == "01")
{
$fp = fopen("/01.txt", "a");}
if ($select == "02")
{
$fp = fopen("/02.txt", "a");}
if ($select == "03")
{
$fp = fopen("/03.txt", "a");}
if ($select == "04")
{
$fp = fopen("/04.txt", "a");}
if ($select == "05")
{
$fp = fopen("/05.txt", "a");}
if ($select == "06")
{
$fp = fopen("/06.txt", "a");}
if ($select == "07")
{
$fp = fopen("/07.txt", "a");}
if ($select == "08")
{
$fp = fopen("/08.txt", "a");}
if ($select == "09")
{
$fp = fopen("/09.txt", "a");}
if ($select == "10")
{
$fp = fopen("/10.txt", "a");}
if ($select == "11")
{
$fp = fopen("/11.txt", "a");}
if ($select == "12")
{
$fp = fopen("/12.txt", "a");}
if ($select == "13")
{
$fp = fopen("/13.txt", "a");}
if ($select == "14")
{
$fp = fopen("/14.txt", "a");}
if ($select == "15")
{
$fp = fopen("/15.txt", "a");}
if ($select == "16")
{
$fp = fopen("/16.txt", "a");}
fputs($fp, "<HR>AA: <BR> $text ($date)<BR>\n");
fclose($fp);
print ("<script language="JavaScript">Ziel()</script>");
}
?></p>
</body>
Danke
Hello,
<?php
$date = (date ("d.m.Y"));
echo "<pre>\r\n";
echo htmlspecialchars(print_r($_POST,1));
echo "</pre>\r\n";
if ($text != "")
{$text = trim($text);
$text = ltrim($text);$text = ereg_replace ("\n", "<BR>", $text);
if ($select == "01")
{
$fp = fopen("/01.txt", "a");}if ($select == "02")
{
$fp = fopen("/02.txt", "a");}if ($select == "03")
{
$fp = fopen("/03.txt", "a");}if ($select == "04")
{
$fp = fopen("/04.txt", "a");}if ($select == "05")
{
$fp = fopen("/05.txt", "a");}if ($select == "06")
{
$fp = fopen("/06.txt", "a");}if ($select == "07")
{
$fp = fopen("/07.txt", "a");}if ($select == "08")
{
$fp = fopen("/08.txt", "a");}if ($select == "09")
{
$fp = fopen("/09.txt", "a");}if ($select == "10")
{
$fp = fopen("/10.txt", "a");}if ($select == "11")
{
$fp = fopen("/11.txt", "a");}if ($select == "12")
{
$fp = fopen("/12.txt", "a");}if ($select == "13")
{
$fp = fopen("/13.txt", "a");}if ($select == "14")
{
$fp = fopen("/14.txt", "a");}
Du erwartest die Daten vermutlich in einer falschen Variable.
Außerdem würde ich der Ordnung halber auch elseif() verwenden für die Verkettung der Bedingungen oder eine Switch-Anweisung
Ein harzliches Glückauf
Tom vom Berg
hello
Dann erscheint unten:
Array
(
[select] => 01
[text] => meine geschriebene Nachricht
[Submit1] => Eintragen
)
Aber geändert hat sich nichts.
Hello,
Dann erscheint unten:
Array
(
[select] => 01
[text] => meine geschriebene Nachricht
[Submit1] => Eintragen
)Aber geändert hat sich nichts.
Das waren jetzt die Variablen aus dem Array $_POST
Welche benutz Du?
Und wie steht Dein "register globals"?
Schau mal in die php.ini oder lass Dir phpinfo() anzeigen.
Ein harzliches Glückauf
Tom vom Berg
hy
die register globals sind beide aus.
Ich brauche alle diese variablen, plus datum.
Hello,
die register globals sind beide aus.
Ich brauche alle diese variablen, plus datum.
Dann benutze doch die Daten im Array $_POST.
Du hast doch eben selber bestätigt, dass sie dort ankommen.
Anstelle von $select schreibst Du dann $_POST['select']
Mit den anderen Variablen machst Du es entsprechend.
Vermutlich musst Du noch die magic_quotes wieder entfernen.
Was steht denn im Setting für
magic_quotes_gpc ?
Ein harzliches Glückauf
Tom vom Berg
Die sind "on".
Wie entferne ich die?
Hello,
Wie entferne ich die?
entweder ausschalten. Das geht auch (meistens) in einer .htaccess
php_value magic_quotes_gpc 0
oder auch
php_flag magic_quotes_gpc off
oder mit einer rekursiven Funktion am Anfang des Scriptes entfernen
#--------------------------------------------------------------------
function strip($data)
{
if (!get_magic_quotes_gpc())
{
return $data;
}
if (is_array($data))
{
foreach($data as $key => $val)
{
$data[$key] = strip($val);
}
}
else
{
$data = stripslashes($data);
}
return $data;
}
#-----------------------------------------------------------------------------
Und als Aufruf dann
$_POST = strip($_POST);
Ein harzliches Glückauf
Tom vom Berg
Das Ding funktioniert nun!
Vielen Dank für die Hilfe.
Hello,
Das Ding funktioniert nun!
es enthält aber noch einen wesentlichen Fehler.
bevor die Dateien beschrieben werden oder auch gelesen, um sie dann wieder zu beschreiben, sollten sie exclusiv gesperrt werden.
Vor dem fputs() sollte also noch ein flock($fp, LOCK_EX) eingefügt werden.
Ein harzliches Glückauf
Tom vom Berg
Hi,
<form name="eintragsform" method="post" action="eintrag01.php">
okay, die Daten werden also per POST verschickt.
<?php
$date = (date ("d.m.Y"));
if ($text != "")
Wo soll $text plötzlich herkommen?
if ($select == "01")
Wo soll $select plötzlich herkommen?
Du greifst nirgends auf die in $_POST[] übergebenen Daten zu, sondern gehst davon aus, dass du sie gleich in Variablen im Script zur Verfügung hast, die zufällig die gleichen Namen haben wie die Formularfelder.
Das war vor vielen Jahren mal üblich, bevor die PHP-Entwickler gemerkt haben, dass das Murks ist. Vermutlich ist dein Webhoster einer der letzten, die endlich register_globals deaktiviert haben.
if ($select == "02")
if ($select == "03")
if ($select == "04")
if ($select == "05")
if ($select == "06")
if ($select == "07")
[...]
Hier wäre eine switch-Anweisung wohl praktischer.
So long,
Martin