webForumDet fria alternativet

Spara data från dynamiskt formulär

PHPur PHP

5 svar · 280 visningar · startad av Peeer

PeeerMedlem sedan mars 20025 907 inlägg
#1
<form action="add.php?add=results&step=3" method="post">
<input type="hidden" name="compid" value="1">
<tr><td>Andersson, Per</td><td><input type="text" name="3" class="form"></td></tr>
<tr><td>Andersson, Karin</td><td><input type="text" name="6" class="form"></td></tr>
<tr><td>Hordnes, Anna</td><td><input type="text" name="7" class="form"></td></tr>
<tr><td>Johnson, Björn</td><td><input type="text" name="5" class="form"></td></tr>
<tr><td>Öberg, Viktor</td><td><input type="text" name="4" class="form"></td></tr>
</table>
<input type="submit" value="Spara"></form>

Jag har ett formulär som ser ut som ovanstående. När jag submitar formuläret så vill jag spara datan i en databastabell med nedanstående fält. Jag antar att man kan göra det med någon form av while-loop, eller liknande. Men då jag är helt färsk på php så behärskar jag inte den kunskapen. Någon som kan ge mig en knuff i rätt riktning?

t_points
*f_compid - Alla poster ska ha samma compid. Hämtas från hiddenfältet
*f_userid - Namnet på inputboxarna ska in här
*f_time - Texten som står i inputboxarna ska in här.

MatteMedlem sedan aug. 20002 975 inlägg
#2

Först. Även om jag tror det går, känns det inte riktigt bra att endast ha en siffra som namn på ett formulärsfält. Jag brukar försöka följa reglerna för namngivning av PHP-variabel när jag sätter namn på ett formulärsfält. Så för säkerhets skull byt namn på dom till t.ex f3, f6 och så vidare.

Har du bytt namn på dom kan du göra så här på skriptsidan:

foreach ($_POST as $key => $val) {
    if (substr($key, 0, 1) == "f") {
       $f_userid = substr($key, 1);
       $sql = "INSERT INTO t_points(f_compid, f_userid, f_time)
               VALUES('{$_POST['compid']}', '$f_userid', '$val')";
       mysql_query($sql);
    }
}

Du kanske ska göra en uppdatering istället. Då blir det så här:

foreach ($_POST as $key => $val) {
    if (substr($key, 0, 1) == "f") {
       $f_userid = substr($key, 1);
       $sql = "UPDATE t_points SET f_compid='{$_POST['compid']}'
               , f_time='$val' WHERE f_userid='$f_userid'";
       mysql_query($sql);
    }
}
PeeerMedlem sedan mars 20025 907 inlägg
#3

Tackar. Ska ta en titt på koden när jag kommer hem, men det verkar lovande! :)

PeeerMedlem sedan mars 20025 907 inlägg
#4

Väcker liv här igen:
Koden ovan fungerar, men nu har jag andra önskemål.

<input type="checkbox" name="list" value="1">
<input type="checkbox" name="list" value="2">
<input type="checkbox" name="list" value="3">

--
print_r($_POST["list"])

I ASP kunde man få ovanstående att fungera (dvs. $_POST["list"] blev en array med de olika värdena), men det verkar inte gå i php. Om man postar formuläret ovan och skriver ut resultatet som jag gör så skrivs endast det senaste värdet ut (om rutorna är ikryssade alltså), dvs 3 i det här fallet.

Går det inte att göra såhär i php? Måste jag ha unika formulärsnamn på alla fälten?

MatteMedlem sedan aug. 20002 975 inlägg
#5

Så här du menar ?

<input type="checkbox" name="list[]" value="1">
<input type="checkbox" name="list[]" value="2">
<input type="checkbox" name="list[]" value="3">
PeeerMedlem sedan mars 20025 907 inlägg
#6

Sedärja. Har aldrig sett klammrar i ett formulärsfält, men det fungerar i alla fall. Tack! :)

126 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)