[mysql] PHP - Notice: Undefined index:

Possible Duplicate:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”

I am trying to do a registration form that registers a user in a database (MySQL).

The code is supposed to register:

  • Name
  • Surname
  • Username
  • Password
  • Email
  • Security Question
  • Security Answer

The code, before saving to the table, checks whether the username or password already exists, and if they do it echoes an error message, and if not, it saves to the db.

However, on page load, I'm getting these errors:

Notice: Undefined index: Name in C:\xampp\htdocs\Task2\registration.php on line 216

Notice: Undefined index: Surname in C:\xampp\htdocs\Task2\registration.php on line 217

Notice: Undefined index: Username in C:\xampp\htdocs\Task2\registration.php on line 219

Notice: Undefined index: Email in C:\xampp\htdocs\Task2\registration.php on line 221

Notice: Undefined index: C_Email in C:\xampp\htdocs\Task2\registration.php on line 222

Notice: Undefined index: password in C:\xampp\htdocs\Task2\registration.php on line 224

Notice: Undefined index: c_password in C:\xampp\htdocs\Task2\registration.php on line 225

Notice: Undefined index: SecQ in C:\xampp\htdocs\Task2\registration.php on line 227

Notice: Undefined index: SecA in C:\xampp\htdocs\Task2\registration.php on line 228

Notice: Undefined variable: mysql_connect in C:\xampp\htdocs\Task2\registration.php on line 231

Fatal error: Function name must be a string in C:\xampp\htdocs\Task2\registration.php on line 231

This is the code:

    <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

  <title>Registration</title>

  <style type="text/css" title="Amaya theme">

body {
    font-size: 12pt;
    font-family: Helvetica, Arial, sans-serif;
    font-weight: normal;
    font-style: normal;
    color: black;
    background-color: white;
    line-height: 1.2em;
    margin-left: 4em;
    margin-right: 2em;
   }

/* paragraphs */
p  {
    padding: 0;
    margin-top: 1em;
    margin-bottom: 1em;
    text-align: left;
   }

/* headings */
h1 {
    font-size: 180%;
    font-weight: bold;
    font-style: normal;
    font-variant: small-caps;
    text-align: left;
    padding: 0;
    margin-top: 1.7em;
    margin-bottom: 1.7em;
   }
h2 {
    font-size: 150%;
    font-weight: bold;
    font-style: normal;
    padding: 0;
    margin-top: 1.5em;
    margin-bottom: 1.1em;
   }
h3 {
    font-size: 130%;
    font-weight: bold;
    font-style: normal;
    padding: 0;
    margin-top: 1.3em;
    margin-bottom: 1.1em;
   }
h4 {
    font-size: 110%;
    font-weight: bold;
    font-style: normal;
    padding: 0;
    margin-top: 1.1em;
    margin-bottom: 1.1em;
   }
h5 {
    font-size: 100%;
    font-weight: bold;
    font-style: italic;
    padding: 0;
    margin-top: 1em;
    margin-bottom: 1em;
   }
h6 {
    font-size: 100%;
    font-weight: normal;
    font-style: italic;
    padding: 0;
    margin-top: 1em;
    margin-bottom: 1em;
   }

/* divisions */
div {
    padding: 0;
    margin-top: 0em;
    margin-bottom: 0em;
   }

/* lists */
ul, ol {
    padding: 0 0 0 3em;
    margin-top: 1em;
    margin-bottom: 1em;
   }
ul ul, ol ol, ul ol, ol ul {
    margin-top: 1em;
    margin-bottom: 1em;
   }
li {
    padding: 0;
    margin-top: 1em;
    margin-bottom: 1em;
    text-align: left;
   }
li p {
    margin-top: 1em;
    margin-bottom: 1em;
   }
dl {
    padding: 0;
    margin-top: 1em;
    margin-bottom: 1em;
    margin-left: 1em;
   }
dl dl {
    margin-top: 0em;
    margin-bottom: 0em;
   }
dt {
    padding: 0;
    font-weight: bold;
    margin-top: .3em;
    margin-bottom: .3em;
   }
dd {
    padding: 0;
    margin-top: .3em;
    margin-left: 3em;
    margin-bottom: .3em;
   }
dl p {
    margin-top: .3em;
    margin-bottom: .3em;
   }

/* inline */
strong {
    font-weight: bold;
   }
em {
    font-style: italic;
   }
code {
    font-family: Courier New, Courier, monospace;
   }
ins {
    background-color: yellow;
    text-decoration: underline;
   }
del {
    text-decoration: line-through;
   }


a[href] {
    color: blue;
    text-decoration: underline;
   }


  </style>
</head>

<body>
<h4><span style="font-family: Arial,Helvetica,sans-serif">Name</span></h4>

<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text"  name='Name'/></p>

<h4 style="font-family: Arial,Helvetica,sans-serif">Surname</h4>

<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text" name='Surname'/></p>

<h4 style="font-family: Arial,Helvetica,sans-serif">Username</h4>

<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text" name='Username' /></p>
<hr style="font-family: Arial,Helvetica,sans-serif" />

