Проверка формы JavaScript пропускает первое условие [дубликат]

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

Вы определяете строку, используя одинарные кавычки, и PHP не анализирует строки с разделителями одиночной кавычки. Чтобы получить переменную интерполяцию, вам нужно использовать двойные кавычки или конкатенацию строк (или их комбинацию). См. http://php.net/manual/en/language.types.string.php для получения дополнительной информации.

Также вы должны проверить, что mysql_query вернул действительный ресурс результата, иначе fetch_ *, num_rows и т. д. не будут работать с результатом, поскольку это не результат! IE:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

http://us.php.net/manual/en/function.mysql-query.php для получения дополнительной информации.

16
задан Bergi 2 December 2015 в 15:57
поделиться

3 ответа

window.name имеет специальную цель и предполагается, что это строка. Кажется, что Chrome явно передал его в строку, поэтому var name = {}; фактически заканчивает тем, что дает глобальную переменную name (т.е. window.name) значение "[object Object]". Поскольку это примитив, свойства (name.FirstName) не будут «прилипать».

Чтобы обойти эту проблему, не используйте name в качестве глобальной переменной.

18
ответ дан Bergi 4 September 2018 в 08:15
поделиться

Ваша name переменная на самом деле window.name, поскольку переменные верхнего уровня, объявленные с помощью var, привязаны к глобальному объекту.

Спецификация HTML5 требует, чтобы window.name a DOMString . Это означает, что значение window.name может быть только последовательностью символов , а не объектом.

В Chrome попытка использовать window.name для хранения чего-либо, кроме примитивная строка будет принуждать значение к примитивной строке. Например:

window.name = {};
window.name === "[object Object]"; // true

Вы можете избежать этой проблемы, используя переменную name, которая не находится в области верхнего уровня:

(function() {
    var name = {};
    // this `name` is not `window.name`
    // because we're not in the top-level scope

    console.log(name);
})();
6
ответ дан Ry- 4 September 2018 в 08:15
поделиться

window.name используется для установки имени окна, а так как имя окна может быть только строкой, все, что вы установите на window.name, преобразуется в строку. И строки, как примитивные значения, не могут иметь свойств. Решение состоит в том, чтобы использовать другое имя переменной или другую область.

В качестве альтернативы вы можете использовать window.name, как вам нравится, если у вас есть этот код в первую очередь. Я не рекомендую это вообще, но, как доказательство концепции:

(function () {
    var _name;
    window.__defineGetter__('name', function () {
        return _name;
    });
    window.__defineSetter__('name', function (v) {
        _name = v;
    });
})();

Кроме того, вместо new Object вы должны использовать {}. Кроме того, что он более краток, он также более эффективен и более ясен.

0
ответ дан st-boost 4 September 2018 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: