我不希望用勺子代码来解决我的问题。我是一个菜鸟,就像荒谬一样。也许只是推动正确的方向或批评,无论如何。我正在为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)){ ?>
描述预期和实际结果:我想从同一个数据库表中提取状态数据,而不需要复制表。
我不知道还有什么要放在这里......我希望这是足够的信息。
如果我正确理解了这个问题,我会这样做:
打破对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列的值来索引返回的数组中的值。
最后一个提示,这是一个可用性的东西。以这种方式做“内容”可能是值得的:
while($row = mysqli_fetch_array($resultSeventeen)){
$options[$row['stateValue']] = $row['stateValue'].' - '.$row['stateName'];
}
//result ['MI'=> 'MI - Michigan]
这样当用户输入MI
或CA
等时,它将有效地查找值,但仍然显示全名。这也是我用过像Months这样的东西的东西。 [1=>'1 - January']
等......当然,那部分完全取决于你。我认为它让用户的生活变得更轻松。
综述
现在你有2个“simular”代码。只有一个不是很好,然后你知道它有效。它完美地完成了它的工作,因此您可以将注意力集中在应用程序的其他部分。如果它碰巧不起作用,你会相当确信故障在别处,所以调试会更容易等等......
它只是一个很好的做法,使功能完成一件事。不是程序代码,它可以很好地处理很多事情并且调试很麻烦。然后,当您想要制作更多数据列表时,即使是根据不相关的数据,您也不必再次触摸该代码。它只是有效。
希望它能帮到你。