Possible Duplicate:
PHP: “Notice: Undefined variable” and “Notice: Undefined index”
All of a sudden my php code has come up with :
Notice: Undefined index: submit in C:\xampp\htdocs\globalautoparts\register.php on line 36
Notice: Undefined index: fullname in C:\xampp\htdocs\globalautoparts\register.php on line 40
Notice: Undefined index: username in C:\xampp\htdocs\globalautoparts\register.php on line 41
Notice: Undefined index: password in C:\xampp\htdocs\globalautoparts\register.php on line 42
Notice: Undefined index: repeatpassword in C:\xampp\htdocs\globalautoparts\register.php on line 43
Notice: Undefined index: email in C:\xampp\htdocs\globalautoparts\register.php on line 45
on the registration page.
How do i fix it?
This is my code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="Luka Cvrk (solucija.com)" />
<meta name="keywords" content="conceptnova, concept, framework, web, content, corporate, business" />
<meta name="description" content="Conceptnova" />
<link rel="stylesheet" href="css/main.css" type="text/css" media="screen, projection" />
<title>Global Autoparts | Home</title>
</head>
<body>
<div id="wrap">
<div id="header_top">
<h1 id="logo"><a href="#" title="Conceptnova"><img src="images/logo.gif" align="left" /></a></h1>
<h1 id="logo"></h1>
<ul>
<li><a href="index.php">home</a></li>
<li><a href="aboutus.php">about us</a></li>
<li><a href="services.php">services</a></li>
<li><a href="portfolio.php">portfolio</a></li>
<li><a href="contact.php">contact</a></li>
</ul>
<div id="slogan">
<p></p>
</div>
</div>
<div id="header_bottom">
<h2>Think outside of the box!</h2>
<p>Registering with Global Auto Parts means you have access to super-fast online orders and total user customization, so you wont have to wait in a line again!</p>
</div>
<div id="maincontent">
<div id="left">
<h2><a href="#">Register to become apart of the global community!</a></h2>
<p><?php
echo "<h1>Registration Page.</h1>";
$submit = $_POST['submit'];
//form data
$fullname = strip_tags($_POST['fullname']);
$username = strtolower(strip_tags($_POST['username']));
$password = strip_tags($_POST['password']);
$repeatpassword = strip_tags($_POST['repeatpassword']);
$date = date("Y-m-d");
$email = $_POST['email'];
if ($submit)
{
//open database
$connect = mysql_connect("localhost","root","");
mysql_select_db("phplogin"); //select database
$namecheck = mysql_query("SELECT username FROM users WHERE username='$username'");
$count = mysql_num_rows($namecheck);
if ($count!=0)
{
die("Username already taken! Go <a href='register.php'>back</a> to try again?");
}
// check for existence
if($fullname&&$username&&$password&&$repeatpassword)
{
if ($password==$repeatpassword)
{
//check char length of username and fullname
if (strlen($username)>25||strlen($fullname)>25)
{
echo "Length of username or fullname is too long!";
}
else{
//check password length
开发者_StackOverflow社区 if (strlen($password)>25||strlen($password)<6)
{
echo "Password must be between 6 and 25 characters";
}
else{
//register the user!
// encrypt password
$password = md5($password);
$repeatpassword = md5($repeatpassword);
//generate random number for activation process
$random = rand(23456789,98765432);
$queryreg = mysql_query("
INSERT INTO users VALUES ('','$fullname','$username','$password','$email','$date','$random','0')
");
$lastid = mysql_insert_id();
//send activation email
ini_set("SMTP",$server);
$to = $email;
$subject = "Activate your account!";
$headers = "From: Global Auto Parts";
$server = "localhost";
$body = "
Hello $fullname,\n\n
You need to activate your account with the link below:
http://localhost/globalautoparts/activate.php?=$lastid&code=$random \n\n
Thanks.
";
//function to send mail
mail($to, $subject, $body, $headers);
die("You have been registered! Check your email to activate your account!");
}
}
}
else
echo "Your passwords do not match!";
}
else
echo "Please fill in <b>all</a> fields!";
}
?>
<html>
<p>
<form action='register.php' method='POST'>
<table>
<tr>
<td>
Your full name:
</td>
<td>
<input type='text' name='fullname' value='<?php echo $fullname; ?>'>
</td>
</tr>
<tr>
<td>
Choose a username:
</td>
<td>
<input type='text' name='username' value='<?php echo $username; ?>'>
</td>
</tr>
<tr>
<td>
Choose a password:
</td>
<td>
<input type='password' name='password'>
</td>
</tr>
<tr>
<td>
Repeat your password:
</td>
<td>
<input type='password' name='repeatpassword'>
</td>
</tr>
<tr>
<td>
Email:
</td>
<td>
<input type='text' name='email'>
</td>
</tr>
</table>
<br />
<p>
<input type='submit' name='submit' value='Register'>
</form>
</p>
</div>
<div id="right">
<div id="searchform">
<form method="post" action="#">
<p><input type="text" name="search" class="search" value="Search Keywords" /><input type="submit" value="GO" class="submit" /></p>
</form>
</div>
<p>
<html>
<form action='login.php' method='POST'>
Username: <input type='text' name='username'><br /><br />
Password: <input type='password' name='password'><br /><br />
Click <a href='register.php'>here</a> to register. <input type='Submit' value='Login' id="login">
</form> <p>
</p>
<br />
</div>
</div>
<div id="footer">
<p>© Copyright 2011 <a href="#">Global Autoparts</a> Design: Victor Gatto </p>
</div>
</div>
</body>
</html>
<!--REGBOX-->
As the other guys suggested, you could
Change the Error Reporting Level
By running this code at the top of your script: error_reporting(E_ALL ^ E_NOTICE)
Or, it might be a better idea to actually check whether those variables were posted before you use them.
Quick and Dirty fix is to do this:
@$_POST['submit']
The @ sign will suppress any errors and return false in place of the string. Now that practice is generally frowned upon.
If you want a cleaner method, I would do this:
<?php
$post = array('fullname'=>'','username'=>'','password'=>'','repeatpassword'=>'');
if($_POST) $post = array_merge($post, $_POST);
$fullname = strip_tags($post['fullname']);
$username = strtolower(strip_tags($post['username']));
$password = strip_tags($post['password']);
$repeatpassword = strip_tags($post['repeatpassword']);
Then you'll never have a error about missing indexes, and you can set the default values to whatever you like.
Good luck
Somebody has upped the error reporting on you server / application to include E_NOTICE
errors.
You can either disable this by using
error_reporting(E_ALL ^ E_NOTICE);
or improve your application by checking array indexes before using them
$submit = isset($_POST['submit']) ? $_POST['submit'] : null;
Well, those have probably always been generated but your settings for error reporting may have gotten changed to include notices recently. PHP is simply notifying you that you're setting a variable equal to another variable that isn't defined. When $_POST['submit']
hasn't been filled yet, you will get a notice error from PHP when you attempt to use it. You can either check if these variables are set before attempting to use them or just tell PHP not to show you notice errors:
ini_set('error_reporting', E_ALL ^ E_NOTICE);
you should make default value for the form data outside the if ($submit) block and get the form data inside the if block to avoid the error/notice on strict php environtment..
// default form data
$fullname = '';
$username = '';
$password = '';
$repeatpassword = '';
$email = '';
$date = date("Y-m-d");
if ($submit)
{
//form data
$fullname = strip_tags($_POST['fullname']);
$username = strtolower(strip_tags($_POST['username']));
$password = strip_tags($_POST['password']);
$repeatpassword = strip_tags($_POST['repeatpassword']);
$email = $_POST['email'];
// your code ...
}
精彩评论