Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser les cases à cocher pour récupérer des données spécifiques dans une base de données

Je vois au moins 2 erreurs dans votre code.

  1. les valeurs du tableau associatif $column_names sont censées être transmises en tant que noms de champ, donc je suppose qu'elles ne sont pas correctes, car vous avez des espaces dedans (et comme je sais que wordpress par défaut n'a pas de tels noms de champ.

  2. si une sélection est fournie par l'utilisateur, vous ajoutez des noms de champs supplémentaires à ceux qui sont passés par l'utilisateur et vous avez deux-points après eux, ce qui générera une erreur.

Je réécrirais le code comme ceci

<?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[] = "*";
}

De plus, comme vous l'avez dit, $wpdb->get_results renvoie déjà les résultats - tableau, c'est pourquoi vous obtenez les erreurs. De plus avant d'appeler mysql_fetch_assoc il vaut mieux vérifier si le paramètre passé est recource et si le nombre de lignes n'est pas 0.

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

*********** MISE À JOUR ***********

selon les dernières modifications, essayez ce code :

<?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>';
?>