1

所以我试图创建这个表单,每次我尝试创建一个虚拟用户时,它都会在数据库中创建一个空用户。

这是 php 代码create.php

<?php
  session_start();
  include ('connection.php');

  $username = $_POST['usernamesignup'];
  $email = $_POST['emailsignup'];
  $password = $_POST['passwordsignup'];

  mysql_query("INSERT INTO users (usernamesignup, passwordsignup, emailsignup) 
         VALUES ('$username', '$password', '$email')")or die (mysql_error());
  header('Location: login.html');
  mysql_close($db);
?>

这是表单Login.html的一部分:

<form  action="create.php" autocomplete="on"> 
  <h1> Sign up </h1> 
  <p><label for="usernamesignup" class="uname" data-icon="u">Your username</label>
  <input id="usernamesignup" name="usernamesignup" required="required" type="text" placeholder="mysuperusername690" /></p>
  <p><label for="emailsignup" class="youmail" data-icon="e" > Your email</label>
  <input id="emailsignup" name="emailsignup" required="required" type="email" placeholder="mysupermail@mail.com"/></p>
  <p><label for="passwordsignup" class="youpasswd" data-icon="p">Your password </label>
  <input id="passwordsignup" name="passwordsignup" required="required" type="password" placeholder="eg. X8df!90EO"/></p>
  <p><label for="passwordsignup_confirm" class="youpasswd" data-icon="p">Please confirm your password </label>
  <input id="passwordsignup_confirm" name="passwordsignup_confirm" required="required" type="password" placeholder="eg. X8df!90EO"/></p>
  <p class="signin button"><input type="submit" value="Sign up"/></p>
  <p class="change_link">Already a member?<a href="#tologin" class="to_register"> Go and log in </a></p>
</form>

任何帮助将不胜感激。

编辑:添加方法:“post”起到了作用。非常感谢你们所有人的快速响应以及关于安全性的非常有效的建议,以及关于我应该如何更改为更新的表格而不是我在这里使用的表格。

4

6 回答 6

2

您需要在您的情况下指定 POST 的表单方法。尝试

<form action="create.php" autocomplete="on" method="POST"> 
于 2013-07-29T21:03:09.357 回答
1

您必须检查表单发送的值是否不为 null 或带有空字符串。请非常小心,您的代码容易受到 sql 注入的影响,并在 sha512 或类似的东西中散列您的密码。

看看这个功能: http: //php.net/manual/en/function.empty.php

并尝试将其添加到您的表单中:

<form  action="create.php" autocomplete="on" method="post"> 
于 2013-07-29T21:00:51.773 回答
1

尝试将此添加到您的表单标签

method='post'
于 2013-07-29T21:02:19.740 回答
0

表单的默认方法是 GET,而您正试图从 POST 中获取您的值,所以它们是空的...

你应该做:

$password = $_GET['password'];
// etc.

或者,如果您不知道:

$password = $_REQUEST['password'];
// etc.
于 2013-07-29T21:02:20.490 回答
0

请考虑包括<form action="create.php" autocomplete="on" method="POST">

请我求你,不要将原始密码存储在数据库中,只需使用加密方法。并使用PDO而不是mysql_*

见这里: http: //net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

于 2013-07-29T21:06:28.753 回答
0
  1. 我建议您使用 mysqli 类。我自己在较小的项目中使用过这个:https ://github.com/ajillion/PHP-MySQLi-Database-Class

  2. 您的代码中缺少“表单验证”。如果您将验证正确集成到表单和后端代码中,这可以防止空表单和恶意表单提交

  3. 一个如何确保在特定字段中输入数据的简单示例,试试这个:

 

<?php
if (empty($_POST['usernamesignup']), empty($_POST['...']))
{
    echo 'Not all required data was submitted';
}
else
{
    // Process the form, all data was received
}

4. 有没有考虑过使用 php 框架?如果您想要更高级和更实用的东西,请尝试使用CodeigniterLaravel 。

于 2013-07-29T21:13:36.663 回答