php csv在提交时跳过一行

时间:2016-09-09 08:21:16

标签: php html forms csv strpos

代码似乎存在一些问题,其中一行跳过了结果。

例如,如果我写:642641 结果应该是:“642641”,“testgatan 1” 但相反,它显示:“762755”,“testgatan 2”

我如何修复,以便实际提交输入?

我找到了一个链接供您查看我的意思:http://snaland.com/herestheidnummer/test.html

这是csv:

ID,Gata
"642641","testgatan 1"
"762755","testgatan 2"
"346468","testgatan 3"
"114564","testgatan 4"
"758925","testgatan 5"

我使用了来自Find if a value exist in a CSV file with PHP的PHP代码 - Fred -iii -

并修改如下:

<?php
$search      = $_GET['subject'];
$lines       = file('http://snaland.com/herestheidnummer/anlaggningsnmr.csv');
$line_number = false;

while (list($key, $line) = each($lines) and !$line_number) {
   $line_number = (stripos($line, $search) !== FALSE);

}

if($line_number){

   echo "Found result: " .$line;

}

else{
   echo "Can't find result: " .$search;
}

?>

Html表格:

<form name="form" action="http://snaland.com/herestheidnummer/verifiera.php" method="get">
  <input type="text" name="subject" id="subject" value="000000">
  <input type="submit" value="Submit">
</form>

2 个答案:

答案 0 :(得分:0)

你的问题是while循环中的条件。在检查!$ line_number之前执行对键和列表的赋值。如果你交换这两个条件,它应该工作

while (!$line_number and list($key, $line) = each($lines) ) {
   $line_number = (stripos($line, $search) !== FALSE);
}

答案 1 :(得分:0)

每个都会使数组光标前进,因此当您查找结果时,下一个值已经加载。更多信息http://php.net/manual/en/function.each.php

更简单的解决方案是用以下代码替换你的循环:

for($i = 0; $i<count($lines);$i++){
if(stripos($lines[$i], $search) !== false){
    $line = $lines[$i];
        break;
    }
}

关于if:

if($line){

   echo "Found result: " .$line;

}