$ _POST没有检索数据?

时间:2013-08-03 19:29:46

标签: php mysql

我刚刚启动了php和html,我正在创建一个供个人使用的小游戏。无论如何,我写了一个脚本,你只需输入数据来创建一个帐户,然后你提交它:

    

<?php include 'header.php';
?>


<br>
<br>
<br>
<table border="1" align="center" cellpadding='25'>
<tr>
<td align='middle'>
<form method='POST' action='insertuser.php' align= 'right'>
Username: <input type='username' name='username'> <br> 
Password: <input type='password' name='password'> <br>
Confirm Password: <input type='Password'> <br>
Email: <input type='username'> <br>
<input type='submit' name='submit' align = 'center'>

</td>
</tr>
</table>

    <
<table align='right'>
<tr>
<td>
<image src='stillneedimage(square).jpg'>
</td>
</tr>
</table>


<table align='left'>
<tr>
<td>
<image src='stillneedimage(square).jpg'>
</td>
</tr>
</table>



</body>
</html>

然后我用phpmyadmin创建了一个数据库,在里面我有一个名为members的表。目前数据库中有4个表,id,用户名,密码和排名。最后我创建了另一个脚本,用于将用户输入的数据插入到数据库中:

<?php

include_once "mysqlconnecter.php";
$username1 = $_POST ['username'];
$password1 = $_POST ['password'];


mysql_query("INSERT INTO members Values ('','$username1','$password1','' ") or
     die('could not insert member, please try again');



?>

它没有完成,但它的工作是将数据插入数据库。当我运行脚本时,它给了我这个错误:

Notice: Undefined index: username in E:\PortableApps\xampp- 
portable\htdocs\xampp\insertuser.php on line 4

Notice: Undefined index: password in E:\PortableApps\xampp-
portable\htdocs\xampp\insertuser.php on line 5
could not insert member, please try again

我可能做错了什么?

7 个答案:

答案 0 :(得分:2)

您在$ _POST

中访问了错误的名称
$username1 = $_POST ['username'];
$password1 = $_POST ['password'];

答案 1 :(得分:1)

您在PHP中使用name="username"而不是username1

$username1 = $_POST['username'];
$password1 = $_POST['password'];

type也是错误的。

答案 2 :(得分:1)

输入标记中的类型应为“text”:

Username: <input type='text' name='username'> <br> 

您从$_POST获取的名称必须与表单中的名称相匹配:

$username1 = $_POST ['username'];

答案 3 :(得分:1)

改变这个:

 $username1 = $_POST ['username1'];
 $password1 = $_POST ['password1'];

进入这个

 $username1 = $_POST['username'];
 $password1 = $_POST['password'];

HTML表单输入称为“用户名”和“密码”,这些名称将传递给$_POST变量。

现在,您不会清理数据库输入。尝试创建名为bobby'); DROP TABLE members;--的用户。请务必备份成员表。 (剧透:它会丢掉你的桌子)

有关如何防止出现此问题的详情,请参阅How can I prevent SQL injection in PHP?

答案 4 :(得分:0)

首先,

没有input type="username"。您应该使用的是input type="text"

其次,HTML表单中没有元素,其名称属性设置为“username1”或“password1”。我希望你注意到了。因此,相应地修改PHP文件。

即使在此之后你也会面临很多错误。这是因为在执行MySQL查询之前,您需要实际连接到数据库。

所以请稍微阅读一下,然后再尝试一下。

干杯!

答案 5 :(得分:0)

除了表单的结束标记外,您发布的代码中没有错误。我复制了相同的代码并且工作正常。我改变的是,

<html>

<head>
<title>Althaf</title>
</head>

<body bgcolor="gray">
<b>Welcome to <i>html</i></b><br>
<?php include 'header.php';
?> 
<br>
<br>
<br>
<table border="1" align="center" cellpadding='25'>
<tr>
<td align='middle'>
<form method='POST' action='insertuser.php' align= 'right'>
Username: <input type='username' name='username'> <br> 
Password: <input type='password' name='password'> <br>
Confirm Password: <input type='Password'> <br>
Email: <input type='username'> <br>
<input type='submit' name='submit' align = 'center'>

</td>
</tr>
</table>

    </form><!-- Here was the missing tag-->
<table align='right'>
<tr>
<td>
<image src='stillneedimage(square).jpg'>
</td>
</tr>
</table>


<table align='left'>
<tr>
<td>
<image src='stillneedimage(square).jpg'>
</td>
</tr>
</table>



</body>
</html>

在insertuser.php中,

<?php


$username1 = $_POST ['username'];
$password1 = $_POST ['password'];


echo $username1;
echo $password1;


?>

我要去田地了。所以,可能是DBconnecting php内部的进一步错误。

答案 6 :(得分:0)

为避免表单中出现问题,请添加</form> - 标记并更改为type ='text'。 type-attribute指示元素的类型,而不是元素的标识名称。你有名字属性。

<table border="1" align="center" cellpadding='25'>
<tr>
<td align='middle'>
<form method='POST' action='insertuser.php' align= 'right'>
Username: <input type='text' name='username'> <br> 
Password: <input type='text' name='password'> <br>
Confirm Password: <input type='text' name='confirmPassword'> <br> <!-- changed name -->
Email: <input type='text' name='username'> <br>
<input type='submit' name='submit' align = 'center'>
</form> <!--added here -->
</td>
</tr>
</table>

查看insertuser.php

<?php
include_once "mysqlconnecter.php";
$username1 = $_POST ['username'];
$password1 = $_POST ['password'];

mysql_query("INSERT INTO members Values ('','$username1','$password1','' ") or
     die('could not insert member, please try again');
?>

我注意到了一些事情。第一个是memberID用户的qutoes?我想那是和INt(可能是自动增量),在这种情况下你根本不需要包括那个字段。其次,你错过了实际的insert语句中的括号。

<?php
include_once "mysqlconnecter.php";
$username1 = $_POST ['username'];
$password1 = $_POST ['password'];

mysql_query("INSERT INTO members Values ('$username1','$password1','')") or
     die('could not insert member, please try again');
?>

也许最重要的部分是您必须清理数据,以便不需要的数据无法进入数据库。您可以做(也应该做)的最简单检查是至少检查元素是否已分配:

<?php
include_once "mysqlconnecter.php";
$username1 = $_POST ['username'];
$password1 = $_POST ['password'];

if (isset($username1) && isset($password1)) { //Execute query only if username and password are given/exists
  /* PUT IN CODE HERE 
    for sanizting username and password with certain rules
    and comparing field password with confirmPassword
  */
    mysql_query("INSERT INTO members Values ('$username1','$password1','')") or
     die('could not insert member, please try again');
}
?>

通过这种方式,你不应该得到你所描述的那些错误。同时用密码检查confirmPassword的值以查看它们是否相等(如果你不这样做,则confirmPassword-field是无用的)

我真的建议从mysql_ *函数切换到PDO或mysqli,因为不推荐使用mysql_ *函数(意味着将来这些函数不起作用)。