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

Datalist使用[php]代码从一个特定的[mysql]数据库表中提取,但只在第一个<;选项></选项>;实际上是在提取数据,php,mysql,mysqli,bootstrap-modal,datalist,Php,Mysql,Mysqli,Bootstrap Modal,Datalist,我不想被填鸭式地输入代码来解决我的问题。我是个笨蛋,可笑的是。也许只是朝正确的方向轻推或批评,不管怎样。我创建这个项目是为了好玩。这不是为了工作、上学或任何我得到报酬的事情。如果你觉得我的问题很明显,请温柔一点 -网页有多个模态,当用户单击网页的某些部分时,这些模态会打开 -弹出的引导模式之一显示了“提供者”信息的区域。此模式工作正常。state字段(田纳西州的state)显示在通过php代码从mysql数据库提取的过滤数据列表中!呜呼!!! ----图1(提供商状态)。。。我真的不能发布图片,

我不想被填鸭式地输入代码来解决我的问题。我是个笨蛋,可笑的是。也许只是朝正确的方向轻推或批评,不管怎样。我创建这个项目是为了好玩。这不是为了工作、上学或任何我得到报酬的事情。如果你觉得我的问题很明显,请温柔一点

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

-弹出的引导模式之一显示了“提供者”信息的区域。此模式工作正常。state字段(田纳西州的state)显示在通过php代码从mysql数据库提取的过滤数据列表中!呜呼!!! ----图1(提供商状态)。。。我真的不能发布图片,因为我没有足够的代表

到目前为止,太棒了

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

-我试图从同一个数据库表中提取州(田纳西州等)数据(与第一个模式的工作方式完全相同)。不幸的是,datalist筛选器在第二个模式上不起作用。我没有收到任何错误,当我点击state字段时,过滤器根本就不会出现。 ----图2(患者状态)

我可以通过复制数据库中的表来解决这个问题,并将新表命名为“17_state_Pay_to”。第二个模式实际上是这样工作的,但是为什么我需要复制数据库表以使其正常工作呢? ----图3(数据库解决方案)

每次我想从同一网页上的同一个表中提取数据时,是否必须创建/复制一个表?我将在同一个网页上再次使用国家。这看起来很乏味,而且我做这件事的方式可能是错误的

这是第一个(工作)模式的代码:

这是第二个代码,没有解决方法。也就是说,此模式不是从复制表中提取,而是从与第一个(工作)表相同的表中提取。唯一不同于上面的一行是第一行:

对于第二个模式的解决方案,我只将这行代码更改为从复制的表中提取:

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


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

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

打破对数据库的依赖,基本上你试图用这一段代码做太多的事情

首先创建一个类似这样的通用函数来构建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>
对于第二个问题:

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

echo createDataList('box5c2', $options);
所以你可以看到,这给了你更多的灵活性,减少了重复

当然,你必须在数据上循环2x而不是1x,但是除非你处理的是10行的数千行,否则我怀疑你会注意到它。当您从中注意到性能问题时,您将更加担心查询次数

即使您有一个包含一堆“垃圾”的现有阵列

您可以使用它快速格式化

  $data = array_column($array, 'stateValue', 'stateName');
  //result: ['MI' => 'Michigan', ...]
array\u列(array$input,mixed$column\u key[,mixed$index\u key=NULL]

返回由column_键标识的单个输入列的值。可选地,可以提供索引键,以通过来自输入数组的索引键列的值来索引返回数组中的值

最后一个提示,这是一个可用性问题。这样做“内容”可能是值得的:

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

//result ['MI'=> 'MI - Michigan]
这样,当用户在
MI
CA
等中键入时,它将有效地按值查找,但仍会显示全名。这是我在几个月前用过的东西<代码>[1=>'1-1月]等。。。当然,这部分完全取决于你。我只是觉得这会让用户的生活轻松一点

夏季

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

这只是一个很好的做法,使功能做一件事,嗯。不是程序代码,它做很多事情都很糟糕,调试起来很混乱。然后,当您想要制作更多的数据列表时,即使是从无关的数据中,您也不必再接触该代码。它只是工作


希望对您有所帮助。

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

打破对数据库的依赖,基本上你试图用这一段代码做太多的事情

首先创建一个类似这样的通用函数来构建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>
对于第二个问题:

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

echo createDataList('box5c2', $options);
所以你可以看到,这给了你更多的灵活性,减少了重复

允许您在数据上循环2x而不是1x,但除非您的de