<h4 style="font-family: Arial,Helvetica,sans-serif">Email</h4>

<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text" name='Email' /></p>

<h4 style="font-family: Arial,Helvetica,sans-serif">Confirm Email</h4>

<p style="font-family: Arial,Helvetica,sans-serif"> <input type="text" name='C_Email' /></p>
<hr style="font-family: Arial,Helvetica,sans-serif" />

<h4 style="font-family: Arial,Helvetica,sans-serif">Password</h4>

<p style="font-family: Arial,Helvetica,sans-serif"> <input type="password" name='password' /></p>

<h4 style="font-family: Arial,Helvetica,sans-serif">Confirm Password</h4>

<p style="font-family: Arial,Helvetica,sans-serif"> <input type="password" name='c_password'/></p>
<hr style="font-family: Arial,Helvetica,sans-serif" />

<h4 style="font-family: Arial,Helvetica,sans-serif">Security Question</h4>

<p style="font-family: Arial,Helvetica,sans-serif"> <input type="password" name='SecQ' /></p>

<h4 style="font-family: Arial,Helvetica,sans-serif">Security Answer</h4>

<p style="font-family: Arial,Helvetica,sans-serif"> <input type="password" name='SecA'/></p>
<hr style="font-family: Arial,Helvetica,sans-serif" />

<hr style="font-family: Arial,Helvetica,sans-serif" />


<p><span
style="font-family: Arial,Helvetica,sans-serif"><button>Submit</button></span></p>

</body>

</html>
<?php
$Name = $_POST['Name'];
$Surname = $_POST['Surname'];

$Username = $_POST['Username'];

$Email = $_POST['Email'];
$C_Email = $_POST['C_Email'];

$Password = $_POST['password'];
$C_Password = $_POST['c_password'];

$SecQ = $_POST['SecQ'];
$SecA = $_POST['SecA'];


$mysql_connect ('localhost', 'admin', 'storefile1234');
mysql_select_db ("storefile");

$check_username = mysql_query("SELECT FROM users WHERE username = '$Username'");
$check_email = mysql_query("SELECT FROM users WHERE email = '$Email'");


if ($Name == null || $Surname== null || $Username == null || $Password == null || $C_Password == null || $Email == null || $C_Email == null || $SecQ == null || $SecA == null ) {

    echo "Missing details. Please enter all fields.";


} else {

    if(mysql_num_rows($check_username) != 0 && mysql_num_rows($check_email) != 0)
            {
            echo "Username/Email already exists";
            }
            if  ($Email == $C_Email && $Password == $C_Password) {

                $query = "INSERT INTO users (Username, Name,Surname, Password, Email, SecQ, SecA) VALUES ('NULL', ".$Username."', ".$Name."', ".$Surname."', ".$Password."', ".$SecQ."', ".$SecA."', ".$Email.')"';

                mysql_query($query) or die ('Error registering.');

                echo "Greetings, ".$Name.", you have been registered. ";

    }  else {

        echo "Error registering your account. Please try again.";
            }

 }


?>

Any help would be appreciated.

Thanks!

This question is related to mysql php

The answer is


For starters,

mysql_connect() should not have a $ accompanying it; it is not a variable, it is a predefined function. Remove the $ to properly connect to the database.

Why do you have an XML tag at the top of this document? This is HTML/PHP - a HTML doctype should suffice.

From line 215, update:

if (isset($_POST)) {
    $Name = $_POST['Name'];
    $Surname = $_POST['Surname'];

    $Username = $_POST['Username'];

    $Email = $_POST['Email'];
    $C_Email = $_POST['C_Email'];

    $Password = $_POST['password'];
    $C_Password = $_POST['c_password'];

    $SecQ = $_POST['SecQ'];
    $SecA = $_POST['SecA'];
}

POST variables are coming from your form, and you have to check whether they exist or not, else PHP will give you a NOTICE error. You can disable these notices by placing error_reporting(0); at the top of your document. It's best to keep these visible for development purposes.

You should only be interacting with the database (inserting, checking) under the condition that the form has been submitted. If you do not, PHP will run all of these operations without any input from the user. Its best to use an IF statement, like so:

if (isset($_POST['submit']) {
// blah blah
// check if user exists, check if fields are blank
// insert the user if all of this stuff checks out..
} else {
// just display the form
}

Awesome form tutorial: http://php.about.com/od/learnphp/ss/php_forms.htm


How are you loading this page? Is it getting anything on POST to load? If it's not, then the $name = $_POST['Name']; assignation doesn't have any 'Name' on POST.


Before you extract values from $_POST, you should check if they exist. You could use the isset function for this (http://php.net/manual/en/function.isset.php)


You're getting errors because you're attempting to read post variables that haven't been set, they only get set on form submission. Wrap your php code at the bottom in an

if ($_SERVER['REQUEST_METHOD'] === 'POST') { ... }

Also, your code is ripe for SQL injection. At the very least use mysql_real_escape_string on the post vars before using them in SQL queries. mysql_real_escape_string is not good enough for a production site, but should score you extra points in class.