0

はい/いいえ(値1/0)のコンボボックスがいくつかあり、データベースにビットとして保存します。その値をオブジェクトの正しいメンバーに入れるには、次のようにします。

class Member {
    var $active;

    public function refreshData() {
        $mysqli = connectdbMySQLI();

        $query = "SELECT * FROM tblMember WHERE ID = " . $this->id;
        $result = $mysqli->query($query);
        $row = $result->fetch_array(MYSQLI_ASSOC);
        $this->setData($row);
        $mysqli->close();
    }

    public function setData($row) {
        $this->active = $row['active'];
    }
}

これらのビット値を除くすべての varchars、int および text-values、または代入されます。var_dump で確認したところ、空の文字列が表示されました

["active"]=> string(1) "" 

保存もうまくいきません:

$member = new Member(isset($_POST['id']) ? $_POST['id'] : null );
if(isset($_POST['active'])) {
    $member->active = $_POST['active'];
$member->save();
}

これは、コンボボックスで正しい値を選択するために使用します。

<select type="text" name="active" id="active" class="txt">
    <option value="0" <?php echo $member->active == 0 ? 'selected="selected"' : ''; ?>>No</option>
    <option value="1" <?php echo $member->active == 1 ? 'selected="selected"' : ''; ?>>Yes</option>
</select>**

ローカル NAS と何が違うのですか?

編集:

私はこれを試しました(すべての結果は1です):

$this->active = $row['active'] == true ? '1' : '0';

そしてこれ(すべての結果は0です):

$this->active = $row['active'] == 1? '1' : '0';

編集2:

単純なクエリ(mysqliなし)を試しただけで、すべてのビットフィールドに対して空の結果が得られました

4

1 に答える 1

0

次の条件は、アクティブなドロップダウンから値 1 を選択した場合にのみ機能します

if(isset($_POST['active'])) 

次のものに置き換える必要があります

if(!$_POST['active']) {
    $_POST['active'] = 0;
}else{
   $_POST['active'] = 1;
}

または解決策 2

ドロップダウンで次の値を更新します

<select type="text" name="active" id="active" class="txt">
    <option value="1" <?php echo $member->active == 1 ? 'selected="selected"' : ''; ?>>No</option>
    <option value="2" <?php echo $member->active == 2 ? 'selected="selected"' : ''; ?>>Yes</option>
</select>**

if 条件をバイパスしません。

于 2013-10-04T07:51:41.433 に答える