我在网页上有一个简单的下拉框。它是美国的所有州。当用户选择一个州时 我想让一个PHP脚本只返回用户所选状态的公司(作为HTML)。
我有一个csv文件,内容如下:
STATEID,公司,联系人,电话的时候,addy1
3,abc mining,George,555 - 555 - 1234,2012年6月6日,“布朗克斯,纽约”
2,xyz mining,Fred,555-555-2345,2012年6月7日,“华盛顿州西雅图” 0,我的公司,我,555-555-3456,2012年6月8日,“Eugene,OR”
3,贵公司,你,555 - 555 - 4567,2012年6月9日,“布朗克斯,纽约”
以及之前和之后......
使用上面的方法,通过HTML表返回只有stateId = 3的数据(或csv中的行)。
所以...我已经看到很多方法可以使用fgetcsv,但我怎样才能解决上述问题呢?
我原以为你抓住下拉列表的选定索引值,将其作为条件传递,遍历每一行,只输出状态ID为3的那些......
理想情况下,我想在表格中输出它们,但列表或直接文字都可以。
相对较新的PHP(自从我看过它已经10多年了......) - 我真的很感激帮助。
我知道......数据库会更容易 - 但我已经完全控制了csv,而宁愿暂时继续这条路线。
<?php
echo "<table>\n";
$row = 0;
$handle = fopen("mycsvfile.csv", "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($row == 0) {
// column line
$num = count($data);
echo "<thead>\n<tr>";
$row++;
for ($c=0; $c < $num; $c++) {
echo "<th>" . $data[$c] . "</th>";
}
echo "</tr>\n</thead>\n\n<tbody>";
} else {
// non-header lines
$num = count($data);
echo "<tr>";
$row++;
for ($c=0; $c < $num; $c++) {
echo "<td>" . $data[$c] . "</td>";
}
echo "</tr>\n";
}
}
fclose($handle);
echo "</tbody>\n</table>";
?>
在这一点之后我开始失去它...这只是输出所有数据 - 我仍然需要它通过变量显示用户选择状态的数据,而不显示未选择的其他状态的NOT输出行
我是否使用strpos(),explode(),split()...我是一名dotNet程序员,几乎没有PHP经验 - 我希望学习。这是我的第一个项目 - 所以放轻松吧!我不知道并且没有使用过PHP函数/方法 - 所以我不熟悉它们。 ;)
我已经启动并运行了XAMPP,所以我并非完全无望。
答案 0 :(得分:2)
这是我最终做的......
<?php
$selectedSt = $_GET["states"];// get method - should clean the data...
$row = 0;
$handle = fopen("mycsv.csv", "r");//open file
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if ($row == 0) {//skip first row (headers)
$row++;}
else {
$stAbbrev = $data[0];
if ($stAbbrev == $selectedSt){//show only selected state
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
if ($c==0){}
else{
if ($data[$c]==""){}//if empty line
else{echo $data[$c]."<br />";}}}//write array item
echo "<br />";}}}//end it all with some white space
fclose($handle);
?>
答案 1 :(得分:1)
我将假设您的数据在数组中。如何做到这一点的练习留待读者阅读。
$state_data = array(
array(
'id' => '3',
'company' => 'abc mining',
'contact' => 'George',
'phone' => '555-555-1234',
'when' => 'june 6 2012',
'addy' => 'Bronx,NY' ),
array(
'id' => '2',
'company' => 'xyz mining',
'contact' => 'Fred',
'phone' => '555-555-2345',
'when' => 'june 7 2012',
'addy' => 'Seattle,WA' ),
...
);
然后我只需要过滤掉所有ID为3的子阵列。
function filter_out( $var ) {
return ('3' == $var['id']);
}
$my_states = array_filter( $state_data, "filter_out" );
最后,输出:
<table summary="state data">
<tr>
<th>ID</th>
<th>Company</th>
<th>Contact</th>
<th>Phone</th>
<th>When</th>
<th>Addy</th>
</tr>
<?php
foreach( $my_states as $my_state ) {
?>
<tr>
<td><?php echo( $my_state['id'] ); ?></td>
<td><?php echo( $my_state['company'] ); ?></td>
<td><?php echo( $my_state['contact'] ); ?></td>
<td><?php echo( $my_state['phone'] ); ?></td>
<td><?php echo( $my_state['when'] ); ?></td>
<td><?php echo( $my_state['addy'] ); ?></td>
</tr>
<?php } ?>
</table>
答案 2 :(得分:0)
您需要一个循环来按行描述文件here。在循环中,每行将作为具有字段值的数组返回。测试用户选择的stateId,如果匹配,则将数组存储在另一个数组中。至于输出,再次循环,这次通过结果数组,在你认为合适的情况下将html标记包装在每个元素周围,并将该标记连接成一个字符串。将此字符串发送给客户端。