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

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

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

Студворк — интернет-сервис помощи студентам
Собственно, есть две строки, полученные из инпутов. В инпутах содержатся условные пароли - символы, цифры, буквы.
У обоих gettype возвращает string.
Мне нужна проверка на идентичность с учетом регистра.
!== и strcmp не работают
strcmp при равенстве строк возвращает что угодно но не ноль.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.12.2015, 01:26
Ответы с готовыми решениями:

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

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

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

11
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
06.12.2015, 01:45
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  [ТС]
Ты это к чему вообще написал?
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
Цитата Сообщение от 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  [ТС]
Цитирую описание ф-ции "Возвращает отрицательное число, если 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
Creepy, приведи конкретный работающий пример кода, который можно запустить у себя и который при сравнении через strcmp одинаковых строк вернет не 0.
0
1 / 1 / 1
Регистрация: 01.12.2015
Сообщений: 58
06.12.2015, 13:20  [ТС]
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
Во-первых не надо приводить полный код, мало кому в нем захочет копаться, и тем более пытаться запустить это у себя
Я имел ввиду что-то типа:
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  [ТС]
Спасибо)
0
1 / 1 / 0
Регистрация: 29.04.2014
Сообщений: 55
10.09.2016, 22:30
У меня почему то похожая проблема, есть 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
http://php.net/manual/ru/function.trim.php
1
1 / 1 / 0
Регистрация: 29.04.2014
Сообщений: 55
10.09.2016, 22:41
спс помогло
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.09.2016, 22:41
Помогаю со студенческими работами здесь

Не сравниваются строки
Подскажите, как ввод с клавиатуры сравнить с &quot;zzz&quot; и выйти из цикла не хочет сравнивать string name и a? import java.util.Scanner; ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru