Попробуйте это, это должно быть работа, иначе вам нужно распечатать ошибку, чтобы указать вашу проблему
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con);
while($row = mysql_fetch_array($result))
{
echo $row['FirstName'];
}
Предположим, что вы используете значение parameter
, но если значение указано None
, то вы предпочитаете иметь пустую строку ""
вместо None
. Что бы вы сделали в целом?
if parameter:
# use parameter (well your expression using `" " + parameter` in this case
else:
# use ""
Это то, что делает это выражение. Сначала вы должны понять, что делает оператор and
и or
:
a and b
возвращает b
, если a is True
, else возвращает a
. a or b
возвращает a
, если a is True
, else возвращает b
. Итак, ваше выражение:
parameter and (" " + parameter) or ""
, которое фактически эквивалентно:
(parameter and (" " + parameter)) or ""
# A1 A2 B
# A or B
Как выражение оценивается, если:
parameter - A1
оценивается как True
: result = (True and " " + parameter) or ""
result = (" " + parameter) or ""
result = " " + parameter
parameter - A1
is None
: result = (None and " " + parameter) or ""
result = None or ""
result = ""
Как общее предложение, лучше и читаем использовать выражение формы A if C else B
для условного выражения. Поэтому вам лучше использовать:
" " + parameter if parameter else ""
вместо данного выражения. См. PEP 308 - Условное выражение для мотивации выражения if-else
.
Он проверяет, имеет ли значение parameter
значение. Если это делает, это добавляет пробел. Если он не возвращает пустую строку.
$ python
Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> foo = 'bar'
>>> foo and (" " + foo) or ""
' bar'
Пустая строка в Python эквивалентна логическому значению False
, так же как и пустой список. Строка, которую вы представили, представляет собой версию Python троичного оператора (как отмечено в комментарии ниже, в настоящее время устаревшая конструкция, так как Python теперь имеет реальный тернарный оператор ). Он основан на трех правилах:
a and b
, если a
- False
, тогда b
не будет оценен a or b
, если a
- True
, тогда b
не будет оценен Если parameter
оценивает True
, вторая часть предложения and
будет оценена: (" " + parameter)
. Поэтому он добавит ведущее пространство к parameter
, если это не пустая строка. Вторая часть предложения or
не будет оцениваться, поскольку вы уже можете сказать, что все выражение True
(True
или что-либо всегда True
).
Если parameter
False
(пустая строка в этом контексте), вторая часть предложения and
не будет оцениваться, поскольку вы уже можете сказать, что это False
(False
, и все всегда False
). Поэтому вторая часть предложения or
получает оценку, возвращающую пустую строку.
Вы можете записать ее более подробным образом:
if parameter:
return " " + parameter
else:
return ""
Python рассматривает пустые строки как имеющие логическое значение «false» и непустые строки как имеющие логическое значение «true».
Таким образом, существует только два возможных результата выражения, то есть для пустая строка и для непустой строки.
Второе, что нужно заметить, это то, какое значение возвращает оператор «или» и «и». Python не возвращает только true или false значение, для строк и / или оператора он возвращает одну из строк (учитывая, что они имеют значение true или false). Python использует ленивый подход:
Для оператора «и», если значение left равно true, правильное значение проверяется и возвращается. если левое значение ложно, то оно возвращается
Для оператора «или», если первое значение истинно, оно возвращается. в противном случае, если второе значение ложно, затем возвращается второе значение
parameter = 'test'
print( parameter and (" " + parameter) or "" )
ouput: test
parameter = ''
print( parameter and (" " + parameter) or "" )
output: (пустая строка)
Рассмотрим этот TTL. Затем он просто подключается к различным сценариям, чтобы увидеть, что происходит:)
Обратите внимание, что and
и or
оценивают первое значение, которое сделало их «успешными» или «сбой» - и это не должно быть True или False!
a b a or b a and b
-- -- ------ -------
T T a (T) b (T)
T F a (T) b (F)
F T b (T) a (F)
F F b (F) a (F)
T и F представляют значения «Truth-y» и «False-y». Это выражение-цепочка работает , потому что операторы не должны возвращать True или False - это будет либо значение a
, либо b
.
Со всеми хорошими ответами я нашел эти заявления, помог мне запомнить это лучше и в соответствии с тем, как работает мой мозг (и, надеюсь, для него еще немного):
В итоге все они возвращают первый элемент, который решает исход заявления. (В худшем случае последний элемент в последовательности)
Обратите внимание, что это правило также применяется к прикованным всем «и» или всем «или» операторам