Как использовать флажки для получения конкретных данных в базе данных

В последнее время я работал над формой, с помощью которой пользователь может установить флажок, и в результате выбора он отображает информацию о базе данных в таблице.

Я просмотрел вопросы stackoverflow и нашел вопрос, который был почти таким же, а именно:Извлекать данные из базы данных SQL и отображать в таблицах - Отображать определенные данные в соответствии с установленными флажками

Итак, с помощью этой информации и некоторой другой информации из Интернета я начал создавать свой код. Хотя после завершения у меня было несколько ошибок, а именно, мои поля базы данных были дублированы при выводе, данные, которые были у поля, не выводились, и было два предупреждения. После долгих поисков и редактирования / попыток я не смог найти правильного решения, поэтому я задаю этот вопрос здесь.

Прежде чем отобразить свой код, я сначала даю некоторую информацию о флажках, базе данных и таблице / полях (и (маленькое) примечание: это база данных WordPress).

У меня есть 1 база данных с именем xxx_wp1. Эта база данных содержит различные (wordpress) таблицы, но таблица, из которой я хочу получить информацию, называется: wp_participants_database.

Эта таблица содержит различные столбцы (около 15). Хотя для этого примера тестирования я использовал только 3 из 15 столбцов с именами: authorss, research_source и research_title. Я вставил некоторую случайную информацию (3 строки) в эти 3 столбца. Форма, которую я создал, имеет, очевидно, 3 флажка для каждого столбца (таким образом, 1 для авторов, источника исследования и названия).

Основываясь на предыдущей ссылке и некоторой информации WordPress, которую я начал создавать свой код для выбора, это выглядит следующим образом:

<form method="post">
<input type="checkbox" name="columns[]" value="1" /><label for="Authors">Authors</label><br />
<input type="checkbox" name="columns[]" value="2" /><label for="Research Source">Research Source</label><br />
<input type="checkbox" name="columns[]" value="3" /><label for="Research Title">Research Title</label><br />
<input type="submit" name="go" value="Submit"/>
</form>

<?php


$all = false;
$column_names = array('1' => 'Authors', '2'=>'Research Source', '3'=>'Research Title');
$column_entries = isset($_POST['columns']) ? $_POST['columns'] : array();
$sql_columns = array();
foreach($column_entries as $i) {
   if(array_key_exists($i, $column_names)) {
    $sql_columns[] = $column_names[$i];
   }
}

if (empty($sql_columns)) {
 $all = true;
 $sql_columns[] = "*";
} else {
 $sql_columns[] = "authorss,research_source,research_title,";
}
global $wpdb;

//DNI CHECKBOX + ALL
$tmp = $wpdb->get_results( "SELECT ".implode(",", $sql_columns)." FROM wp_participants_database"); 

$result = mysql_query($tmp);
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>";
while( $row = mysql_fetch_assoc($result))
{
    echo "<tr>";  
    echo "<td>" . $row['authorss'] . "</td>";   
    echo "<td>" . $row['research_source'] . "</td>";   
    echo "<td>" . $row['research_title'] . "</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>';


?>
<?php
mysql_close();
?>

Как видите, вопрос немного отличается, потому что он должен подключаться к базе данных Wordpress (глобальные $ wpdb и $ wpdb-> get_results). При наборе этого я думаю, что это также может быть частью проблемы, так как этот get_results уже получает результаты, которые я также получаю позже?

Во всяком случае, во время тестирования я получаю несколько ошибок / неправильного поведения, которые я не могу понять.

Первыми ошибками являются следующие предупреждения:

 - Warning: mysql_query() expects parameter 1 to be string, array given in /home/xxx/domains/mysite.nl/public_html/Recap/wp-content/themes/radiate/templates/pdb-search-new.php on line 32 --- which is this line of code: `$result = mysql_query($tmp);`
 - Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in /home/xxx/domains/mysite.nl/public_html/Recap/wp-content/themes/radiate/templates/pdb-search-new.php on line 43 --- which is this line of code: `while( $row = mysql_fetch_assoc($result))`

Вторая проблема заключается в том, что все столбцы повторяются ДВАЖДЫ даже перед отправкой. Так что это будет означать, что эта строка кода выполняется независимо от того, что:

if (empty($sql_columns)) {
 $all = true;
 $sql_columns[] = "*";
} else {
 $sql_columns[] = "authorss,research_source,research_title,";
}

Когда я отмечаю опцию и нажимаю кнопку отправки, отображается правый столбец (так что все работает), хотя все 3 столбца по-прежнему отображаются (несмотря ни на что), а также выбранный, так что я получил это, если я выбираю первый вариант: authorss research_source research_title Авторы (обратите внимание, что первые 3 взяты из моего определенного, а последний - из моего определенного $ column_names).

Последняя проблема заключается в том, что значения полей столбцов не отображаются, столбцы просто пусты.

Таким образом, вопрос в том, кто-нибудь может дать мне несколько советов о том, что идет не так.

Заранее спасибо!

*****ОБНОВИТЬ*****

Я сделал некоторые корректировки с помощью @Zeusarm

Итак, во-первых, я изменил предупреждения (среди прочего$wpdb->get_results изменено на$wpdb->query) и предупреждения все ушли. По какой-то причине я дал$array_names только их имена (глупо мне), поэтому я изменил его, как вы предложили правильные имена столбцов, как они есть в таблице базы данных. Итак, поле 1,2,3 стало:авторы, research_source и research_title.

Я также добавил другие изменения. Хотя все ошибки исчезли, я по-прежнему получаю все 3 столбца, показанные + 1 дубликат (в зависимости от количества выбранных флажков). Кроме того, я до сих пор не получаю данные базы данных, которые хранятся в столбцах (например, в файле authorss хранятся следующие значения: Барри, Хенк и Николас.).

Код теперь выглядит следующим образом (форма не указана, так как она осталась прежней):

<?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];
        }
    }
    $sql_columns[] = "authorss";
    $sql_columns[] = "research_source";
    $sql_columns[] = "research_title";
} else {
    $all = true;
    $sql_columns[] = "*";
}
global $wpdb;

//DNI CHECKBOX + ALL
$tmp = $wpdb->query( "SELECT ".implode(",", $sql_columns)." FROM wp_participants_database"); 

$result = mysql_query($tmp);
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($result!==false && mysql_num_rows($result)>0){
    while( $row = mysql_fetch_assoc($result)){
        echo "<tr>";  
        echo "<td>" . $row['authorss'] . "</td>";   
    echo "<td>" . $row['research_source'] . "</td>";   
        echo "<td>" . $row['research_title'] . "</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>';
}  

?>
<?php
mysql_close();
?>

***** ОБНОВЛЕНИЕ 2 *****

Итак, я изменил код и, наконец, я получаю данные из базы данных! Так что я думаю, что теперь мне нужно просто работать с wordpress get_results для запросов. Хотя я получаю информацию, у меня все еще есть дубликаты. Когда я перехожу на страницу, сначала у меня есть все 3 дубликата, и получение данных выводится в первые 3 столбца. Когда я выбираю опцию 1 флажок, отображаются правильные данные этого флажка, а другие данные из других флажков нет (так что работает). Хотя, например, когда я выбираю только флажок авторов, данные об авторах отображаются в первом флажке авторов, и отображается только 1 дубликат (а именно «авторы»). Хотя, когда я нажимаю только второй флажок, источник исследования (столбец research_source), данные этого столбца только показываются (что правильно), НО, что данные выводятся в первом столбце авторов и снова, 1 дублируется с правильным столбцом имя, а именно «исследовательский источник».

Но поскольку картинка содержит более 1000 слов, я добавил несколько картинок, чтобы прояснить ее. (извините за ссылки на фотографии, но не хватает 2 репутации, чтобы публиковать фотографии напрямую)

Начальные столбцы / страница (нетронутая):

Только авторы выбраны и представлены:

Оставьте этот, поскольку я могу также загрузить только 2 ссылки с менее чем 10 ...

Только источник исследования выбран и представлен:

Ответы на вопрос(1)

Ваш ответ на вопрос