1

MySQL の言語のテーブルがあり、データベースには値が 1 または 0 の「有効」な行があります。有効な言語の場合は 1、無効な場合は 0 です。html/php テーブルのチェックボックスでこれらの値を変更したいと思います。

私が遭遇する問題は、入力名がデータベースからの変数 + チェックされたチェックボックスの値であるためです。

私のコードは次のようになります。

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);
4

1 に答える 1

1

HTML フォーム内の一連のチェックボックスは、すべて同じ入力名を持つ必要があります。サーバー側はその名前で配列を受け取ります。それらをすべて同じ名前にすることから始める必要があります。それを「enabledLanguages[]」と呼ぶとしましょう。「[]」は重要です。これにより、値が配列として送信されます。したがって、次のようなものがもっと必要です。

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

次に、それぞれの値を言語 ID にします。このクエリを変更します。

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

したがって、次のようになります。

$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";
于 2012-10-11T17:45:38.273 に答える