我如何验证这个PHP表单?

时间:2014-03-31 02:01:49

标签: php mysql forms

我有一个简单的html表单,看起来像这样

<form action="insert.php" method="post">
Name: <input type="text" name="name"><br>
Password: <input type="text" name="pw"><br>
<input type="submit" value="log in">
</form>

我需要做的是检查此表单中提交的值与我创建的简单数据库中的值。数据库的名称是userdb,在其中我创建了一个名为&#39; users&#39;的简单表,其中有两列名为name和password。

我可以使用

正确连接数据库
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

现在我很困惑(可能是最重要的一点)我必须根据数据库中的某些值来验证表单。

我在phpmyadmin中创建了一个名称和密码条目,名称为&#39; eric&#39;和密码=&#39; 123456&#39;。

我只是不确定如何使用表格检查?

是这样的吗?

$sql = "INSERT INTO `userdb`.`users` (`name`, `password`) VALUES ($name, $pw);";

$name$pw是我从表单名称属性中获取的值。

它告诉我我有未定义的变量,但显然我在这里弄错了。

任何帮助?

*编辑这里是完整的代码:

的index.php

<html> 
<head>
<style>
#main 
{
width: 700px; 
margin-left: auto; 
margin-right: auto; 

}
</style>
</head>
<body> 
<div id="main">


<?php 
$name = ""; 
$pw = ""; 
?>

<form action="insert.php" method="post">
Name: <input type="text" name="name"><br>
Password: <input type="text" name="pw"><br>
<input type="submit" value="log in">
</form>



</div>

</body>
</html> 

insert.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>
<?php

$con=mysqli_connect("localhost","userdb","","");

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  else 
  {
    echo "you are connnected";   
  }



$sql = "INSERT INTO `userdb`.`users` (`name`, `password`) VALUES ($name, $pw);";
?>

</body>
</html>

3 个答案:

答案 0 :(得分:1)

$sql="SELECT * FROM userdb WHERE name='$name' LIMIT 1";

然后获取结果并检查密码是否等于您拥有的密码。

你想要的下一件事就是返回一些东西,并且实际上将用户登录到:

$_SESSION['userid'] = $userid;

或存储任何你想要的东西^。然后检查所有其他页面中是否存在该用户以确定用户是否已登录。

编辑:似乎还需要添加 - 您没有安全地存储密码,而且您还没有正确清理您的字符串(针对SQL注入)。可能想看看^ _ ^。

编辑2 :哦,是的,对于你的问题 - 变量是未定义的,因为你必须使用$_POST['']来获取它们。在''内,输入您期望的变量名称。例如,$_POST['name']获取名称。

答案 1 :(得分:1)

您的POST变量位于错误的文件中。将它们从index.php中取出,然后将它们放在insert.php中:

您还要以纯文本格式存储密码,不建议这样做。如果您的PHP版本是5.5,请使用PHP的password_hash()函数。否则,请使用crypt()bcrypt()

Sidenote password_*函数有密码兼容性包available here

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>

<body>
<?php

$con=mysqli_connect("localhost","userdb","","");
$name=$_POST['name']; // <-- right there
$pw = $_POST['pw'];  // <-- right there

// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  else 
  {
    echo "you are connnected";   
  }



$sql = "INSERT INTO `userdb`.`users` (`name`, `password`) VALUES ('$name', '$pw')";
?>

</body>
</html>

如果要检查插入是否成功,请执行以下操作:

$sql = "INSERT INTO `userdb`.`users` (`name`, `password`) VALUES ('$name', '$pw')";

if (mysqli_query($con,$sql))
  {
  echo "Database updated successfully";
  }
else
  {
  echo "Error: " . mysqli_error($con);
  }

<强>脚注:

为了增加安全性,请更改:

$name=$_POST['name']; // <-- right there
$pw = $_POST['pw'];  // <-- right there

为:

$name=mysqli_real_escape_string($con,$_POST['name']);
$pw = mysqli_real_escape_string($con,$_POST['pw']);

登录方式:(旁注:如果可能,请使用顶部显示的密码存储方法)。

如果要将其用作登录方法,可以使用以下内容:

$con = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
OR die("could not connect");

$user = mysqli_real_escape_string($con,$_POST['name']);
$pass = mysqli_real_escape_string($con,$_POST['pw']);

$query = "SELECT * FROM your_table WHERE name='$user' AND password='$pass'";
$result = mysqli_query($con,$query);


$row = mysqli_fetch_array($result);
if($row["name"]==$user && $row["password"]==$pass){
    echo "You are a validated user.";
    }

else{
die("Sorry.");
}

答案 2 :(得分:0)

我建议您使用PHP Data Objects处理数据。

我不确定你到底想要什么。您想要创建登录页面还是注册页面?

//连接数据库

$ DSN = '的MySQL:DBNAME = USERDB宿主=本地主机';

$ DBU = ''; //你的数据库用户名在这里

$ DBP = ''; //你的数据库密码就在这里

尝试{

$dbh=new PDO($dsn,$dbu,$dbp);

} catch(PDOException $ e){

echo 'Connection failed: '. $e->getMessage();

}

如果是登录页面,请使用:

//检查名称和密码

$ sth = $ dbh-&gt; prepare('SELECT 1 FROM users WHERE name =?AND password =?');

$ sth-&gt;执行(数组($ _ POST [“name”],$ _POST [“pw”]);

$行= $ sth-&GT;使用fetchall(PDO :: FETCH_ASSOC);

if(count($ row)== 1){

回显“正确的名称和密码”;

}其他{

echo“错误的名称或密码”;

}

如果是注册页面,请使用:

//插入名称并传递

$ sth = $ dbh-&gt; prepare('INSERT INTO users(name,password)VALUES(?,?)');

$ sth-&gt;执行(数组($ _ POST [“name”],$ _POST [“pw”]);