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

チェックボックスを使用してデータベース内の特定のデータを取得する方法

    コードに少なくとも2つのエラーがあります。

    1. $ column_namesの連想配列の値はフィールド名として渡されることになっているので、スペースがあるので正しくないと思います(そして、私が知っているように、wordpressにはデフォルトでそのようなフィールド名がありません。

    2. ユーザーが選択したものがある場合は、ユーザーから渡されたフィールド名にフィールド名を追加し、その後にコロンを付けるとエラーが発生します。

    このようにコードを書き直します

    <?php
    $all = false;
    $column_names = array('1' => '`field1`', '2' => '`field2`', '3' => '`field3`');
    if(isset($_POST['columns'])){
        $column_entries = $_POST['columns'];
        $sql_columns = array();
        foreach($column_entries as $i) {
            if(array_key_exists($i, $column_names)) {
                $sql_columns[] = $column_names[$i];
            }
        }
        $sql_columns[] = "authorss";
        $sql_columns[] = "research_source";
        $sql_columns[] = "research_title";
    } else {
        $all = true;
        $sql_columns[] = "*";
    }
    

    また、あなたが言ったように、$ wpdb-> get_resultsはすでに結果-配列を返すので、エラーが発生するのはそのためです。さらに、mysql_fetch_assocを呼び出す前に、渡されたパラメータがリソースであるかどうか、および行数が0でないかどうかを確認することをお勧めします。

    if($result!==false && mysql_num_rows($result)>0){
        while( $row = mysql_fetch_assoc($result)){
            ...
        }
    }  
    

    *********** 更新***********

    最後の変更によると、このコードを試してください:

    <?php
    $all = false;
    $column_names = array('1' => '`authorss`', '2' => '`research_source`', '3' => '`research_title`');
    if(isset($_POST['columns'])){
        $column_entries = $_POST['columns'];
        $sql_columns = array();
        foreach($column_entries as $i) {
            if(array_key_exists($i, $column_names)) {
                $sql_columns[] = $column_names[$i];
            }
        }
    } else {
        $all = true;
        $sql_columns[] = "authorss";
        $sql_columns[] = "research_source";
        $sql_columns[] = "research_title";
    }
    
    global $wpdb;
    
    //DNI CHECKBOX + ALL
    $tmp = $wpdb->get_results( "SELECT ".implode(",", $sql_columns)." FROM wp_participants_database"); 
    
    
    echo "<table border='1' style='width:450px'>
        <tr>
        <th>authorss</th>
        <th>research_source</th>
        <th>research_title</th>";
    foreach($column_names as $k => $v) { 
        if($all || (is_array($column_entries) && in_array($k, $column_entries)))
            echo "<th>$v</th>";
    }
    echo "</tr>";
    
    if(count($tmp)>0){
        for($i=0;$i<count($tmp);$i++){
            echo "<tr>";  
                foreach($tmp[$i] as $key=>$value){
                    echo "<td>" . $value . "</td>";   
                }
                foreach($column_names as $k => $v) { 
                    if($all || (is_array($column_entries) && in_array($k, $column_entries))) {
                        echo "<th>".$row[$v]."</th>";
                    }
                }
            echo "</tr>";
        }
    }
    
    echo '</table>';
    ?>
    



    1. MariaDBの日付から月の名前を取得する3つの方法

    2. データベーステーブル情報を取得するためのストアドプロシージャ

    3. 列の順序が考慮されていない(設定されている)一意のインデックスを作成する方法

    4. ユニオンを使用したmysqlの順序付けが機能していないようです