Взято из www.regular-expressions.info
Жадность: жадные кванторы сначала пытаются повторить токен столько раз, насколько это возможно, и постепенно отбрасывают спички в качестве двигателя назад
Laziness: Lazy quantifier сначала повторяет токен столько раз, сколько требуется, и постепенно расширяет совпадение, когда двигатель возвращается в регулярное выражение, чтобы найти полное соответствие.
Вы должны указать свои ключи массива:
$department = mysql_real_escape_string($_POST['department']);
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$message = mysql_real_escape_string($_POST['message']);
Как есть, он искал константы, называемые department
, name
, email
, message
и т. д. Когда это происходит «Найти такую константу, PHP (странно) интерпретирует ее как строку (« department »и т. д.). Очевидно, что это может легко сломаться, если вы позже определите такую константу (хотя это плохой стиль, чтобы иметь строчные константы).
вы, вероятно, забыли использовать ""
.
Например:
$_array[text] = $_var;
изменить на:
$_array["text"] = $_var;
Вы пропустили размещение одиночных кавычек вокруг ваших ключей массива:
$ _ POST [email]
blockquote>должно быть:
$ _ POST ['email']
blockquote>
Правильный способ использования постпеременных переменных -
<?php
$department = $_POST['department'];
?>
Использовать одинарную кавычку (')
Вставить одинарные кавычки.
Пример
$department = mysql_real_escape_string($_POST['department']);
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$message = mysql_real_escape_string($_POST['message']);
Сообщение об ошибке связано с неудачным фактом, что PHP неявно объявит неизвестный токен как константную строку с тем же именем.
То есть, он пытается интерпретировать это (обратите внимание на отсутствующие кавычки ):
$_POST[department]
Единственный допустимый способ использования этого синтаксиса в PHP заключается в том, что ранее существовала константа department
. Так грустно, а не умирать с фатальной ошибкой на данный момент, оно выдает это Уведомление и действует так, как будто константа была определена с тем же именем и значением:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
Существуют различные способы, которыми вы можете получить это сообщение об ошибке, но все они имеют одну и ту же причину - токен, который может быть константой.
$my_array[bad_key]
Это то, что проблема в вашем случае, и это потому, что у вас есть ключи массива строк, которые не были указаны. Исправление строковых ключей исправит ошибку:
Изменить:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
Кому:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
var_without_dollar
Еще одна причина, по которой вы можете увидеть это сообщение об ошибке, - это оставить параметр $
от переменной или $this->
от члена. Например, любое из следующих может вызвать аналогичное сообщение об ошибке:
my_local; // should be $my_local
my_member; // should be $this->my_member
$bad-variable-name
Аналогичная, но более тонкая проблема может возникнуть, если вы попытаетесь для использования запрещенного символа в имени переменной - дефис (-
) вместо подчеркивания _
будет обычным случаем.
Например, это нормально, поскольку подчеркивания разрешено в именах переменных :
if (123 === $my_var) {
do_something();
}
Но это не так:
if (123 === $my-var) {
do_something();
}
Он будет интерпретироваться так же, как это:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
Чтобы ссылаться на константу класса, вам нужно указать область видимости класса с ::
, если вы пропустите это, PHP будет думать вы говорите о глобальном define()
.
Например:
class MyClass {
const MY_CONST = 123;
public function my_method() {
return self::MY_CONST; // This is fine
}
public function my_method() {
return MyClass::MY_CONST; // This is fine
}
public function my_bad_method() {
return MY_CONST; // BUG - need to specify class scope
}
}
Существуют некоторые системно-определенные константы, которые существуют только в более новых версиях PHP, например параметр режима константы для round()
, такие как PHP_ROUND_HALF_DOWN
, существуют только в PHP 5.3 или новее.
Итак, если вы попытались использовать эту функцию в PHP 5.2, скажите:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
Вы получите это сообщение об ошибке:
Использование неопределенной константы PHP_ROUND_HALF_DOWN - предполагается 'PHP_ROUND_HALF_DOWN' Предупреждение (2): Неверный параметр count для round ()
BLOCKQUOTE>
Не уверен, что есть какая-либо разница с использованием воспламенителя кода, и я использую «» для имен, и он отлично работает.
$department = mysql_real_escape_string($_POST["department"]);
$name = mysql_real_escape_string($_POST["name"]);
$email = mysql_real_escape_string($_POST["email"]);
$message = mysql_real_escape_string($_POST["message"]);
приветствует
Хорхе.
<?php
${test}="test information";
echo $test;
?>
Примечание: использование неопределенного теста констант - предполагаемый «тест» в D: \ xampp \ htdocs \ sp \ test \ envoirnmentVariables.php в тестовой информации по строке 3
blockquote>
Похоже, что предопределенные константы выборки ушли с расширением MySQL, поэтому нам нужно добавить их до первой функции ...
// Предполагаемые константы выборки
define('MYSQL_BOTH',MYSQLI_BOTH);
define('MYSQL_NUM',MYSQLI_NUM);
define('MYSQL_ASSOC',MYSQLI_ASSOC);
Я проверил и преуспел.