Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
1

Неправильно сравниваются строки

06.12.2015, 01:26. Показов 3452. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собственно, есть две строки, полученные из инпутов. В инпутах содержатся условные пароли - символы, цифры, буквы.
У обоих gettype возвращает string.
Мне нужна проверка на идентичность с учетом регистра.
!== и strcmp не работают
strcmp при равенстве строк возвращает что угодно но не ноль.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2015, 01:26
Ответы с готовыми решениями:

Неправильно сравниваются строки
Есть две строки, 1 строка получена из инпута, вторая получена из файла test.php таким образом:...

Почему неправильно сравниваются даты?
Здравствуте товарищи! Нужна помощь! Не получается сравнить корректно даты , вот например есть у...

Не сравниваются строки
Сегодня мне понадобилось вызвать программу с аргументом команднйо строки я посмотрел пример на ...

Не сравниваются строки
Подскажите, как ввод с клавиатуры сравнить с "zzz" и выйти из цикла не хочет сравнивать string name...

11
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
06.12.2015, 01:45 2
Creepy,

PHP
1
2
3
4
5
$var1 = "Hello";
$var2 = "hello";
if (strcmp($var1, $var2) !== 0) {
    echo '$var1 не равно $var2 при регистрозависимом сравнении';
}
Добавлено через 23 секунды
пример: http://php.net/manual/ru/function.strcmp.php
0
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
06.12.2015, 02:14  [ТС] 3
Ты это к чему вообще написал?
strcmp регистрозависимое сравнение, и я это знаю, поэтому его и пишу. Но суть в том, что когда строки идентичны функция эта все равно возвращает не 0.
"passwordReg":"kot","checkPass":"kot"
Мои переменные
strcmp($regD->checkPass, $regD->passwordReg) возвращает 1
если такие
"passwordReg":"kotiK","checkPass":"kotiK"
то возвращается 5
Это для примера
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
06.12.2015, 03:29 4
Цитата Сообщение от Creepy Посмотреть сообщение
Ты это к чему вообще написал?
если такой умный зачем тогда задаёшь вопрос?
чего то не понятно какой ноль ты хочешь вернуть
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$var1 = "Hello";
$var2 = "hello";
if (strcmp($var1, $var2) !== 0) {
    echo '<br>$var1 не равно $var2 при регистрозависимом сравнении';
}
$var3 = "Hello";
$var4 = "Hello";
if (strcmp($var3, $var4) !== 0) {
    echo '<br>$var3 не равно $var4 при регистрозависимом сравнении';
}else {
    echo "<br>А эти строки равны";
}
Добавлено через 2 минуты
Цитата Сообщение от Creepy Посмотреть сообщение
strcmp($regD->checkPass, $regD->passwordReg) возвращает 1
если такие
"passwordReg":"kotiK","checkPass":"kotiK"
то возвращается 5
Это для примера
как ты эти значения получаешь и выводишь тут не строчки кода
1
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
06.12.2015, 12:34  [ТС] 5
Цитирую описание ф-ции "Возвращает отрицательное число, если str1 меньше, чем str2, положительное число, если str1 больше, чем str2, и 0 если строки равны".
Этот ноль и я хочу получить, потому что мне надо сравнивать пароль и его повторный ввод из инпута.
Вот куски кода,
PHP
1
2
3
4
5
6
7
$regD = json_decode($_POST['arr']);
if (strcmp($regD->checkPass, $regD->passwordReg) !== 0))
          $regD->checkPass = "<p class='regAlertBlock' style='right:-87px'>Пароли не совпадают</p>";
          else {
            $bool5 = true;
            $regD->checkPass = "";
          }
Эти значения я вытаскиваю из JSON, в котором передаю значения input'ов
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.12.2015, 12:42 6
Creepy, приведи конкретный работающий пример кода, который можно запустить у себя и который при сравнении через strcmp одинаковых строк вернет не 0.
0
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
06.12.2015, 13:20  [ТС] 7
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!DOCTYPE html>
<html>
<head>
  <title>kur</title>
  <meta charset="utf-8">
    <script src="jquery-2.1.4.min.js"></script>
  <script>
 
    $(document).ready(function () {
      $("#sendReg").bind("click", function (){
        var _reg = new Object ();
        _reg.passwordReg = $("#passwordReg").val();
        _reg.checkPass = $("#checkPass").val();
        console.log(JSON.stringify(_reg));
        $.ajax ({
            url: "reg.php",
            type: "POST",
            data: ({arr: JSON.stringify(_reg)}),
            dataType: "html",
            beforeSend: function (){
                    $("#inform").text ("Ожидание данных...");
                },
                success: function (data) {
                  data = JSON.parse(data);
                  alert(data.passwordReg);
                  alert(data.checkPass);
 
                }
            });
          });
        });
 
        </script>
