соответствие строк через оператор if PHP - PullRequest
3 голосов
/ 10 марта 2011

У меня есть область ввода текста, которая при заполнении и отправке помещает все, что было введено в переменную

$input

Затем выполняется оператор if, чтобы проверить, является ли буква a. Если это так, эхо - вы написали письмо а, иначе - вы не написали письмо а.

<?php    
 $input = $_POST["textarea"];

    echo $input;
    echo "<br />";

    if($input = "a"){
    echo "You wrote a";
    }else{
    echo "You did not write a";
    }


    ?>

Это работает, но неправильно. Каждое письмо, которое я набираю, приходит как «Ты написал». Я только хочу, чтобы это повторилось, если пользователь набрал. В противном случае выведите «Вы не написали».

РЕДАКТИРОВАТЬ: Когда я пытаюсь == вместо = = это говорит «Вы не написали» для всего. Даже когда я печатаю.

РЕДАКТИРОВАТЬ 2: Когда я пытаюсь параметр сравнения строк, он не работает. Любые предложения, где я иду не так?

ПОЛНЫЕ СКРИПТЫ ОБА СТРАНИЦЫ:

index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

</head>

<body>
<h1>Fun Translator</h1>

<form method="post" action="query.php">
 <textarea name="textarea" id="textarea">
 </textarea>
 <input type="submit" name="send" value="Translate" />
</form>


</body>
</html>

query.php

<?php
$input = $_POST["textarea"];

echo $input;
echo "<br />";

if(strcmp($input,'a')==0){
    echo "You wrote a";
    }else{
    echo "You did not write a";
    }


?>

Решение:

отделка ()

Ответы [ 4 ]

9 голосов
/ 10 марта 2011

== является условным для сравнения. = является оператором присваивания.

if($input == "a"){
    echo "You wrote a";
    }else{
    echo "You did not write a";
    }

Возможно, вы захотите использовать strcmp, поскольку он безопасен в двоичном формате.

if(strcmp($input,'a')==0){
    echo "You wrote a";
    }else{
    echo "You did not write a";
    }

http://php.net/manual/en/language.operators.comparison.php

http://php.net/manual/en/function.strcmp.php

РЕДАКТИРОВАТЬ: Сделав еще один удар здесь - в вашем коде, как опубликовано (я скопировал вставил его) у вас есть пробелы в текстовой области по умолчанию.

Не вставляйте разрыв строки между тегами и. Это добавляет пробел к началу «а».

Удаление этого заставило его нормально работать в моем тесте.

РЕДАКТИРОВАТЬ: В соответствии с принятым ответом и кодом, указанным в репозитории, trim () фактически является подходящей функцией для удаления всех начальных и конечных пробелов.

7 голосов
/ 10 марта 2011

Ваша проблема - путаница между операторами = и ==.

Если вы хотите сравнить два значения в PHP, вы должны использовать == (то есть два знака равенства вместе).

Использование одного знака равенства само по себе установит значение справа на значение слева (согласно его использованию в первой строке примера кода).

Смотрите эту страницу в руководстве по php: http://www.php.net/manual/en/language.operators.comparison.php

Обратите внимание, что есть также оператор тройного равенства ===, который также используется для сравнения, где вы также хотите сравнить тип данных двух сторон. Для базового использования обычно достаточно двойного равенства, но страница руководства даст вам больше информации о разнице между ними.

[EDIT]

Re your edit - все комментарии, предлагающие == вместо =, верны. Оператор с одинарным равенством не подходит для использования. Если проблема с оператором двойного равенства по-прежнему возникает, тогда $input на самом деле не равно a.

В этом случае вам может потребоваться отладка ввода. Предполагая, что ваша строка echo $input; действительно показывает a, я бы сказал, что наиболее вероятный сценарий состоит в том, что вы входите в какое-то пустое пространство с ним, возможно, возврат каретки или что-то в этом роде.

Чтобы доказать это, вы можете напечатать это так:

<code>print "<pre>[".$input."]
";

Появятся любые неожиданные дополнительные символы, которые вы могли ввести.

Если вас не беспокоит пустое пространство, используйте функцию trim(), чтобы избавиться от него.

Вы также можете использовать такие функции, как strlen(), чтобы проверить длину строки и т. Д.

[ИЗМЕНИТЬ СНОВА]

Хорошо, глядя на ваш HTML-код, я бы сказал, что это определенно будет проблемой с пробелами.

<textarea name="textarea" id="textarea">
</textarea>

Это приведет к созданию текстовой области с переводом строки в качестве содержимого по умолчанию, поскольку открывающий и закрывающий теги <textarea> находятся в отдельных строках. Если вы просто наберете a, то вы фактически отправите a плюс перевод строки.

Лучший совет, вероятно, trim() ввод перед проверкой.

2 голосов
/ 10 марта 2011

Используйте оператор == вместо =

0 голосов
/ 10 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...