无法获得$ _POST工作

时间:2012-03-29 16:49:55

标签: php forms post

我正在尝试使用此表单(在account.html中)为数组指定值:

<form name="register" action="register.php" method="post">
    <label for="username">Username:</label> <input type="text" name="username"                class="textb" maxlength="30"/><br /><br>
    Password  :  <input type="password" name="password1" class="textb"/><br /><br>
    Re-Type Password: <input type="password" name="password2" class="textb"/><br /><br>

    <br>
    <input type="submit" name="Create Account" value="Create Account" class="texta" />
</form>

但是当我尝试在这里调用它们时(在register.php中):

$username = $_POST["username"];
$password1 = $_POST["password1"];
$password2 = $_POST["password2"];

我得到:

Notice: Undefined index: username in C:\xampp\htdocs\register.php on line 3

Notice: Undefined index: password1 in C:\xampp\htdocs\register.php on line 4

Notice: Undefined index: password2 in C:\xampp\htdocs\register.php on line 5

有人可以解释为什么表单没有发布变量吗?

这是完整的register.php文件:

<?php

$username = $_POST["username"];
$password1 = $_POST["password1"];
$password2 = $_POST["password2"];

if($password1 != $password2)
header("location:register.php");

if (strlen($username) > 30)
header("location:register.php");
$dbhost = 'localhost';
$dbname = 'test';
$dbuser = 'root';
$dbpass = '';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname, $conn);
$username = mysql_real_escape_string($username);
$query = "INSERT INTO members (username, password)
    VALUES ('$username', '$password1');";
mysql_query($query);
mysql_close();
header('Location: index.php');

?>

以下是完整的account.html文件:

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Video for Education Log In</title>
<link rel="stylesheet" type="text/css" href="style1.css" />
</head>

<body>
<div id="wrapper">
<div id="header">
<div id="logo">
    videoedu.edu    </div>
<div id="menu">
    <ul>
        <li><a href="index.html" class="menua">Home</a></li>
        <li><a href="about.html" class="menua">About Us</a></li>
    </ul>
</div>
</div>
<br><br><br><br>
<div id="page">




<div id="content">
<h2>Create an Account. It's free and lets you share and watch streamed educational         video content.</h2>
<h3>Simply fill out the form below.....</h3>
<div class= "form">
<form name="register" action="register.php" method="post">
    <label for="username">Username:</label> <input type="text" name="username"     class="textb" maxlength="30"/><br /><br>
    Password  :  <input type="password" name="password1" class="textb"/><br />    <br>
    Re-Type Password: <input type="password" name="password2" class="textb"/>       <br /><br>      
    <br>
    <input type="submit" name="Create Account" value="Create Account"             class="texta" />
</form>
</div>
</div>
</div>
</div>
</body>
</html>

3 个答案:

答案 0 :(得分:3)

我试用了你的代码并且它正在运行。

你的问题可能在这里:

header("location:register.php");

如果我正确提交表单(用户名&lt; 30和密码1 ==密码2),POST很好,但如果我提交(password1!= password2),标题将重定向回同一页面(register.php) )并且POST将为空。

尝试做

var_dump($_POST);
die();

这里

$username = $_POST["username"];
$password1 = $_POST["password1"];
$password2 = $_POST["password2"];
var_dump($_POST);
die();

你会发现它正在发挥作用。

此外,您应该在连接到DB之前添加更多验证。你应该验证用户名,密码1和密码2的$ _POST,你应该逃避一切,以避免一些常见的攻击,如SQL注入和XSS(跨站点脚本)。

希望这有帮助

答案 1 :(得分:0)

嗯......提交时它是空的?尝试将其添加到php文件的顶部:

if(empty($_SERVER['CONTENT_TYPE']))
{ 
  $_SERVER['CONTENT_TYPE'] = "application/x-www-form-urlencoded"; 
}

好的,现在检查你的php.ini(\ xampp \ php \ php.ini):

post_max_size = 8M
variables_order = "EGPCS"

你需要这两个规则。如果不是,请添加它们并重新启动xampp。

答案 2 :(得分:0)

这可能是由php.ini文件更改引起的问题。如果你在文件中有这一行: post_max_size =“10MB”(应该是8M),这可能是问题。

某些php版本可以将10MB解释为0,从而使数组为空。

有关此问题的更多信息: