Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara menggunakan kotak centang untuk mengambil data tertentu dalam database

Saya melihat setidaknya 2 kesalahan dalam kode Anda.

  1. nilai array asosiatif $column_names seharusnya diteruskan sebagai nama bidang, jadi saya berasumsi bahwa itu tidak benar, karena Anda memiliki spasi di dalamnya (dan seperti yang saya tahu wordpress secara default tidak memiliki nama bidang seperti itu.

  2. jika beberapa pilihan disediakan oleh pengguna, Anda menambahkan beberapa nama bidang tambahan ke yang pernah dilewati oleh pengguna dan Anda memiliki titik dua setelahnya sehingga akan menghasilkan kesalahan.

Saya akan menulis ulang kode seperti ini

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

Juga seperti yang Anda katakan $wpdb->get_results sudah mengembalikan hasil - larik jadi itu sebabnya Anda mendapatkan kesalahan. Plus sebelum memanggil mysql_fetch_assoc lebih baik untuk memeriksa apakah parameter yang diteruskan adalah sumber dan jika jumlah baris bukan 0.

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

************ PERBARUI ************

sesuai dengan perubahan terakhir coba kode ini:

<?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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1214 - Jenis tabel yang digunakan tidak mendukung indeks FULLTEXT

  2. Hasilkan karakter alfanumerik acak unik yang panjangnya 7 karakter

  3. Bagaimana saya bisa memilih * dari tabel di MySQL tetapi menghilangkan kolom tertentu?

  4. Penanganan &Pembatasan Koneksi dengan ProxySQL

  5. Kode Kesalahan MySQL:1411. Nilai datetime salah:'' untuk fungsi str_to_date