sql >> Database teknologi >  >> RDS >> Mysql

Sådan bruger du afkrydsningsfelter til at hente specifikke data i en database

Jeg ser mindst 2 fejl i din kode.

  1. $column_names associative matrixværdier formodes at blive sendt som feltnavne, så jeg antager, at de ikke er korrekte, da du har mellemrum i dem (og som jeg ved, at wordpress som standard ikke har sådanne feltnavne.

  2. hvis nogle valg er angivet af brugeren, tilføjer du nogle ekstra feltnavne til den ene gang, som sendes af brugeren, og du har et kolon efter dem, så det vil generere en fejl.

Jeg ville omskrive koden sådan her

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

Også som du har sagt, returnerer $wpdb->get_results allerede resultaterne - array, så det er derfor, du får fejlene. Og før du kalder mysql_fetch_assoc, er det bedre at kontrollere, om den beståede parameter er recource, og om antallet af rækker ikke er 0.

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

********** OPDATERING **********

prøv denne kode i henhold til de seneste ændringer:

<?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. Indsæt og sæt værdi med max()+1 problemer

  2. Returner rækker, der indeholder ikke-alfanumeriske tegn i SQL Server

  3. pandaer - Sammenfletning på strengkolonner virker ikke (fejl?)

  4. Sådan løses Problemet med godkendelsesplugin 'caching_sha2_password' kunne ikke indlæses