Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwendung von Kontrollkästchen zum Abrufen bestimmter Daten in einer Datenbank

Ich sehe mindestens 2 Fehler in Ihrem Code.

  1. Die assoziativen Array-Werte von $column_names sollen als Feldnamen übergeben werden, daher gehe ich davon aus, dass sie nicht korrekt sind, da Sie Leerzeichen enthalten (und wie ich weiß, hat WordPress standardmäßig keine solchen Feldnamen.

  2. Wenn der Benutzer eine Auswahl bereitstellt, fügen Sie einige zusätzliche Feldnamen hinzu, die vom Benutzer übergeben werden, und hinter ihnen steht ein Doppelpunkt, sodass ein Fehler generiert wird.

Ich würde den Code so umschreiben

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

Wie Sie gesagt haben, gibt $wpdb->get_results bereits die Ergebnisse zurück - Array, deshalb erhalten Sie die Fehler. Außerdem ist es besser, vor dem Aufruf von mysql_fetch_assoc zu prüfen, ob der übergebene Parameter recource ist und ob die Anzahl der Zeilen nicht 0 ist.

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

*********** AKTUALISIEREN ************

nach den letzten Änderungen versuchen Sie diesen 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>';
?>