Avatar billede olufsand Nybegynder
26. april 2002 - 00:34 Der er 7 kommentarer og
1 løsning

Variable felter i forms

Jeg har et lille problem med at læse værdier fra felter i en form:

opdatertabel.php er:

<FORM ACTION="gemtabel.php" name="OpdaterTabel" method="POST" target="_self">

for ($i=0;$i<$NumberOfFields;$i++) {
  $feltnavn[$i] = mysql_field_name($res, $i);
?>
<INPUT TYPE="text" NAME="<?echo $feltnavn[$i];?>" VALUE="<?echo $data[$feltnavn[$i]];?>" SIZE=20>
<?
}
</FORM>

gemtabel er:

<FORM ACTION="gem.php" name="GemDB" method="POST" target="_self">
<?
$db=mysql_connect();
mysql_select_db("Sportsfoto",$db);

$Felter = explode(",",$FeltNavne);
$Tegn = "";
$UpdateSQL = "UPDATE `TEST_$TabelNavn`";
$Set = " SET ";

for ($i=1; $i < count($Felter); $i++) {
$UpdateSQL = "$UpdateSQL$Tegn$Set$Felter[$i]='$$Felter[$i]'";
$Tegn = ", ";
$Set = "";
}

$WhereClauseNew = str_replace("\'","'",$WhereClause);

$UpdateSQL = "$UpdateSQL $WhereClauseNew";

mysql_query("$UpdateSQL") or die (mysql_error());
?>
</FORM>

<? echo "$UpdateSQL"; ?> giver følgende linie:

UPDATE `TEST_MEDIE` SET KODE='$KODE', EGENSKAB='$EGENSKAB', BESKRIVELSE='$BESKRIVELSE' Where KODE='DK' AND EGENSKAB='DI'

men den opdaterer de 3 kolonner med $KODE, $EGENSKAB og $BESKRIVELSE.
Man skal kunne bruge dette script til at opdatere en tabel med en vilkårlig struktur

Er der nogen der har en løsning dette lille problem ?
Avatar billede Slettet bruger
26. april 2002 - 00:43 #1
Det er ikke et lille problem, at designe en generel metode til generering og håndtering af forms. Jeg har gjort noget ala følgende.

Du bør implementer din egen formhandler klasse. Når du skal bruge en form laver du et objekt af denne klasse. Når du eksempelvis skal bruge et <input type="text" name="foo" value="bar"> kalder du en metode ala formhandler.getInputField("foo", "bar"); som retunerer HTML koden for dette.

I klassen bør du implentere en passende logik der holder styr på hvilke elementer formen består af. Altså når du eksempelvis generer ovenstående input felt, så tilføjes navet på dette felt til et array el. lign.
Herudfra kan du implementere en metode der generer en mySQL sætning osv. osv. osv.

Det er muligt, du kan finde noget ala dette, hvis du søger lidt på nettet og i script-arkiver, men mit gæt er, at du må lave det selv, for at opnå præcis den funktionalitet og den fleksibilitet du ønsker.

God fornøjelse.
Avatar billede tipsen Nybegynder
26. april 2002 - 00:45 #2
Forstår ikke helt, hvad problemet er... - skal den ikke opdatere $KODE, $EGENSKAB og $BESKRIVELSE?
Avatar billede olufsand Nybegynder
26. april 2002 - 00:49 #3
Til mercur8:
Øv, er det virkelig så besværligt

Til tipsen:
Det er disse 3 felter der skal opdateres, værdien der puttes i disse felter er $KODE, $EGENSKAB og $BESKRIVELSE og ikke DK, DI, DIGITAL.
Avatar billede Slettet bruger
26. april 2002 - 00:54 #4
olufsand: Hvis du vil designe en generel løsning, så ja.

Beværlig ... er måske ikke det rigtige ord. Det er først sjovt, når man prøver at designe sin kode så tilstrækkelig generel, at den kan genbruges i en flere forskellige sammenhænge.
Avatar billede olufsand Nybegynder
26. april 2002 - 00:59 #5
Du har ret, men kl. 01.00 er det besværligt, når det skal virke kl. 09.00.

Men jeg tror jeg laver det i JavaScript istedet, og så sender hele møget som en request. Den kan jeg ihvertfald læse med $QUERY_STRING
Avatar billede Slettet bruger
26. april 2002 - 01:01 #6
Åh nej ikke JavaScript.

Løb i stedet $_POST eller $_GET (i ældre PHP versioner $HTTP_POST og $HTTP_GET) array'ene igennem ... her bliver alle de variable fra henholdsvis en post og get request gemt.
Avatar billede Slettet bruger
26. april 2002 - 01:06 #7
(Rettelse - i ældre PHP versioner (version < 4.1.0) $HTTP_POST_VARS og $HTTP_GET_VARS)
Avatar billede olufsand Nybegynder
26. april 2002 - 01:37 #8
count($_POST) returnere f. eks 6, men alle $_POST[x] er tomme. Jeg har lavet en nødløsning der virker. Beklager at skulle ty til dette. Men her er scriptet

<script type="text/javascript" language="javascript">

function gem() {
var frm = document.OpdaterTabel;
var liste = "";
var tegn = "";

for(i=0;i<frm.length;i++){
    if(frm.elements[i].type == "text" ) {
        liste += tegn + frm.elements[i].name + "='" + frm.elements[i].value + "'";
        tegn = ", ";
    }
}

document.OpdaterTabel.Vaerdi.value = liste;
document.OpdaterTabel.submit();
}
</script>

Det virker ihvertfald efter hensigten.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Udviklings- og Forenklingsstyrelsen

Karrieremulighed inden for cybersikkerhed

Dynamicweb Software A/S

Solution Architect