我已经找到了这个代码,但是用户使用提交按钮提交的条目不会随处可见。有没有办法解决这个问题,还是应该使用$ _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 code:
<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>
如果我需要添加任何内容,任何人都可以指出,如果没有,我还可以根据需要添加一些额外的代码。
答案 0 :(得分:1)
$_REQUEST
包含:$_COOKIE
,$_GET
和$_POST
个变量。如果您使用$_REQUEST
,则无法保证数据来自帖子数据,这会导致脚本出现安全漏洞。我会使用$_POST
但是使用此方法您很容易受到SQL injections的攻击。</ p>
$_GET
从查询字符串或您的网址中检索变量。 $_POST
从POST方法中检索变量,例如(通常)表单。 $_REQUEST
是$_GET
和$_POST
的合并,其中$_POST
会覆盖$_GET
。
您必须在表单中指定操作,如下所示。
<form action="fetch_data.php" method="post">
<form action="URL">
URL
- 提交表单时发送表单数据的位置。
可能的值:
绝对网址 - 指向另一个网站(如 行动=&#34; HTTP://www.example.com/example.htm")
相对网址 - 指向网站内的文件(例如action =&#34; example.htm&#34;)
答案 1 :(得分:1)
首先,我建议您阅读有关变量的更多信息。
第二次,$_REQUEST
是一个变量,如$_POST
,$_SESSION
,$_GET
等等,可以存储到您的数据库中。因此,对于您的问题,是的,您可以使用$_REQUEST
在MySQL数据库中插入数据
然而,使用它作为$_POST
变量的替代品根本不安全,不是一个好习惯。请查看this,了解$_POST
变量的工作原理。
第三次,您在代码中使用mysql_*
个函数。请考虑使用PDO
或MYSQLI
来阻止SQL INJECTION并更好地保护您的网站。此外,MYSQL在PHP 5.5及更高版本中重复使用。看看this教程,它向您展示了如何使用PDO而不是MYSQL。
第四,您不应该将密码直接存储到数据库,您需要某种形式的密码散列。详细了解here
答案 2 :(得分:0)
ACTION
中使用form
。sql
注入数据。$_REQUEST
的数据是否为空。答案 3 :(得分:0)
尝试使用
$fname = $_POST ['fname'];
$lname = $_POST ['lname'];
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
您还可以执行以下操作来检查请求参数
var_dump($_POST);