sql >> データベース >  >> RDS >> Mysql

データフィールドをチェックボックスとして表示し、チェックされた値を保持し、チェックされたときに値を1に設定します

    $typeが何であるかわからない 値はですが、これを試して、それがあなたのために働くかどうかを確認してください:

    <html>
    <form action='' method='post'>
    <?php
    $database = 'sample';
    $table = 'checklist_stud_columns';
    // assuming user_id as 1, you may have to write up more code on 
    // how you are fetching this value
    $user_id = 1; 
    $mysql = mysql_connect('localhost', 'root', '') or die(mysql_error());
    mysql_select_db('sample', $mysql) or die(mysql_error($mysql)); // selecting db is not not necessary in this case
    
        $query = sprintf("
        SELECT
            COLUMN_NAME,
            COLUMN_TYPE
        FROM
            INFORMATION_SCHEMA.COLUMNS
        WHERE
            TABLE_SCHEMA = '%s'
            AND TABLE_NAME = '%s'
    ",
        mysql_real_escape_string($database),
        mysql_real_escape_string($table)
    );
    $result = mysql_query($query) or die(mysql_error());
    $name = array();
    $type = array();
    while( false!=($row=mysql_fetch_array($result)) ) {
        //saving the column name and type in array
        //because it's used in multiple places
        //and we don't want to run the same query again
        if(htmlspecialchars($row['COLUMN_NAME'])!='checklist_id'){
        $name[] = htmlspecialchars($row['COLUMN_NAME']);
        $type[] = htmlspecialchars($row['COLUMN_TYPE']);
        }
    }
    
    if(isset($_POST['submit'])) {
    
            //We need to check if the user id already exists
            //in the table, if it does, we will UPDATE,
            //else INSERT a new record
            $action = '';
            $sql = mysql_query("SELECT * FROM {$table} WHERE checklist_id={$user_id}");
            //if record for the user id is found, update action
            //should take place else insert
            $action = (mysql_num_rows($sql)>0)?'update':'insert';
    
            if($action=='insert'){
                //INSERT INTO checklist_stud_columns(`id`
                $query_insert = "INSERT INTO {$table}(`id`";
    
                //INSERT INTO checklist_stud_columns(`id`,`col1`,`col2`
                foreach($_POST['col'] as $val){
                    $query_insert .= ",`{$val}`";
                }
    
                //INSERT INTO checklist_stud_columns(`id`,`col1`,`col2`)
                //VALES(1
                $query_insert .= ") VALUES ({$id}";
    
                //INSERT INTO checklist_stud_columns(`id`,`col1`,`col2`)
                //VALES(1,1,1
                foreach($_POST['col'] as $val){
                    $query_insert .= ",1";
                }
    
                //INSERT INTO checklist_stud_columns(`id`,`col1`,`col2`)
                //VALES(1,1,1)
                $query_insert .= ")";
    
                //we have the insert query ready, now executing it
                $result = mysql_query($query_insert) or die(mysql_error());
            }
            elseif($action=='update'){
    
                if(isset($_POST['col'])){
                    //the reason I'm checking if the $_POST['col'] is set is because,
                    //you may have checked previously and updated but now you want to
                    //uncheck all the options, in that case it's necessary
    
                    foreach($_POST['col'] as $val){
    
                        //updating the checked values for that $user_id
                        $result = mysql_query("UPDATE checklist_stud_columns SET `{$val}`=1 WHERE checklist_id={$user_id}") or die(mysql_error());
    
                    }
    
                    //this foreach is to check if you have any unchecked values
                    //that you had previously checked
                    $array_unchecked = array_diff($name,$_POST['col']);
                    foreach($array_unchecked as $val){
                        $result = mysql_query("UPDATE checklist_stud_columns SET `{$val}`=0 WHERE checklist_id={$user_id}") or die(mysql_error());
                    }
                }
                else
                {
                    foreach($name as $val){
                        $result = mysql_query("UPDATE checklist_stud_columns SET `{$val}`=0 WHERE checklist_id={$user_id}") or die(mysql_error());
                    }
                }
            }
    
            if(isset($_POST['col'])){
                //if you had checked atleast one checkbox
                //display with it
                foreach($name as $i=>$n){
                    //Displaying all the checkboxes
                    //setting checked value to 'checked' if it was checked
                    //else setting it to empty ''
                    $checked = in_array($n,$_POST['col'])?'checked':'';
                    echo "<input type=\"checkbox\" name=\"col[]\" value={$n} {$checked}/>{$n} $type[$i]<br />";
                }
            }
            else {
                foreach($name as $i=>$n){
                    echo "<input type=\"checkbox\" name=\"col[]\" value={$n} />{$n} $type[$i]<br />";
                }
            }
    
        }
        else{
            foreach($name as $i=>$n){
                //Another query that would tell us the value
                //of that column for that $user_id
                $query2 = mysql_query("SELECT {$n} FROM {$table} WHERE checklist_id={$user_id}") or die(mysql_error()); 
    
                //$query2 = mysql_query("SELECT `{$n}` FROM {$table} WHERE checklist_id={$user_id}") or die(mysql_error());
                if(mysql_num_rows($query2)!=0){
                    $row2 = mysql_fetch_array($query2);
                    //if the value of that column for that $user_id is 1,
                    //set 'checked' else 'empty'
                    $checked = ($row2[$n]==1)?'checked':'';
                }
                else 
                {
                    $checked = '';
                }
                //display all the checkboxes with
                //the $checked value
                echo "<input type=\"checkbox\" name=\"col[]\" value={$n} {$checked}/>{$n} $type[$i]<br />";
            }
        }
    ?>
    <tr><td colspan="2"><input type="submit" name="submit" value="Update Privileges" /></td></tr>
    </form>
    </html>
    

    注:

    mysql_*は使用しないでください 新しいコードの関数 は維持されなくなり、正式に非推奨になりました赤いボックスを参照してください プリペアドステートメントについて学ぶ 代わりに、PDO を使用してください 、または MySQLi -この記事 どちらを決めるのに役立ちます。 PDOを選択した場合は、こちらが優れたチュートリアルです




    1. ROWNUM =1は、どのような条件下で、既存のスタイルクエリのパフォーマンスを大幅に向上させますか

    2. Mysql_fetch_assocが正しく機能していません

    3. PHPからデータベースにアクセスするための最良の方法は何ですか?

    4. json列のデフォルト値を設定する