我在表單中有一些共享相同名稱的字段,它們是從數據庫表中自動生成的,我不知道會有多少字段。PHP和HTML在提交後記得同名的複選框值
<div class="row w40 fl">
<label for="code" class="label">codice <span class="form-notice">*</span></label>
<input type="text" class="input" name="code" id="code" placeholder="Codice" value="<?= Input::post('code') ?>">
</div>
<div class="row w40 fr">
<label for="name" class="label">nome <span class="form-notice">*</span></label>
<input type="text" class="input" name="name" id="name" placeholder="Nome" value="<?= Input::post('name') ?>">
</div>
<?php foreach($categories as $cat): ?>
<div class="w20 fl">
<label for=""><?= ucwords($cat->name) ?></label>
<input type="checkbox" name="cat[]" value="<?= $cat->id ?>" <?= ($cat->id == Input::post('cat')) ? 'checked' : '' ?>>
</div>
<?php endforeach; ?>
問題是,如果提交後發生錯誤,所有檢查的輸入將會丟失。如果他們有不同的名字就不會有任何問題,但他們總是不同的。
所以提交後,我怎麼記得檢查過的並檢查它們?假設用戶檢查其中的5個,填寫所有表單輸入但留下一個空白。很明顯,一個錯誤會彈出,但所有其他輸入將有用戶輸入的數據,複選框不會,至少我不知道該怎麼做。
注意Input::post('code')
意味着(isset($_POST['code'])) ? $_POST['code'] : ''
謝謝你,希望你能建議我一個解決方案。
好的,所以在這裏進行更多的研究是解決方案。
if (isset($_POST['cat'])) {
foreach ($_POST['cat'] as $cbCat) {
$selectedCat[$cbCat] = 'checked';
}
}
<?php foreach($categories as $cat): ?>
<div class="w20 fl">
<label for="cat-<?= $cat->id ?>"><?= ucwords($cat->name) ?></label>
<input type="checkbox" id="cat-<?= $cat->id ?>" name="cat[]" value="<?= $cat->id ?>" <?= (isset($selectedCat[$cat->id])) ? $selectedCat[$cat->id] : '' ?> >
</div>
<?php endforeach; ?>
我試過了,我確實不能。我最終找到了解決方案,如果感興趣,請參閱主文章。 –
如果你不介意改變你的方法,那麼甚至有更簡單的解決方案。只需在你的第一個代碼中修改:'($ cat-> id == Input :: post('cat'))'to:(in_array($ cat-> id,$ _POST ['cat']))' – MSadura
謝謝,好的解決方案。 –