使用 [php] 代码从一个特定的 [mysql] 数据库 table 中提取数据列表,但实际上只有第一个 <option></option> 提取数据
Datalist pulling from one specific [mysql] database table with [php] code, but only first <option></option> is actually pulling data
我不是希望被填满代码来解决我的问题。我是一个菜鸟,就像可笑的那样。也许只是朝着正确的方向轻推或批评,无论如何。我正在为乐趣创建这个项目。它不适用于工作、学校或任何我得到报酬的事情。如果我的问题对你来说显而易见,请保持温和。
-网页有多个模式,当用户点击网页的某些部分时会打开这些模式。
-弹出的 bootstrap 模式之一显示 "provider" 信息的区域。此模式工作正常。州字段(田纳西州的州)显示在通过 php 代码从 mysql 数据库中提取的过滤数据列表中!呜呜呜!!!
----图片 #1(提供者状态)...我真的不能 post 图片,因为我没有足够的代表。
https://i.postimg.cc/NfD2xRKy/state-field.png
到目前为止,太棒了!!
关闭初始模态后,我打开另一个模态。当 second/separate 模式弹出州(田纳西州等)字段没有过滤列表时,问题就出现了。第一个模态用于提供者的地址,第二个模态用于患者的地址。
-我正在尝试从同一数据库 table 中提取州(田纳西州等)数据(字面上与第一个模式的工作方式相同)。不幸的是,数据列表过滤器不适用于第二个模式。我没有收到任何错误,当我单击状态字段时,过滤器实际上从未出现过。
----图#2(患者状态)
https://i.postimg.cc/mD4Tq6qT/state-field-two.png
我可以通过 在我的数据库中复制 table 来解决这个问题,并将新的 table 命名为“17_state_Pay_To”。第二个模态实际上是这样工作的,但为什么我需要复制数据库 table 才能使其正常工作?
----图 #3(数据库解决方法)
https://i.postimg.cc/P5f36bK0/database-pic.png
每次我想从同一个网页上的同一个 table 中提取时,我是否必须创建/复制一个 table?我将在同一个网页上再次使用状态。这看起来很乏味,而且我这样做的方式可能是错误的。
这是第一个(工作)模态的代码:
<datalist id="box2c2">
<?php while($row = mysqli_fetch_array($resultEleven)){ ?>
<option value="<?php echo $row['stateValue']; ?>"><?php echo $row['stateName']; ?></option>
<?php } ?>
</datalist>
这是第二个没有解决方法的代码。意思是,这个模式不是从重复的 table 中提取的,而是从与第一个(工作)table 相同 table。唯一与上面不同的是第一行:
<datalist id="box5c2">
<?php while($row = mysqli_fetch_array($resultEleven)){ ?>
<option value="<?php echo $row['stateValue']; ?>"><?php echo $row['stateName']; ?></option>
<?php } ?>
</datalist>
对于第二个模式的解决方法,我只更改了这行代码以从重复的 table:
中提取
<?php while($row = mysqli_fetch_array($resultSeventeen)){ ?>
描述预期和实际结果:
我想从同一个数据库 table 中提取状态数据,而无需复制 table.
我不知道还能在这里放什么...我希望这些信息足够了。
如果我正确理解问题,我会这样做:
打破对数据库的依赖,基本上你试图用这段代码做太多事情。
首先像这样创建一个通用函数,以构建您的 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($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);
所以你会看到这给了你更多的灵活性,并且减少了重复。
当然,您必须循环遍历数据 2 倍而不是 1 倍,但除非您处理数千行的 10 行,否则我怀疑您会注意到它。当您从中注意到性能问题时,您会担心更多的查询时间。
即使您现有的数组中有一堆 "junk"。
$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 ] )
Returns the values from a single column of the input, identified by the column_key. Optionally, an index_key may be provided to index the values in the returned array by the values from the index_key column of the input array.
最后一个提示,这是一个可用性问题。这样做 "content" 可能是值得的:
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" 代码。只拥有一个岂不是很好,然后你就知道它有效了。它完美地完成了工作,因此您可以将注意力集中在应用程序的其他部分。如果它碰巧不起作用,您将相当有信心故障出在其他地方,因此调试会更容易等...
制作只做一件事的函数是一种很好的做法,嗯。不是做很多事情很糟糕并且调试起来一团糟的过程代码。然后当你想制作更多的数据列表时,即使是不相关的数据,你也不必再触及该代码。它只是工作。
希望对你有帮助。
我不是希望被填满代码来解决我的问题。我是一个菜鸟,就像可笑的那样。也许只是朝着正确的方向轻推或批评,无论如何。我正在为乐趣创建这个项目。它不适用于工作、学校或任何我得到报酬的事情。如果我的问题对你来说显而易见,请保持温和。
-网页有多个模式,当用户点击网页的某些部分时会打开这些模式。
-弹出的 bootstrap 模式之一显示 "provider" 信息的区域。此模式工作正常。州字段(田纳西州的州)显示在通过 php 代码从 mysql 数据库中提取的过滤数据列表中!呜呜呜!!! ----图片 #1(提供者状态)...我真的不能 post 图片,因为我没有足够的代表。
https://i.postimg.cc/NfD2xRKy/state-field.png
到目前为止,太棒了!!
关闭初始模态后,我打开另一个模态。当 second/separate 模式弹出州(田纳西州等)字段没有过滤列表时,问题就出现了。第一个模态用于提供者的地址,第二个模态用于患者的地址。
-我正在尝试从同一数据库 table 中提取州(田纳西州等)数据(字面上与第一个模式的工作方式相同)。不幸的是,数据列表过滤器不适用于第二个模式。我没有收到任何错误,当我单击状态字段时,过滤器实际上从未出现过。 ----图#2(患者状态)
https://i.postimg.cc/mD4Tq6qT/state-field-two.png
我可以通过 在我的数据库中复制 table 来解决这个问题,并将新的 table 命名为“17_state_Pay_To”。第二个模态实际上是这样工作的,但为什么我需要复制数据库 table 才能使其正常工作? ----图 #3(数据库解决方法)
https://i.postimg.cc/P5f36bK0/database-pic.png
每次我想从同一个网页上的同一个 table 中提取时,我是否必须创建/复制一个 table?我将在同一个网页上再次使用状态。这看起来很乏味,而且我这样做的方式可能是错误的。
这是第一个(工作)模态的代码:
<datalist id="box2c2">
<?php while($row = mysqli_fetch_array($resultEleven)){ ?>
<option value="<?php echo $row['stateValue']; ?>"><?php echo $row['stateName']; ?></option>
<?php } ?>
</datalist>
这是第二个没有解决方法的代码。意思是,这个模式不是从重复的 table 中提取的,而是从与第一个(工作)table 相同 table。唯一与上面不同的是第一行:
<datalist id="box5c2">
<?php while($row = mysqli_fetch_array($resultEleven)){ ?>
<option value="<?php echo $row['stateValue']; ?>"><?php echo $row['stateName']; ?></option>
<?php } ?>
</datalist>
对于第二个模式的解决方法,我只更改了这行代码以从重复的 table:
中提取
<?php while($row = mysqli_fetch_array($resultSeventeen)){ ?>
描述预期和实际结果: 我想从同一个数据库 table 中提取状态数据,而无需复制 table.
我不知道还能在这里放什么...我希望这些信息足够了。
如果我正确理解问题,我会这样做:
打破对数据库的依赖,基本上你试图用这段代码做太多事情。
首先像这样创建一个通用函数,以构建您的 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($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);
所以你会看到这给了你更多的灵活性,并且减少了重复。
当然,您必须循环遍历数据 2 倍而不是 1 倍,但除非您处理数千行的 10 行,否则我怀疑您会注意到它。当您从中注意到性能问题时,您会担心更多的查询时间。
即使您现有的数组中有一堆 "junk"。
$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 ] )
Returns the values from a single column of the input, identified by the column_key. Optionally, an index_key may be provided to index the values in the returned array by the values from the index_key column of the input array.
最后一个提示,这是一个可用性问题。这样做 "content" 可能是值得的:
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" 代码。只拥有一个岂不是很好,然后你就知道它有效了。它完美地完成了工作,因此您可以将注意力集中在应用程序的其他部分。如果它碰巧不起作用,您将相当有信心故障出在其他地方,因此调试会更容易等...
制作只做一件事的函数是一种很好的做法,嗯。不是做很多事情很糟糕并且调试起来一团糟的过程代码。然后当你想制作更多的数据列表时,即使是不相关的数据,你也不必再触及该代码。它只是工作。
希望对你有帮助。