2016-12-14 50 views
0

我有一個表單,將用戶信息提取到$ row變量中,因此如果數據庫存在該行,則會填充表單,然後通過$ _POST全局變量保存任何新輸入,以防用戶在表單上的其他地方犯了錯誤。這一切都很好。使用PHP在html5下拉表單中使用PHP回顯「選擇」

<label for="qualification2">Grade:</label> 
     <input type="text" name="qualification2" id="grade2" class="form-control" 
     value="<?php if(isset($_POST['qualification2'])) { 
     echo $_POST['qualification2']; 
     } else { echo ($row ['qualification2']); } ?>"> 

我想使用選擇下拉框做類似但代碼似乎沒有工作一樣用下拉框,我不知道我做錯了,或者如果這甚至有可能。

我還回聲從$ row變量嘗試,但不工作,要麼

<?php if($row['qualMonth2'] == 'February') { echo ' selected'; } ?> 

這是我的代碼:

<select input type="text" name="qualMonth2" id="qualMonth2" value="Select Month"> 
     <option value="January" <?php if(isset($_POST['qualMonth2']) == 'January') { echo ' selected'; } ?>>January</option> 
      <option value="February" <?php if(isset($_POST['qualMonth2']) == 'February') { echo ' selected'; } ?>>February</option> 
      <option value="March" <?php if(isset($_POST['qualMonth2']) == 'March') { echo ' selected'; } ?>>March</option> 
      <option value="April" <?php if(isset($_POST['qualMonth2']) == 'April') { echo ' selected'; } ?>>April</option> 
      <option value="May" <?php if(isset($_POST['qualMonth2']) == 'May') { echo ' selected'; } ?>>May</option> 
      <option value="June" <?php if(isset($_POST['qualMonth2']) == 'June') { echo ' selected'; } ?>>June</option> 
      <option value="July" <?php if(isset($_POST['qualMonth2']) == 'July') { echo ' selected'; } ?>>July</option> 
      <option value="August" <?php if(isset($_POST['qualMonth2']) == 'August') { echo ' selected'; } ?>>August</option> 
      <option value="September" <?php if(isset($_POST['qualMonth2']) == 'September') { echo ' selected'; } ?>>September</option> 
      <option value="October" <?php if(isset($_POST['qualMonth2']) == 'October') { echo ' selected'; } ?>>October</option> 
      <option value="November" <?php if(isset($_POST['qualMonth2']) == 'November') { echo ' selected'; } ?>>November</option> 
      <option value="December" <?php if(isset($_POST['qualMonth2']) == 'December') { echo ' selected'; } ?>>December</option> 
     </select> 
+0

是'$ row'填充?小心分享它?也請親愛的上帝重構這個。 – Pogrindis

+1

你知道'isset()'返回什麼嗎? –

+0

你想使用PHP客戶端嗎?在頁面發送給客戶端時,PHP代碼不存在。 – Carcigenicate

回答

0

讓我們看看你寫的..

<option value="February" <?php if(isset($_POST['qualMonth2']) == 'February') { echo ' selected'; } ?>>February</option> 

你在說什麼是..如果有一個設置爲qualMonth2(true/false)的值,再比較一下st a string ..

所以你比較真正的||錯誤的字符串。

isset($_POST['qualMonth2'])返回true // false。

因此永遠不會被選中。

重構它..

<?php 
$month = ""; 

if(isset($_POST['qualification2'])){ 
    $month = $_POST['qualification2']; 
} 
?> 

然後使用$month作爲比較值。

<option value="July" <?php if($month == 'July') { echo ' selected'; } ?>>July</option> 
+0

這對我來說最有意義,它實際上並沒有工作,但現在我覺得它可能與我的代碼或其他地方有關。我會繼續努力,謝謝你的幫助 – user7269149

1

isset根據是否設置了變量驗證爲true或false。你不能用isset檢查值。

使用小效用函數來檢查條件:

function checkSelected($value) { 
    if(isset($_POST['qualMonth2']) && $_POST['qualMonth2'] == $value) { 
     return true; 
    } else { 
     return false; 
    } 
} 

你選擇的元素應該是再:

<select input type="text" name="qualMonth2" id="qualMonth2" value="Select Month"> 
    <option value="January" <?php echo checkSelected('January') ? 'selected':'' ?>>January</option> 
    <option value="February" <?php echo checkSelected('February') ? 'selected':'' ?>>February</option> 
    <option value="March" <?php echo checkSelected('March') ? 'selected':'' ?>>March</option> 
    <option value="April" <?php echo checkSelected('April') ? 'selected':'' ?>>April</option> 
    <option value="May" <?php echo checkSelected('May') ? 'selected':'' ?>>May</option> 
    <option value="June" <?php echo checkSelected('June') ? 'selected':'' ?>>June</option> 
    <option value="July" <?php echo checkSelected('July') ? 'selected':'' ?>>July</option> 
    <option value="August" <?php echo checkSelected('August') ? 'selected':'' ?>>August</option> 
    <option value="September" <?php echo checkSelected('September') ? 'selected':'' ?>>September</option> 
    <option value="October" <?php echo checkSelected('October') ? 'selected':'' ?>>October</option> 
    <option value="November" <?php echo checkSelected('November') ? 'selected':'' ?>>November</option> 
    <option value="December" <?php echo checkSelected('December') ? 'selected':'' ?>>December</option> 
</select> 
0

我更喜歡在Javascript執行這些檢查(我喜歡的JQuery),我想它會清理代碼,但通過使用生成月份的循環,您還可以大大簡化這一過程。

遍歷1-12輸出

<select input type="text" name="qualMonth2" id="qualMonth2" value="Select Month"> 
<?php 
for($i=1; $i<=12; $i++) { 
    $dateObj = DateTime::createFromFormat('!m', $i); 
    $monthName = $dateObj->format('F'); 
    echo "<value>" . $monthName . "</option>"; 
} 
?> 
</select> 

這種方法需要DRY(不重複)的方式。如果您需要修改某些內容,則只需修改1行代碼與12行代碼即可。

jQuery的選購價值(默認爲一月,如果$ _ POST [「qualMonth2」]沒有設置):

<script> 
    $('#qualMonth2').val("<?php echo (isset($_POST['qualMonth2'])) ? $_POST['qualMonth2'] : 'January' ?>"); 
</script> 

採取什麼樣的,你會從這個答案,我剛纔給你兩種可能性,你如果你願意,可以通過在循環中添加一個檢查來避免Javascript。