我刚刚启动了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
我可能做错了什么?
答案 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_ *函数(意味着将来这些函数不起作用)。