</head>
<body>
 
<section style="margin-top:120px;">
  <form style="display:table; border-spacing:15px;" id="formReg" action="" method="post" name="test">
  <div style="display:table-row">
    <label style="display:table-cell" for="passwordReg">Пароль:</label>
    <input style="display:table-cell" type="password" name="passwordReg" placeholder="Пароль" id="passwordReg"/>
    <div style="display:table-cell; position:relative" id="passwordRegF"></div>
  </div>
  <div style="display:table-row">
    <label style="display:table-cell" for="checkPass">Подтвердите пароль:</label>
    <input style="display:table-cell" type="password" name="checkPass" placeholder="Подтвердите пароль" id="checkPass"/>
    <div style="display:table-cell; position:relative" id="checkPassF"></div>
  </div>
 
    <input style="display:table-cell"  type="button" name="knopka" id="sendReg" value="Готово"/>
  </form>
  <div id="inform"></div>
 
</section>
</body>
</html>
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  <?php
header("Content-Type: text/html; charset=utf-8");
$pattP = "/[0-9a-z_-]{4,32}/i";
$regD = json_decode($_POST['arr']);
json_last_error();
if (!preg_match($pattP, $regD->passwordReg))
        $regD->passwordReg = "<p class='regAlertBlock' style='right:-403px'>Пароль может состоять только из символов и букв английского алфавита</p>";
        else {
          $bool4 = true;
          $regD->passwordReg = "";
        }
//Пароль может состоять только из символов и букв английского алфавита
 
          if (strcmp($regD->checkPass, $regD->passwordReg) !== 0)
          $regD->checkPass = "<p class='regAlertBlock' style='right:-87px'>Пароли не совпадают</p>";
          else {
            $bool5 = true;
            $regD->checkPass = "";
          }
  $regD = json_encode($regD);
  echo $regD;
?>
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
06.12.2015, 13:38 8
Во-первых не надо приводить полный код, мало кому в нем захочет копаться, и тем более пытаться запустить это у себя
Я имел ввиду что-то типа:
PHP
1
2
3
$a = 'str';
$b = 'str';
echo strcmp($a, $b); // WTF! returned not 0!!!
А во-вторых обрати внимание на 6-11 строчки.
В них $regD->passwordReg меняется.
1
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
06.12.2015, 13:43  [ТС] 9
Спасибо)
0
1 / 1 / 0
Регистрация: 29.04.2014
Сообщений: 55
10.09.2016, 22:30 10
У меня почему то похожая проблема, есть txt файл с содержимым(это пароль и логин для сравнения):
admin
admin

считываю так их из файла:
PHP
1
2
3
4
$f = fopen ("pswd.txt","r");
 $pass = fgets($f);
 $admin = fgets($f);  
fclose($f);
Ввожу с импутов то же
admin
admin

Сравниваю:
PHP
1
2
 echo strcmp($admin,$_POST['user']); // результат 2 а не 0
 echo strcmp($pass,$_POST['pass']); // результат 2 а не 0
Правда так то же равенство не выполняется:
PHP
1
if ($admin == $_POST['user'] && $pass == $_POST['pass'])
Что за прикол, мне кажется при считывании какой то бок, как будто дописывает что то в конец, пробел что ли ...
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
10.09.2016, 22:34 11
http://php.net/manual/ru/function.trim.php
1
1 / 1 / 0
Регистрация: 29.04.2014
Сообщений: 55
10.09.2016, 22:41 12
спс помогло
0
10.09.2016, 22:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2016, 22:41
Помогаю со студенческими работами здесь

Не сравниваются строки
И снова здраствуйте форумчане, все считывается отлично, все заносится прекрасно, но в последнем ифе...

Не сравниваются строки через Contains
Допустим, что у меня есть два строковых массива. В одном массиве целое предложение. (&quot;Василий...

Не сравниваются строки массива
#include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; struct list {...

Не сравниваются равные строки
char buf = new char; try ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru