2015-04-21 6 views
0

Я пытаюсь использовать php для проверки моей html-формы file.txt в witch, у меня есть логин, пароль. проблема в моем php-коде, что даже когда переменные равны, я получаю false, когда сравниваю их. Единственное исключение - когда я сравниваю первый логин и пароль, я верю для обоих.Как я могу исправить ошибку php var_dump

Вот мой код, чтобы прояснить мою проблему. , поэтому моя html-форма вызывает этот код php-страницы.

<?php 
echo " begin <br/>"; 
    $name=$_GET['username']; 
    $password=$_GET['password']; 
     echo "$name <br/>"; 
     echo "$password <br/>"; 
     $f = fopen("file.txt", "r"); 
     $res="0"; 
      while(!feof($f)) 
      { echo "begin while <br/> "; 
       $p3=fgetc($f); 
       while($p3!="|" && !feof($f)) 
       { 
        $user1=$user1.$p3;  
        $p3=fgetc($f); 

       } 
        $p1=fgetc($f); 
        while($p1!="|" && !feof($f)) 
        { $pass=$pass.$p1; 
         $p1=fgetc($f); 
        } 
        $p2=fgetc($f); 
        while($p2!="|" && !feof($f)) 
         { 
         $q=$q.$p2; 
         $p2=fgetc($f); 
         } 
         var_dump($user1 == $name); 
        var_dump($password == $pass); 
        echo "<br/> $user1 <br/>"; 
        echo "$pass <br/>"; 
        echo "compare <br/>"; 
        echo "$name <br/>"; 
        echo "$password <br/>"; 
       if($name == $user1 && $password == $pass) 
        { echo "succeeded <br/>"; 
         echo "droit: $q <br/>"; 
         echo "$res <br/>"; 
         $res="1"; 
         echo "$res <br/>"; 
         break 2; 
        } 

        unset($p3); 
        unset($p1); 
        unset($p2); 
        unset($user1); 
        unset($pass); 
        unset($q); 
      } 
    fclose($f); 
    if($res == "1") 
     { echo "ok <br/>";} 
    else 
     { echo " error <br/>";} 

    echo " fin <br/>" 
    ?> 

моего file.txt

abc|abc|87| 
aaa|ccc|45| 
ghi|ghi|67 

теперь, если я введите логин пароль а а, ПОЛУЧИТЬ этот результат на моей странице

begin 
abc 
abc 
begin while 
bool(true) bool(true) 
abc 
abc 
compare 
abc 
abc 
succeeded 
droit: 87 
0 
1 

теперь, если я ввести логин и пароль ааа ЦКК я получаю

begin 
aaa 
ccc 
begin while 
bool(false) bool(false) 
abc 
abc 
compare 
aaa 
ccc 
begin while 
bool(false) bool(true) 
aaa 
ccc 
compare 
aaa 
ccc 
begin while 
bool(false) bool(false) 
ghi 
ghi 
compare 
aaa 
ccc 
error 
fin 

и даже для t hird user line Я получаю ошибку, даже если переменная равна.

Я ценю это, если кто-нибудь может мне помочь. и спасибо заранее

+1

Код выглядит так, как будто он был перенесен с (или, по крайней мере, на мысль) C. PHP предоставляет несколько очень удобных функций для работы с файлами и строками. Читайте об ['file()'] (http://php.net/manual/en/function.file.php) и ['explode()'] (http://php.net/manual/en/function .explode.php), они могут помочь вам прочитать файл и разделить строки на части в нескольких строках кода. – axiac

+0

Если честно - ваш код грязный, и трудно понять, что происходит. Если вы хотите, чтобы кто-то помог вам, по крайней мере, убедитесь, что ваш код организован. –

ответ

0

Похоже, что ваш $ user1 поврежден ... вы уверены, что после aaa нет символа? как «ааа»? попробуйте обрезать его: trim($name) == trim($user1) ... в противном случае, попробуйте сравнить "$name" == "$user1"?

+0

спасибо, что отделка работала для меня. –

+0

Ницца, пожалуйста, примите ответ, если он разрешит проблему. – Random

0

Вы получаете этот результат, потому что у вас есть новые строки в текстовом файле.

Поскольку второй пользователь анализируется первый символ после того, как трубы | является символ новой строки и становится первым символом $user1

Вы не видите, что на вашем выходе потому что вы смотрите на него в вашем браузере ,

Вы можете быстро исправить это путем обрезки $user1 в качестве «случайного» предложения.

Или укажите, что ваш код пропускает символы новой строки в первом блоке.

while(!feof($f)) 
{ 
    echo "begin while <br/> "; 

    $p3=fgetc($f); 
    while($p3 == "\n" || $p3 == "\r") 
    { 
     $p3=fgetc($f); 
    } 
    // .... 
Смежные вопросы