Avatar billede koch Nybegynder
18. september 2005 - 19:11 Der er 16 kommentarer og
1 løsning

Holde styr på værdier fra post-array

Jeg skal opdatere en database udfra felter som postes fra en form. Min tabel med som jeg ønsker at opdatere ser således ud (en del af den):

            echo ("<input name = \"change_car[]\" type = \"checkbox\" value = \"$car_id\">");
                echo ("<input name = \"slet_car[]\" type = \"checkbox\" value = \"$car_id\">");
                echo ("<textarea name = \"change_mark\">$car_mark</textarea>");


og min form:
$cnt_cars_change = count($_POST["change_car"]);
                for($i = 0; $i < $cnt_cars_change; $i++)
                {   
           
                    $result_change[$i] = $_POST['change_car'][$i];

$new_mark = $_POST['change_mark'];

$query_change = "UPDATE carlist SET mark = '$new_mark' WHERE id = '$result_change[$i]'";

Problemet er nu flg. Når jeg forsøger at opdatere flere felter så bliver felterne opdateret med den værdi som jeg har indtastet i det sidste felt (altså den $_POST['change_mark'] som er sidst udfyldt).
Hvordan får jeg styr på mine $_POST['change_mark']?

Kan jeg tælle dem med count og så sætte [$i] efter dem i min for-lykke eller er det ikke sikkert at jeg får de korrekte opdateret?
Avatar billede erikjacobsen Ekspert
18. september 2005 - 21:15 #1
Felterne i din form skal have forskellige navne, eller med PHP: navne der gør dem til et array. Det har du gjort ved 2 af dem - hvorfor ikke det tredie?
Avatar billede jgivoni Nybegynder
18. september 2005 - 23:08 #2
Jeg ville gerne hjælpe, men forklar lige hvad det er du gerne vil have scriptet til at gøre.
Du skriver kun hvad det gør nu, og at det er et problem. Hvad er målet?
Avatar billede koch Nybegynder
19. september 2005 - 07:07 #3
Jeg svarer lige på begge:

Det jeg gerne vil have scriptet til at gøre er flg.:
Jeg krydser af i change_car eller slet_car alt efter om de pågældende felter (udfor denne checkbox) skal slettes eller ændres i. Dernæst bruger jeg værdien fra, lad os sige felterne skal ændres, $_POST["change_car"] som indeholder id´et på et element i databasen, til at ændre  det pågældende felt. Problemet er så, at såfremt der er afkrydset flere felter til ændring, så bilver alle felterne ændret til det sidste felt som jeg ændrer!

Jeg har prøvet at sætte [] efter change_mark i min form også, men så er det ikke den rigtige værdi som mit felt (identificeret udfra id´et fra $_POST["change_mark"]) bliver opdateret med! Så skulle jeg vel bare sætte [$i] efter $_POST["change_mark"] i min for-lykke, eller?


Jeg mangler at få identificeret de $new_mark = $_POST['change_mark']; som der postes, så jeg ved at at denne:  $query_change = "UPDATE carlist SET mark = '$new_mark' WHERE id = '$result_change[$i]'";  opdaterer felterne i databasen med id = $result_change[$i] med værdier fra den korrekt
$new_mark = $_POST['change_mark'];
Avatar billede jgivoni Nybegynder
19. september 2005 - 09:12 #4
Noget i stil med en
"UPDATE carlist SET mark = '$new_mark[$i]' WHERE id = '$result_change[$i]'"
for hver række?
Altså flere forskellige biler kan ændres til flere forskellige mærker?

If so, så tænkte jeg på det samme som dig, at sætte [] efter change_mark i textarea.
Hvad hvis du ændrer textarea til et <input type="text" name="change_mark[]"> ?
Avatar billede erikjacobsen Ekspert
19. september 2005 - 10:57 #5
Ok, checkboxene kommer kun med over, og tæller med, når de er afkrydsede. Derfor går der kludder i nummereringen. Kan du så ikke give dem forskellige navne:

  echo ("<input name = \"change_car1\" type = \"checkbox\" value = \"$car_id\">");

osv.?
Avatar billede koch Nybegynder
19. september 2005 - 16:42 #6
Jeg kan ikke få hentet data fra databasen ud i <input type="text"... så kommer de til at stå under denne 'kasse'!

Jeg forstår ikke hvorfor der kommer kludder i nummereringen. Hvis jeg krydser et kasse af at jeg vil ændre og der postes, så bliver den posted. Men det er vel også kun de elementer derudfor der bliver posted?
Avatar billede jgivoni Nybegynder
19. september 2005 - 16:59 #7
koch: jo du kan, du tilføjer bare value="$car_mark" i input:

<input type="text" name="change_mark[]" value="$car_mark">

Men det løser ikke problerme med nummereringen, hvis kun værdier fra afkrydsede boxe sendes med...
Avatar billede koch Nybegynder
19. september 2005 - 17:19 #8
Aha, det var jeg ikke klar over. Det må jeg lige gøre.

Men forstår ikke hvorfor der går kludder i nummereringen?
Avatar billede jgivoni Nybegynder
19. september 2005 - 17:54 #9
Jeg har eksperimenteret lidt:
Prøv at ændre lidt i formen:

echo ("<input name = \"change_car[]\" type = \"checkbox\" value = \"$car_id\">");
                echo ("<input name = \"slet_car[]\" type = \"checkbox\" value = \"$car_id\">");
                echo ("<textarea name = \"change_mark[$car_id]\">$car_mark</textarea>");

Og i for-løkken:

$id = $_REQUEST['change_car'][$i];
$new_mark = $_REQUEST['change_mark'][$id];
Avatar billede koch Nybegynder
19. september 2005 - 18:15 #10
Det giver mening. Er det ligegyldigt om der bruges request eller post?
Avatar billede jgivoni Nybegynder
19. september 2005 - 18:23 #11
Nåja, det ændrede jeg for nemheds skyld :-)
Men det er ligemeget i dette tilfælde.
$_REQUEST indeholder bare fællesmængden af $_POST og $_GET, hvis du forstår...
Avatar billede koch Nybegynder
19. september 2005 - 18:39 #12
Kanon. Den er der :) Mange tak for hjælpen.

