Datalist извлекает данные из одной конкретной таблицы базы данных [mysql] с помощью кода [php], но только первый фактически извлекает данные

#php #mysql #mysqli #bootstrap-modal #datalist

#php #mysql #mysqli #bootstrap-модальный #datalist

Вопрос:

Я не хочу, чтобы меня кормили кодом с ложечки, чтобы решить мою проблему. Я нуб, как это ни смешно. Может быть, просто подталкивание в правильном направлении или критика, что угодно. Я создаю этот проект для РАЗВЛЕЧЕНИЯ. Это не для работы, учебы или чего-либо, за что мне платят. Пожалуйста, будьте осторожны, если мой вопрос кажется вам очевидным.

-Веб-страница имеет несколько модалов, которые открываются, когда пользователь нажимает на определенные части веб-страницы.

-Один из всплывающих модалов начальной загрузки показывает область для информации о «поставщике». Этот модал работает правильно. Поле состояния (состояние, как в штате Теннесси) отображается в отфильтрованном datalist, извлеченном из базы данных mysql с помощью php-кода! У-у-у!!! —-Рис. #1 (состояние поставщика) … Я буквально не могу публиковать изображения, потому что у меня недостаточно репутации.

https://i.postimg.cc/NfD2xRKy/state-field.png

Пока все отлично!!

После закрытия начальной модальности я открываю другую модальность. Проблема возникает, когда это второе / отдельное модальное всплывающее поле состояния (Теннесси и т. Д.) Не Имеет отфильтрованного списка. Первый модальный был для адреса поставщика, а этот второй модальный будет для адреса пациента.

-Я пытаюсь извлечь данные о состоянии (Теннесси и т. Д.) Из той же таблицы базы данных (буквально так же, как работает 1-й модальный). К сожалению, фильтр datalist не работает с этим вторым модальным. Я не получаю никаких ошибок, фильтр буквально просто не отображается, когда я нажимаю в поле состояния. —-Рис. #2 (состояние пациента)

https://i.postimg.cc/mD4Tq6qT/state-field-two.png

Я смог выполнить обходной путь, дублируя таблицу в своей базе данных и просто назвал новую таблицу «17_state_Pay_To». Второй модальный метод буквально работает таким образом, но зачем мне дублировать таблицу базы данных, чтобы заставить ее работать должным образом? —-Рис. 3 (обходной путь базы данных)

https://i.postimg.cc/P5f36bK0/database-pic.png

Должен ли я создавать / дублировать таблицу каждый раз, когда я хочу извлечь данные из одной и той же таблицы на одной и той же веб-странице? Я собираюсь использовать состояние еще раз на этой же веб-странице. Это кажется утомительным, и то, как я это делаю, вероятно, неправильно.

Это код для 1-го (рабочего) модального:
<datalist id="box2c2">
<?php while($row = mysqli_fetch_array($resultEleven)){ ?>
<option value="<?php echo $row['stateValue']; ?>"><?php echo $row['stateName']; ?></option>
<?php } ?>
</datalist>

Это код для 2-го без обходного пути.Это означает, что этот модал извлекается не из дублированной таблицы, а из той же таблицы, что и 1-я (рабочая) таблица. Единственная строка, которая отличается от приведенной выше, — это первая строка:
<datalist id="box5c2">
<?php while($row = mysqli_fetch_array($resultEleven)){ ?>
<option value="<?php echo $row['stateValue']; ?>"><?php echo $row['stateName']; ?></option>
<?php } ?>
</datalist>

