Hallo,
da mein Problem ein wenig schwer zu erklären ist, fange ich mit einer einfachen Frage an:
Kann es sein, dass in der PHP-Version 4.0.3pl1 der Befehl foreach() noch irgendwie buggy war? (Im PHP ChangeLog habe ich allerdings keinen Hinweis darauf gefunden.)
Jetzt ausführlicher:
In einem Formular werden mehrere Textfelder ausgefüllt:
<input type="text" size="30" name="nuprod[]">
(davon gibt es natürlich mehrere Felder).
Nach dem Absenden werden die Eingaben in eine DB geschrieben:
<?php
if (is_array($nuprod))
{
$sortcount = 0;
// jetzt die einzelnen eintraege behandeln:
foreach ($nuprod as $setprod)
{
if (trim($setprod) != "") // ist der eintrag auch nicht leer?
{
$sortcount = $sortcount + 100; // counter hochsetzen
$prodq = "INSERT INTO $table";
$prodq .= " SET bezeichnung='$setprod', prodsort=$sortcount";
if (!$prodinsres = mysql_query($prodq))
{ echo "Fehler!"; }
else
{ echo "Alles klar!"; }
} // schliesst "if(trim..."
} // schliesst "foreach"
} // schliesst "if(is_array..."
?>
(... und bitte nicht meckern, dass z.B. "$nuprod" statt "$_POST['nuprod']" geschrieben wurde -- wie gesagt, ist eh 'ne alte PHP-Version).
Jetzt zu dem Problem.
Auf dem Testserver (PHP v4.1.x) lief alles, wie es sollte.
Auf dem jetzigen Server, der aus mir unverständlichen Gründen noch v4.0.3pl1 drauf hat, passiert folgendes:
Jeder Eintrag, der ins Textfeld eingegeben wurde, wird mehrfach in die DB geschrieben -- bisher jew. dreimal (weiß aber nicht, ob das konstant ist).
Wenn man also drei Einträge vornimmt:
[Inputfeld 1:] Eintrag 1
[Inputfeld 1:] Eintrag 2
[Inputfeld 1:] Eintrag 3
... dann landet folgendes in der Datenbank (erste Angabe im Feld 'bezeichnung', zweite im Feld 'prodsort'):
'Eintrag 1', 100
'Eintrag 1', 200
'Eintrag 1', 300
'Eintrag 2', 400
'Eintrag 2', 500
'Eintrag 2', 600
'Eintrag 3', 700
'Eintrag 3', 800
'Eintrag 3', 900
Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt.
Hat jemand irgendeine Idee, was da falsch läuft bzw. was man da machen kann, um den Fehler zu beheben? Ich selbst komme da momentan absolut nicht hinter...
Gruß,
Tobias Jung
P.S.: Den obigen PHP-Code habe ich extra für das Forum ein wenig gekürzt, um ihn verständlicher/lesbarer zu machen. Ich denke aber, dass ich den "kritischen Part" getroffen habe -- und ich hoffe, dass ich beim Kürzen keine zusätzlichen Fehler reingebracht habe...