PHP/MySQL (MariaDB) - Uppdatera medelst kryssboxar

Permalänk
Medlem

PHP/MySQL (MariaDB) - Uppdatera medelst kryssboxar

Hej!
Jag har nu suttit hela natten och försökt få ordning på en del av ett betalsystem för en skjutbana.
Vill nu få in 5 olika arrayer till en databas, där värdena hämtade från ett formulär ska stämma mellan varandra.
Allt går helt okej med inmatning från text-rutor och dropdowns men så snart jag ska få data från en checkruta så går det åt skogen.

Formulärdelen:

while($pay = $payer->fetch_object()){ echo "\t\t\t<tr>\n"; echo "\t\t\t\t<td><input type=\"text\" name=\"index[]\" value=\"" . $pay->aaid . "\" hidden>\n"; echo "\t\t\t\t<td><input type=\"text\" name=\"member[]\" value=\"" . $pay->membnr . "\" hidden>\n"; echo "\t\t\t\t<input type=\"text\" readonly value=\"" . $pay->firstn . " " . $pay->lastn . "\" style=\"width: 150px;\"></td>\n"; echo "\t\t\t\t<td><select name=\"cost[]\">\n"; foreach($cost as $key){ echo "\t\t\t\t\t<option value=\"" . $key->id . "\""; if($pay->cost == $key->id){ echo " selected"; $costas = $key->cost; } echo ">" . $key->type . "</option>\n"; } echo "\t\t\t\t</select></td>\n"; echo "\t\t\t\t<td><input type=\"text\" name=\"amount[]\" value=\"" . $pay->amount . "\" style=\"width: 53px;\"></td>\n"; echo "\t\t\t\t<td>(" . $costas*$pay->amount . "kr)</td>\n"; echo "\t\t\t\t<td><input type=\"checkbox\" value=\"".$pay->aaid."\" name=\"paid[]\""; if($pay->paid==1){ echo " checked"; } echo "></td>\n"; echo "\t\t\t\t<td><input type=\"checkbox\" value=\"".$pay->aaid."\" name=\"remove[]\"></td>\n"; echo "\t\t\t</tr>\n"; }

$payer hämtar alla skyttar som redan är registrerade på den aktuella aktiviteten.
$cost är en array med alla artiklar som skyttarna ska betala för och vad de kostar.

Taomhand-delen:

if(isset($_POST['remember'])){ $index = $_POST['index']; $member = $_POST['member']; $ammocost = $_POST['cost']; $amount = $_POST['amount']; $paid = $_POST['paid']; $remove = $_POST['remove']; foreach($member as $key => $m){ if(empty($m)){ $godis="gott"; } elseif(empty($amount[$key])){ $godis="smaskens!"; } elseif($remove[$key]){ $query = "DELETE FROM member_activities WHERE aaid = '" . $remove[$key] . "'"; $result = mysqli_query($connect, $query) or die("Det ville inte. " . mysqli_error($connect)); } else{ $query = "SELECT * FROM member_activities WHERE aaid = " . $index[$key]; $result = mysqli_query($connect, $query) or die("Det ville inte. " . mysqli_error($connect)); $isold = mysqli_num_rows($result); if($paid[$key]){ $paid = 1; } else{ $paid = 0; } if($isold == 0){ $query = "INSERT INTO member_activities (activity, member, cost, amount, paid) VALUES('"; $query .= $_GET['activity'] . "', '".$m."', '".$ammocost[$key]; $query .= "', '".$amount[$key]."', '" . $paid . "')"; } else{ $query = "UPDATE member_activities SET member = '".$m."', cost = '" . $ammocost[$key] . "', amount = '".$amount[$key]."', "; $query .= "paid = '".$paid."' WHERE aaid = ".$index[$key]; } unset($godis); $result = mysqli_query($connect, $query) or die("Det gick inte att spara deltagare. " . mysqli_error($connect)); } } }

Oavsett vilken checkruta jag klickar i så påverkar den enbart den nyaste raden i tabellen. Vad är det jag missar?

Visa signatur

WS: MSI B350M Mortar | AMD Ryzen 7 1700 | PH-TC14PE | 32GB DDR4 3000MHz | 1TB Kingston NV2 | Intel Arc A750 8GB | 2*BenQ G2420HDB
Router: Gigabyte GA-870-UD3 | AMD Phenom II x6 1055t @ 2600MHz, 1.25V | 12GB DDR3 | 2*250GB HDD @ RAID1 | 4TB HDD
Laptop: Thinkpad X220 4291-QF6

Permalänk
Medlem

Jag fick tillslut ordning på det.

Det som saknades var en "break" om fallet var som sådant att raden skulle tas bort, för om den togs bort så lades den också till efteråt, då den tydligen inte nöjde sig med att sluta vid en elseif utan också gick vidare till else. Kanske borde döpt även else-funktionen till elseif från början nu när jag tänker på't.

Jag gjorde även om $_POST['paid'] till en array med hjälp av foreach för att sedan köra foreach igen inom else-funktionen för att jämföra aaid med paid-checkboxen.

Tack för att jag fick ventilera mig!

Visa signatur

WS: MSI B350M Mortar | AMD Ryzen 7 1700 | PH-TC14PE | 32GB DDR4 3000MHz | 1TB Kingston NV2 | Intel Arc A750 8GB | 2*BenQ G2420HDB
Router: Gigabyte GA-870-UD3 | AMD Phenom II x6 1055t @ 2600MHz, 1.25V | 12GB DDR3 | 2*250GB HDD @ RAID1 | 4TB HDD
Laptop: Thinkpad X220 4291-QF6

Permalänk
Medlem
Skrivet av Dracc:

Jag fick tillslut ordning på det.

Det som saknades var en "break" om fallet var som sådant att raden skulle tas bort, för om den togs bort så lades den också till efteråt, då den tydligen inte nöjde sig med att sluta vid en elseif utan också gick vidare till else. Kanske borde döpt även else-funktionen till elseif från början nu när jag tänker på't.

Jag gjorde även om $_POST['paid'] till en array med hjälp av foreach för att sedan köra foreach igen inom else-funktionen för att jämföra aaid med paid-checkboxen.

Tack för att jag fick ventilera mig!

Ah, småfel är lätta att göra och något sinnesjukt irriterande när man kommer på dom.
Skönt att du lyckades.
/Lifooz

Visa signatur

Deepcool Matrexx 30 & MSI Z87-G43 Gaming!
Intel Inside Core I7 4790K med AMD Radeon R9 390!
Rubbet strömförsörjs av Corsair RM750X!