简体   繁体   中英

How to update MySQL from multiple checkboxes with names from database?

I have a table of languages from MySQL and in database there is a row "enabled" that has values 1 or 0. 1 for enabled language, 0 for disabled. I would like to change those values with checkboxes in my html/php table.

Problems I encounter are with input names since they are variable from database + values of checked checkboxes.

My code looks like this:

require_once ('../mysqli_connect.php'); // Connect to the db.

if(isset($_POST['submit']))
{
$lang_q="SELECT * FROM language";
$lang_r = @mysqli_query ($dbc, $lang_q); // Run the query.
while($lang_row = mysqli_fetch_array($lang_r, MYSQLI_ASSOC)){
    $lang_code2[]=$lang_row['lang_code'];
    $language[]=$lang_row['language'];
    $langid2[]=$lang_row['lang_id'];
    $lang_active2[]=$lang_row['enabled'];
}
$language2=$_POST[$language];
$lang_active=$_POST[$lang_active2];
$langid=$_POST[$langid2];
$m="test";
if(isset($language2)){
    foreach ($lang_active as $key => $value) {
        $value="1";
    }
    //$lang_active='1';
    $m.="-uspjeh";
}

$q="UPDATE language SET enabled='$lang_active' where lang_id='$langid' ";
$r = @mysqli_query($dbc, $q); // Run the query.
if($r){
    $success=true;
    require_once ('includes/login_functions.inc.php');
    $url = absolute_url();
    $url = absolute_url("language-manager.php?success=update");
    header("Location: $url");
    $m.="-da";
}   
else{
    $s ="<br />GREŠKA UPDATE";
    echo mysqli_error($r);
    $m.="-ne";
}
}
$page_title = PAGE_TITLE84;
include_once('includes/header.php');?>
<?php

$lang_q="SELECT * FROM language";
$lang_r = @mysqli_query ($dbc, $lang_q); // Run the query.
echo $m.'-dadda';
echo '
<form action="language-manager.php" method="POST" name="language-manager">
    <table class="languages">
    <tr>
        <td>'.LANGUAGE_R.'</td>
        <td>'.ACTIVE_R.'</td>
    </tr>
    ';
    while($lang_row = mysqli_fetch_array($lang_r, MYSQLI_ASSOC)){
        $lang_code2=$lang_row['lang_code'];
        $language=$lang_row['language'];
        $lang_active=$lang_row['enabled'];
        $langid=$lang_row['lang_id'];
        echo '<tr>
            <td class="lang"><img src="../flags/'.$lang_code2.'.png" />'.$language.'</td>
            <td>
                <input type="checkbox" name="'.$language.'" id="'.$langid.'" value="'.$lang_active.'"';
                    if($lang_active=='1'){
                        echo ' checked="checked"';
                    }
                echo '>
            </td>
        </tr>';
    }
    echo '</table>
    <input type="submit" name="submit" value="Update" >
</form>
</div>';

mysqli_close($dbc);

A series of checkboxes in an HTML form all should have the same input name. The server side receives an array by that name. You need to start by making them all the same name. Let's say you call it 'enabledLanguages[]'. The '[]' is important, as this is what makes the value send as an array. So you want something more like this:

<input type="checkbox" name="enabledLanguages[]" id="'.$langid.'" value="'.$lang_active.'"';
                    if($lang_active=='1'){
                        echo ' checked="checked"';
                    }
                echo '>

Then make the values of each the language id. Change this query:

$q="UPDATE language SET enabled='$lang_active' where lang_id='$langid' ";

so it's more like this:

$langids = implode(',', $_POST['enabledLanguages']);
// sets each row in this table to 0 (false) if the lang_id isn't IN the $langids list
// and sets to 1 (true) if it is IN the $langids list
$q="UPDATE language SET enabled= lang_id IN($langids) > 0";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM