PHP Как сделать выпадающий с данными базы данных - PullRequest
0 голосов
/ 28 августа 2018

Итак, у меня есть database, и в нем есть столбец с именем selectedDates. В этом столбце есть строка со значениями

2018-08-22
2018-08-15
2018-08-20

Имейте в виду, что это 3 набора дат, но в одной строке. Как мне сделать тег / выпадающий список с этими тремя значениями. Возможно ли это сделать? Если потребуется дополнительная информация, дайте мне знать, и я отредактирую.

Ниже приведен мой код для того, чтобы он делал раскрывающиеся опции в одном столбце, но в разных строках. Такие как

 Column 1
Row 1 -  Dog
Row 2 - Cat
Row 3 - Mouse

Мне нужно, чтобы это было похоже на

Column 1 
Row 1 - Dog,Cat,Mouse 

, а затем есть варианты выпадающего списка, как у мыши с кошкой

пример кода ниже столбца 1, 3 разных строки

 <?php
$con = new mysqli('localhost', 'root', '', 'races');

if($con->connect_errno) {
// error reporting here
}

$result = $con->query("SHOW TABLES");

if($result->num_rows > 0) {
echo '<select id="myTable" onchange="myFunction()">';
while($row = $result->fetch_array(MYSQLI_NUM)) {
    echo '<option value="Test" name="SelectedDate">' . $row[0] . '</option>';
}
echo '</select>';
} ?>

редактировать для ответа на комментарий Пример базы данных

Id | Info | SelectedDates 
1    hi    2018-18,2018-19 
2    hi    2018-20,2018-21 

В приведенном вами коде в моем примере это только создаст раскрывающийся список с идентификатором 1, но если бы у меня была другая строка, например с идентификатором 2, могу ли я изменить $row[0] на $row[1], чтобы мой раскрывающийся список отображал 2-ю строку выбранных дат?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018
  • Если вы хотите проверить соединение без явной проверки свойства connect_errno, вы можете просто проверить значение false $ con.
  • Вы должны указать точные столбцы, к которым вы собираетесь обращаться из вашего набора результатов. Если вы ориентируетесь только на одну строку, запросите только эту строку.
  • В качестве более краткого синтаксиса вы можете удалить > 0 и проверить, не является ли ложное значение $result->num_rows.
  • Если вы хотите идентифицировать столбцы набора результатов по индексу, вы можете использовать $result->fetch_row() (снова более короткий синтаксис)
  • myTable - это недопустимое значение идентификатора для вашего тега <select>, поскольку оно не является "таблицей". Я не могу предложить лучший вариант, потому что я не знаю, какова ваша большая структура формы.
  • <option> не принимают атрибута name, который идет в родительском теге <select>.
  • Установка статического атрибута value для Test приведет к тому, что все опции будут иметь одно и то же значение: Test (очевидно, это не имеет смысла). Фактически, если вам не нужно переформатировать / изменить значение даты, вообще не пишите атрибут value; просто положитесь на текст опции, чтобы содержать значение.

Непроверенное предложение: (при условии, что вы обрабатываете только одну строку данных)

if (!$con = new mysqli('localhost', 'root', '', 'races')) {
    // connection error
} elseif (!$result = $con->query("SELECT selectedDates FROM `your_table` WHERE id = " . (int)$id)) {
    // query syntax error
} elseif (!$row = $result->fetch_row()) {
    // possible logic error, no row found
} else {
    echo '<select id="myTable" name="SelectedDate" onchange="myFunction()">';
    foreach (explode(",", $row[0]) as $date) {
        echo "<option>$date</option>";
    }
    echo "</select>";
}
0 голосов
/ 28 августа 2018

Вы говорите, что у вас должны быть все даты в одном столбце, почему?

Не является ли это заблуждением базы данных? Если вам нужно несколько строк для одного значения, у вас должна быть таблица с «id | selectedDate», чтобы избежать проблемы, о которой вы говорите.

Если вы должны продолжать в том же духе, попробуйте посмотреть на это: https://secure.php.net/manual/fr/function.explode.php

Надеюсь, это поможет.

...