Kan du give en forklaring på problemerne med nummereringen. Det jeg ikke forstår er:

Jeg klikker af at jeg vil ændre en bil og på den måde får jeg car_id´et. Samtidig bliver der posted car_mark. Når jeg så laver for-lykken som gennemløbes for hver id der er posted burde det så ikke være de tilhørende car_mark værdier? ved $i får jeg den $i´te postede element både for car_change og for car_mark (altså oppe i mit hovede ;) ).

Du lægger bare et svar.
Avatar billede jgivoni Nybegynder
19. september 2005 - 18:48 #13
Forsøg på forklaring:
Selvom du placerer felterne på samme linie, betyder det ikke nødvendigvis, at de hører sammen. PHP-scriptet er fløjtende ligeglad med, hvor elementerne i formen var placeret.
Det der sker er, at for hver gang, du har klikket i change-car bliver der tilføjet et element i array-et change_car. De bliver nummereret fra 0 og opefter.
På sammen måde bliver der tilføjet et element i car_mark for hvert tekstfelt. Men hvis du kun vil ændre 3 ud af 5, får du tre elementer i change_car og 5 elementer i car_mark. De følges altså ikke ad.

Løsningen var så at ændre indexeringen af car_mark så den får car_id som "key" i stedet for bare numre fra 0 op opefter.

Håber det gav mening.
Avatar billede koch Nybegynder
19. september 2005 - 18:53 #14
Jeg har lavet det sådan, at man skal klikke i car_change for at kan ændre i elementet. Ændringerne er så dem der postes i car_mark, så derfor vil antallet altid være det samme af car_change og car_mark. Men så er det nok fordi php ikke taager sig af hvor de står som du siger!

Jeg takker for hjælpen.
Avatar billede jgivoni Nybegynder
19. september 2005 - 19:13 #15
Nej, det er nok snarere fordi et tomt tekstfelt også bliver sendt med!
Avatar billede jgivoni Nybegynder
19. september 2005 - 19:15 #16
medmindre du sætter det til "disabled"... så burde du nemlig have ret...
Avatar billede koch Nybegynder
19. september 2005 - 19:16 #17
Nåeh, det kan jo være. Tak.
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