@introqt
Студент

Почему не работает trim?

Доброго времени суток!
Я студент, начинаю осваивать PHP на конкретном примере, попутно разбирая всякие мелочи.
Вообщем, кратко, мое задание: нужно написать систему авторизации, данные о пользователе и его пароль должны храниться в текстовом файле. Начинаю придумывать как это реализовать. Последнеей идеей было построчное сравнение. Вообщем, у меня такой файл:
Vlad
123
Kappa 321
(к примеру)
Дальше я читаю файл построчно, записываю в массив. Присваиваю переменной первый элемент массива. (чтобы посмотреть, нормально ли работает, делаю все постепенно, разбирая на мелочах). Сравниваю то, что записано в поле "Логин" и первым элементом массива, получаю -1. Пришел к мысли, что все изза того, что в каждой строке файла есть символ переноса строки, решил использовать трим\ртрим чтобы решить эту проблему, но ничего не получается.
Я изобретаю велосипед, конечно, но хотелось бы понять, в чем ошибка, и какие альтернативные реализации на уровне "детского сада" вы можете предложить?
Мой набросок:
<?session_start();?>
<html>
<head>
<title>Задание 1</title>
</head>
<body bgcolor=#FFF8DC>
<H2 align=center> Вход в систему </H2>
<center>
<form action="index.php" method="post">
<input type=text name=login placeholder="Логин" size=10></p>
<input type=password name=password placeholder="Пароль" size=10></p>
<input type=submit name=log value=Вход> 
</form>
<?
$users = file("users.txt"); //записываем содержание файла с логинами и паролями в массив
echo "Вы ввели: ", $_POST["login"], "<br/>";
echo "Первый элемент в массиве- ", $users[0], "<br/>";
$str1=trim($_POST['login']); 
$str2=$users[0];
echo "Результат сравнения строк - ", strcmp($str1, $str2);

?>
</center>
</body> 
</html>


Результат работы: a813d31d36a74279a682a7fb3c6191f3.png

По идее strcmp должен давать 0, но как с trim, так и с rtrim 0 не получается. В чем проблема?
  • Вопрос задан
  • 1393 просмотра
Решения вопроса 1
@SilverSlice
Главный спутник программиста - отладка. Если две строки неравны, значит нужно посмотреть, чем именно они отличаются. Т.е. вывести код каждого символа и сравнить. Сделать это можно, например, так:

for ($i = 0; $i < strlen($str1); $i++) {
    echo ord($str1[$i]) . ' ';
}

Когда вы сравните строки, то увидете, что в $str2 у вас больше символов, значение которых можно найти в любой таблице ASCII. Тогда подтвердится ваше предположение о символах конца строк (которое, к слову, подробно описано в документации к функции, которую вы используете).

Таким образом вы поймете, что по ошибке применили trim совсем не к той переменной.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
$users[0] содержит следующую строку: "Vlad\n", смотрите функцию file, дословно из документации:
Возвращает файл в виде массива. Каждый элемент массива соответствует строке файла, с символами новой строки включительно.

поэтому при сравнении вы имеете результат отличный от 0
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы