Sunday, 15 June 2014

How to fix php notice undefined index

First of all let us understand the problem.It should be clearly understood that this is NOT an ‘Error’, but a ‘Notice’. A notice can be ignored if it’s not critical while an error must be fixed. You might have observed that even though a notice appears, rest of the output will be displayed on the browser.


Coming back to our topic, when the ‘Undefined index’ notice occurs, most of the time it is a good practice to fix this than ignoring.


How to Fix php notice undefined index -


One simple answer – isset()  or empty()!


isset() function in PHP determines whether a variable is set and is not NULL. It returns a Boolean value, that is, if the variable is set it will return true and if the variable value is null it will return false.


More details on this function can be found in PHP Tutorial.


Example


Create a file php_form.php


<!DOCTYPE HTML> 
<html>
<head>
<style>
.error color: #FF0000;
</style>
</head>
<body>

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST")

if (empty($_POST["name"]))
$nameErr = "Name is required";
else

$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name))

$nameErr = "Only letters and white space allowed";



if (empty($_POST["email"]))
$emailErr = "Email is required";
else

$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))

$emailErr = "Invalid email format";



if (empty($_POST["website"]))
$website = "";
else
ftp):\/\/

if (empty($_POST["comment"]))
$comment = "";
else
$comment = test_input($_POST["comment"]);

$gender = test_input($_POST["gender"]);

function test_input($data)

$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;

?>

<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website: <input type="text" name="website" value="<?php echo $website;?>">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
<br><br>
Gender:
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>

<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>

</body>
</html>

 


Undefined Index in PHP Undefined Index in PHP


Now here we have two solutions for this problem….


Using Empty()


<!DOCTYPE HTML> 
<html>
<head>
<style>
.error color: #FF0000;
</style>
</head>
<body>
<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")

if (empty($_POST["name"]))
$nameErr = "Name is required";
else

$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name))

$nameErr = "Only letters and white space allowed";



if (empty($_POST["email"]))
$emailErr = "Email is required";
else

$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))

$emailErr = "Invalid email format";



if (empty($_POST["website"]))
$website = "";
else
]/i",$website))

$websiteErr = "Invalid URL";


if (empty($_POST["comment"]))
$comment = "";
else
$comment = test_input($_POST["comment"]);
if (empty($_POST["gender"]))
$genderErr = "Gender is required";
else
$gender = test_input($_POST["gender"]);

function test_input($data)

$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;

?>
<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website: <input type="text" name="website" value="<?php echo $website;?>">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
<br><br>
Gender:
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>

 


Using isset()


<!DOCTYPE HTML> 
<html>
<head>
<style>
.error color: #FF0000;
</style>
</head>
<body>

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST")

if (empty($_POST["name"]))
$nameErr = "Name is required";
else

$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name))

$nameErr = "Only letters and white space allowed";



if (empty($_POST["email"]))
$emailErr = "Email is required";
else

$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))

$emailErr = "Invalid email format";



if (empty($_POST["website"]))
$website = "";
else
ftp):\/\/

if (empty($_POST["comment"]))
$comment = "";
else
$comment = test_input($_POST["comment"]);

$gender = test_input(isset($_POST["gender"]));


function test_input($data)

$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;

?>

<h2>PHP Form Validation Example</h2>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website: <input type="text" name="website" value="<?php echo $website;?>">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
<br><br>
Gender:
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?> value="female">Female
<input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?> value="male">Male
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>

<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>

</body>
</html>

 


Note :- Here we can also use ternary operator for isset() like - 


$gender = isset($_GET['gender']) ? $_GET['gender'] : 'empty';


This is recommended for good PHP developer.


Guys if have enjoyed this post than please like us.



How to fix php notice undefined index

No comments:

Post a Comment