Undefined Index in PHP is a Notice generated by the language. The simplest way to ignore such a notice is to ask PHP to stop generating such notices. You can either add a small line of code at the top of the PHP page or edit the field error_reporting in the php. ini file.
Constants are like variables except that once they are defined they cannot be changed or undefined.
You should quote your array keys:
$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']);
As is, it was looking for constants called department
, name
, email
, message
, etc. When it doesn't find such a constant, PHP (bizarrely) interprets it as a string ('department', etc). Obviously, this can easily break if you do defined such a constant later (though it's bad style to have lower-case constants).
The error message is due to the unfortunate fact that PHP will implicitly declare an unknown token as a constant string of the same name.
That is, it's trying to interpret this (note the missing quote marks):
$_POST[department]
The only valid way this would be valid syntax in PHP is if there was previously a constant department
defined. So sadly, rather than dying with a Fatal error at this point, it issues this Notice and acts as though a constant had been defined with the same name and value:
// Implicit declaration of constant called department with value 'department'
define('department', 'department');
There are various ways you can get this error message, but they all have the same root cause - a token that could be a constant.
$my_array[bad_key]
This is what the problem is in your case, and it's because you've got string array keys that haven't been quoted. Fixing the string keys will fix the bug:
Change:
$department = mysql_real_escape_string($_POST[department]);
...(etc)...
To:
$department = mysql_real_escape_string($_POST['department']);
...(etc)...
var_without_dollar
Another reason you might see this error message is if you leave off the $
from a variable, or $this->
from a member. Eg, either of the following would cause a similar error message:
my_local; // should be $my_local
my_member; // should be $this->my_member
$bad-variable-name
A similar but more subtle issue can result if you try to use a disallowed character in a variable name - a hyphen (-
) instead of an underscore _
would be a common case.
For example, this is OK, since underscores are allowed in variable names:
if (123 === $my_var) {
do_something();
}
But this isn't:
if (123 === $my-var) {
do_something();
}
It'll be interpreted the same as this:
if (123 === $my - var) { // variable $my minus constant 'var'
do_something();
}
In order to refer to a class constant you need to specify the class scope with ::
, if you miss this off PHP will think you're talking about a global define()
.
Eg:
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
}
}
There are some system-defined constants that only exist in newer versions of PHP, for example the mode option constants for round()
such as PHP_ROUND_HALF_DOWN
only exist in PHP 5.3 or later.
So if you tried to use this feature in PHP 5.2, say:
$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);
You'd get this error message:
Use of undefined constant PHP_ROUND_HALF_DOWN - assumed 'PHP_ROUND_HALF_DOWN' Warning (2): Wrong parameter count for round()
you probably forgot to use ""
.
For exemple:
$_array[text] = $_var;
change to:
$_array["text"] = $_var;
You missed putting single quotes around your array keys:
$_POST[email]
should be:
$_POST['email']
The correct way of using post variables is
<?php
$department = $_POST['department'];
?>
Use single quotation(')
<?php
${test}="test information";
echo $test;
?>
Notice: Use of undefined constant test - assumed 'test' in D:\xampp\htdocs\sp\test\envoirnmentVariables.php on line 3 test information
Insert single quotes.
Example
$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']);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With