Datalist使用[php]代码从一个特定的[mysql]数据库表中提取,但只是第一个 实际上是在拉数据

问题描述 投票:1回答:1

我不希望用勺子代码来解决我的问题。我是一个菜鸟,就像荒谬一样。也许只是推动正确的方向或批评,无论如何。我正在为FUN创建这个项目。它不适用于工作,学校或任何我得到报酬的事情。如果我的问题对您来说显而易见,请保持温和。

-Webpage有多个模式,当用户点击网页的某些部分时会打开这些模态。

- 弹出的引导模式之一显示“提供者”信息的区域。这个模式工作正常。状态字段(状态在田纳西州)显示在通过PHP代码从mysql数据库中提取的过滤数据列表中!呜呜!!! ----图片#1(提供者状态)...我实际上无法发布图像,因为我没有足够的代表。

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

到目前为止,太棒了!!

在初始模态关闭后,我打开另一个模态。当第二个/单独的模态弹出状态(田纳西州等)字段没有过滤列表时,就会出现问题。第一种模式用于提供者的地址,第二种模式用于患者的地址。

- 我试图从同一个数据库表中拉出状态(田纳西州等)数据(字面意思与第一个模态工作的方式相同)。不幸的是,datalist过滤器不能处理第二个模态。我没有收到任何错误,当我点击状态字段时,过滤器实际上从未显示过。 ---- Pic#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>

这是没有解决方法的第二代码。意思是,这个模态不是从重复的表中拉出来的,这是从第一个(工作)表中拉出的。与上面不同的唯一一行是第一行: <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)){ ?>

描述预期和实际结果:我想从同一个数据库表中提取状态数据,而不需要复制表。

我不知道还有什么要放在这里......我希望这是足够的信息。

php mysql mysqli bootstrap-modal datalist
1个回答
0
投票

如果我正确理解了这个问题,我会这样做:

打破对DB的依赖,基本上你试图用这一段代码做太多。

首先创建一个这样的通用函数来构建HTML。此函数需要获取字段的ID以及包含选项标记的值和内容的选项数组。

像这样的东西:

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>

好的是你可以从任何地方获得这个数组。您可以手动创建,也可以从DB创建。例如:

$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]

这样当用户输入MICA等时,它将有效地查找值,但仍然显示全名。这也是我用过像Months这样的东西的东西。 [1=>'1 - January']等......当然,那部分完全取决于你。我认为它让用户的生活变得更轻松。

综述

现在你有2个“simular”代码。只有一个不是很好,然后你知道它有效。它完美地完成了它的工作,因此您可以将注意力集中在应用程序的其他部分。如果它碰巧不起作用,你会相当确信故障在别处,所以调试会更容易等等......

它只是一个很好的做法,使功能完成一件事。不是程序代码,它可以很好地处理很多事情并且调试很麻烦。然后,当您想要制作更多数据列表时,即使是根据不相关的数据,您也不必再次触摸该代码。它只是有效。

希望它能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.