2016-09-09 2 views
0

Кажется, что есть проблема с кодом, в котором результат пропускается с одной строкой.php csv пропускает одну строку при отправке

Например, если я пишу: 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" 

Я использовал код PHP от Find if a value exist in a CSV file with PHP Фред -ii-

и модифицированные это примерно так:

<?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> 

ответ

0

Ваша проблема заключается в условии в цикле while. Назначение ключа и списка выполняется перед проверкой! $ Line_number. Он должен работать и далее вы поменять оба условия, как этот

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

Вау, спасибо. Он работал, оценил помощь :) Я не могу + проголосовать за ваш ответ из-за плохих должностей до этого, на самом деле из-за дислексии, надеюсь, кто-то еще может взломать. Еще раз спасибо :) –

0

Каждый продвигает курсор массива, поэтому, когда вы Finde результат, следующее значение уже загружен. Подробнее здесь 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($line){ 

    echo "Found result: " .$line; 

} 
Смежные вопросы