Updating Already Checked Checkboxes in PHP

后端 未结 4 1833
夕颜
夕颜 2020-12-22 03:30

let\'s say I have a list of checkboxes that the user selects.

Water<         


        
相关标签:
4条回答
  • 2020-12-22 03:33

    Like that?

    <input type="checkbox" name="utility[]" id="utility[]" value="Water"
       <?php
       if(isAlreadyChecked("Water"))
         echo "checked=\"checked\""
       ?>
    />Water<br />
    
    <?php
       function isAlreadyChecked(value)
       {
         //Check if it is already checked and return a boolean
       }
    ?>
    
    0 讨论(0)
  • 2020-12-22 03:43

    I tried every variant of the in_array conditional out there and could NEVER get this to work (checking off the checkboxes whose values had been previously selected and thus inserted into the database). I tried complex queries with table joins and no luck with that either. I finally gave up and generated a display:hidden div that opened the array (which for some odd reason I had to IMPLODE rather than explode) and listed its items as comma-separated text. Then I tossed in a little jQuery indexOf() magic to determine if the value of each checkbox was part of said array or not. Took me 10 minutes flat to do this with jQuery, very simple.

    Here's some sample code that is live and working fine:

    <div class="categories">
      <span class="keywords"><?php $categories = array(); $categories = implode(', ', $keywords); echo $categories ?></span>
      <em>Please verify category selections with each update.</em><br/>
      <?php
        include 'db.php'; 
          $sql = mysqli_query($con,"SELECT * FROM categoriesTable ORDER BY Category_Name ASC");
            while ($row = mysqli_fetch_assoc($sql))
            {
            $key = urldecode($row['Category_Name']);
            $id = urlencode($row['catID']);
            echo "<input type='checkbox' name='Category_Key[]' value='$id' id='cat_$id' $chk> $key<br/>";
            }
      ?>
    </div>
    

    CSS sets that div to invisible:

    .keywords { display:none; visibility:hidden; }
    

    and the jQuery portion:

    $(document).ready(function() {  
        $('.categories input').each(function(index,data) {
            var str=$('.keywords').text();
            var catid = $(this).val();
            var chk = str.indexOf(catid);
            if (chk >= 0) {
                $(this).prop('checked', true);
            }
        });
    });
    

    I hope this helps someone else who is stuck wondering why the in_array conditional is failing them. Since this falls in a twilight zone between data and UI regarding data persistence, I think it's a legit route to take. You have one "echo" statement to generate multiple checkboxes (there are around 40 categories in my situation here) and then a simple jQuery .each() to locate what was selected before and render its corresponding boxes as checked.

    0 讨论(0)
  • 2020-12-22 03:50

    What I've done in the past, to save having hundreds of lines of bloat is this...

    First compile all the html in a variable, without any "checked" instances.

    $boxes = '';
    $boxes .= '<input type="checkbox" name="utility[]" id="utility[]" value="Water" />Water<br />';
    $boxes .= '<input type="checkbox" name="utility[]" id="utility[]" value="Cable" />Cable<br />';
    $boxes .= '<input type="checkbox" name="utility[]" id="utility[]" value="Electricity" />Electricity<br />';
    

    Now I loop over your array of fields to check. I've provided a sample array here too.

    $already_checked = array('Water', 'Electricity');
    
    foreach( $already_checked as $ac ) {
        $find = 'value="' . $ac . '"';
        $replace = $find . ' checked="checked"';
        $boxes = str_replace($find, $replace, $boxes);
    }
    
    echo $boxes;
    
    0 讨论(0)
  • 2020-12-22 03:53

    You could do something like this:

    <input type="checkbox" name="utility[]" value="Water" 
         <?= in_array('Water', $utilities) ? 'checked="checked"' : '' ?>" 
    />
    

    (The $utilities variable above is a stand-in for something like $_REQUEST['utilities'], depending on how your code is structured.)

    0 讨论(0)
提交回复
热议问题