sql >> Database >  >> RDS >> Mysql

Selectievakjes gebruiken om specifieke gegevens in een database op te halen

Ik zie minimaal 2 fouten in je code.

  1. de associatieve array-waarden van $column_names zouden moeten worden doorgegeven als veldnamen, dus ik neem aan dat ze niet correct zijn, omdat er spaties in staan ​​(en zoals ik weet heeft WordPress dergelijke veldnamen standaard niet.

  2. als de gebruiker een selectie heeft gemaakt, voegt u een aantal extra veldnamen toe aan de veldnamen die door de gebruiker zijn doorgegeven en heeft u een dubbele punt erna zodat er een fout wordt gegenereerd.

Ik zou de code zo herschrijven

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

Ook zoals je hebt gezegd, retourneert $wpdb->get_results al de resultaten - array, dus daarom krijg je de fouten. En voordat u mysql_fetch_assoc aanroept, is het beter om te controleren of de doorgegeven parameter recource is en of het aantal rijen niet 0 is.

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

*********** UPDATE **********

volgens de laatste wijzigingen probeer deze 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>';
?>



  1. 2 manieren om te converteren tussen decimaal en hexadecimaal in MySQL

  2. Hoe kan ik commit/rollback voor MySQL in PHP implementeren?

  3. Kolomnaam ophalen in plaats van kolomwaarde

  4. Assemblage 'Microsoft.SqlServer.Types' versie 10 of hoger kon niet worden gevonden