Для обхода второго модального я только изменил эту строку кода на извлечение из дублированной таблицы:
<?php while($row = mysqli_fetch_array($resultSeventeen)){ ?>

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

Я не знаю, что еще здесь добавить … Я надеюсь, что этой информации достаточно.

Комментарии:

1. ctrl k ваш друг для форматирования кода. Просто к вашему сведению

2. Может быть полезно просмотреть исходный код, сгенерированный тем, который не работает. Он вообще что-нибудь производит? Возможно, у вас нет данных для его создания, проблема с запросом и т. Д…

Ответ №1:

Если я правильно понял вопрос, это то, что я бы сделал:

Разорвите зависимость от БД, по сути, вы пытаетесь сделать слишком много с этим одним фрагментом кода.

Сначала создайте общую функцию, подобную этой, для создания вашего HTML. Эта функция должна принимать идентификатор поля и массив опций, которые содержат значение и содержимое тега option .

Что-то вроде этого:

 function createDataList($id, array $options){
   $html = ['<datalist id="'.$id.'">'];

   foreach($options as $value=>$content){ ?>
        $html[] = '<option value="'.$value.'">'.$content.'</option>';
   } 

   $html[] = '</datalist>';

   return implode("n", $options);
}
  

Затем, когда вам нужно его использовать, вы можете передать массив следующим образом:

  //the "value" should be unique so we can use that for the key,
 //then the other is what I like to call the "content"
 // [value=>content, value=>content]

 $options= ['foo'=>'This is foo', ...];
 echo createDataList('test', $options);
  

Ожидаемый результат:

  <datalist id="test">
 <option value="foo">This is foo</option>
 ...
 </datalist>
  

Приятно то, что вы можете получить этот массив из любого места. Вы можете сделать это вручную, вы можете сделать это из БД. Например:

 $options= [];
while($row = mysqli_fetch_array($resultEleven)){ 
     $options[$row['stateValue']] = $row['stateName'];
}

echo createDataList('box2c2', $options);
  

И для второго:

 $options= [];
while($row = mysqli_fetch_array($resultSeventeen)){ 
     $options[$row['stateValue']] = $row['stateName'];
}

echo createDataList('box5c2', $options);
  

Итак, вы видите, что это дает вам гораздо больше гибкости и намного меньше дублирования.

Конечно, вам нужно перебирать данные 2x вместо 1x, но если вы не работаете с 10 тысячами строк, я сомневаюсь, что вы это заметите. К тому времени, когда вы заметите проблемы с производительностью из-за этого, вы будете больше беспокоиться о времени запросов.

Даже если у вас есть существующий массив с кучей «мусора» в нем.

   $array = [['stateValue'=>'MI','stateName'=>'Michigan'], [...]];
  

Вы можете использовать это для быстрого форматирования.

   $data = array_column($array, 'stateValue', 'stateName');
  //result: ['MI' => 'Michigan', ...]
  

array_column ( array $input , mixed $column_key [, mixed $index_key = NULL ] )

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

https://www.php.net/manual/en/function .array-column.php

Последний совет, и это вопрос удобства использования. Возможно, стоит сделать «содержимое» таким образом:

 while($row = mysqli_fetch_array($resultSeventeen)){ 
     $options[$row['stateValue']] = $row['stateValue'].' - '.$row['stateName'];
}

//result ['MI'=> 'MI - Michigan]
  

Таким образом, когда пользователь вводит MI или CA и т. Д. он будет эффективно искать по значению, но все равно покажет им полное имя. Это то, что я использовал и с такими вещами, как месяцы. [1=>'1 - January'] и т.д… Но, конечно, эта часть полностью зависит от вас. Я просто думаю, что это немного облегчает жизнь пользователю.

Лето

Прямо сейчас у вас есть 2 части «simular» кода. Разве не было бы неплохо иметь только один, тогда вы знаете, что это работает. Он отлично справляется со своей задачей, и поэтому вы можете сосредоточить свое внимание на других частях приложения. Если это не сработает, вы будете достаточно уверены, что ошибка лежит в другом месте, поэтому отладка будет проще и т.д…

Это просто хорошая практика для создания функций, которые делают что-то одно, хорошо. Не процедурный код, который плохо выполняет многие вещи и является беспорядком для отладки. Затем, когда вы захотите создать больше Datalists, даже из несвязанных данных, вам никогда не придется снова прикасаться к этому коду. Это просто работает.

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

Комментарии:

1. Я буквально понятия не имел, что существует функция с именем createDataList … lol, я собираюсь проверить ваш массив прямо сейчас. Большое вам спасибо за вашу помощь. Я поддержал ваш ответ, но в нем говорилось, что моя репутация слишком низкая, чтобы быть публично признанной или что-то в этом роде. Например, тикер не перешел к одному, но вы получили репутацию.

2. I literally had no idea there was a function called createDataList — не было сказано, что я это изобрел. Вы тоже можете создать его….

3. Бум! … и вот так, ты гений. 🙂 Большое спасибо за ваше объяснение. Мне еще многому нужно научиться, но PHP, безусловно, самый забавный язык на данный момент. Лучший ответ, который был нажат!

4. Я занимаюсь PHP около 11 лет, изучил его в 2008 году, получил свою первую профессиональную работу в 2010 году (после того, как я получил своих партнеров). Раньше я занимался автомобильным производством. Но я много возился с программированием, таким как Flash Actionscript, Director Lingo (мигает забытый брат, когда он еще был macromeda), Моддинг для различных игр и т. Д… Я также художник с классическим образованием, птицу в моем профиле я сделал вручную в Photoshop. В любом случае, рад, что смог помочь. Программирование — прекрасный способ выразить креативность. Моя работа заключается в буквальном преобразовании 0 в 1.