-1

我刚刚开始使用 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、username、password 和 rank。最后我创建了另一个脚本,将用户输入的数据插入数据库:

<?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

我可能做错了什么?

4

7 回答 7

2

您在 $_POST 中访问了错误的名称

$username1 = $_POST ['username'];
$password1 = $_POST ['password'];
于 2013-08-03T19:32:18.153 回答
1

您使用的name="username"不是username1您的 PHP。

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

也是type错误的。

于 2013-08-03T19:31:46.270 回答
1

您在输入标签中的类型应该是“文本”:

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

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

$username1 = $_POST ['username'];
于 2013-08-03T19:32:52.653 回答
1

改变这个:

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

进入这个

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

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

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

有关如何防止这种情况的更多信息,请参阅如何防止 PHP 中的 SQL 注入?

于 2013-08-03T19:35:10.390 回答
0

首先,

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

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

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

因此,请阅读一点,然后再尝试一下。

干杯!

于 2013-08-03T19:37:53.470 回答
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 内部的进一步错误。

于 2013-08-03T19:57:29.513 回答
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用户的quote?我猜那是和 INt (可能是自动增量),在这种情况下,您根本不必包含该字段。其次,您错过了实际插入语句中的括号。

<?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_* 函数已被弃用(这意味着这些函数将来不会工作)。

于 2013-08-03T20:26:41.777 回答