0

我已经弄清楚了这段代码,但是用户使用提交按钮提交的条目不会去任何地方。有什么办法可以解决这个问题,还是我应该只使用 $_POST 方法?

PHP代码:

    <?php
include ("dbroutine.php");
function register() {
$connect = db_connect;
if (!$connect)
{
die(mysql_error());
}
$select_db = mysql_select_db(securitzed, $connect);
if (!$select_db) {
die(mysql_error());
}
//Collecting info
$fname = $_REQUEST ['fname'];
$lname = $_REQUEST ['lname'];
$username = $_REQUEST['username'];
$password = $_REQUEST['password'];
$email = $_REQUEST['email'];

//Here we will check do we have all inputs filled

if(empty($_REQUEST['username'])){
die("Please enter your username!<br>");
}

if(empty($_REQUEST['password'])){
die("Please enter your password!<br>");
}


if(empty($_REQUEST['email'])){
die("Please enter your email!");
}

//Let's check if this username is already in use
$user_check = mysql_query("SELECT username FROM members WHERE username = '".$_REQUEST

['username']."'");
$do_user_check = mysql_num_rows($user_check);
//Now if email is already in use
$email_check = mysql_query("SELECT email FROM members WHERE email= '".$_REQUEST['email']."'");
$do_email_check = mysql_num_rows($email_check);
//Now display errors
if($do_user_check > 0){
die("Username is already in use!<br>");
}
if($do_email_check > 0){
die("Email is already in use!");
}


//If everything is okay let's register this user
$insert = mysql_query("INSERT INTO members (username, password, email) 
VALUES ('".$_REQUEST['username']."', '".$_REQUEST['password']."', '".$_REQUEST['email']."', '".$_REQUEST['fname']."', '".$_REQUEST['lname']."')");
if(!$insert){
die("There's little problem: ".mysql_error());
}


}
switch($act){
case "register";
register();
break;
}

HTML 代码:

   <body>

        <form method="post">
            First Name: <input type="text" name="fname" value="" /> <br />
            Last Name: <input type="text" name="lname" value="" /> <br />
            E-mail: <input type="email" name="email" value="" /> <br />
            Desired Username: <input type="text" name="username" value="" /> <br />
            Password: <input type="password" name="password" value="" /> <br />
            Confirm Password: <input type="password" name="passwordconf" value="" /> <br />
            <input type="submit" value="Submit"/>
        </form>

    </body>

如果我需要添加任何东西,谁能指出,如果没有,我还可以根据需要添加一些额外的代码。

4

4 回答 4

1

$_REQUEST包含:$_COOKIE、、$_GET$_POST变量。如果您使用$_REQUEST,则无法保证数据来自发布数据,这会导致脚本中存在安全漏洞。我会使用$_POST,但是通过使用这种方法,您很容易受到SQL 注入的攻击。

$_GET从查询字符串或您的 URL 中检索变量。$_POST从 POST 方法中检索变量,例如(通常)表单。$_REQUEST$_GET$_POSTwhere $_POSToverrides的合并$_GET

使固定

您必须在表单中指定操作,如下所示。

<form action="fetch_data.php" method="post">

<form action="URL">

URL- 提交表单时将表单数据发送到哪里。可能的值:

  • 绝对 URL - 指向另一个网站(如 action="http://www.example.com/example.htm")

  • 相对 URL - 指向网站内的文件(如 action="example.htm")

于 2013-04-09T06:26:16.577 回答
1

首先,我建议您阅读有关变量的更多信息。

其次$_REQUEST是一个变量,如$_POST、等$_SESSION$_GET可以存储到您的数据库中。因此,对于您的问题,是的,您可以使用$_REQUEST在 MySQL 数据库中插入数据

但是,将其用作$_POST变量的替代品根本不安全,也不是一个好习惯。看看这个,看看$_POST变量是如何工作的。

第三,您在代码中使用mysql_*函数。请考虑使用PDOorMYSQLI来防止 SQL INJECTION 并更好地保护您的网站。此外,MYSQL 在 PHP 5.5 及更高版本中被复制。看看这个教程,它向你展示了如何使用 PDO 而不是 MYSQL。

第四,您不应该将密码直接存储到数据库中,您需要某种形式的密码散列。在此处阅读更多信息

于 2013-04-09T06:27:48.440 回答
0
  • ACTION在您的 HTML 中使用form
  • 还要从sql注入中清理数据。
  • 检查来自的数据$_REQUEST是否不为空。
于 2013-04-09T06:25:19.743 回答
0

尝试使用

    $fname = $_POST ['fname'];
$lname = $_POST ['lname'];
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];

您还可以执行以下操作来检查请求参数

var_dump($_POST); 
于 2013-04-09T06:27:41.980 回答