18. september 2005 - 19:11Der 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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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?
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?
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'];
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[]"> ?
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\">");
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?
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>");
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...
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 ;) ).
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.
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!
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.