如何验证此php表单?

如何验证此php表单?,php,mysql,forms,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> 现在我对最重要的一点感到困惑,那

我有一个简单的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>
现在我对最重要的一点感到困惑,那就是我必须根据数据库中的一些值验证表单

我在phpmyadmin中为name='eric'和password='123456'创建了一个名称和密码条目

我只是不知道如何用表格检查

是这样的吗

$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>
然后获取结果并检查密码是否等于您拥有的密码

接下来,您需要返回一些内容,并让用户实际登录,请执行以下操作:

$_SESSION['userid'] = $userid;
或者储存你想要的任何东西。然后检查您的所有其他页面中是否存在这种情况,以确定用户是否已登录

编辑:似乎还需要添加-您没有安全地存储密码,也没有针对SQL注入正确地清理字符串。我想调查一下


编辑2:哦,是的,对于你的问题-变量是未定义的,因为你必须使用$\u POST[]获取它们。在中,输入所需变量的名称$_例如,POST['name']以获取名称。

您的POST变量位于错误的文件中。将它们从index.php中取出并放入insert.php,如下所示:

您还以明文形式存储密码,这是不推荐的。如果您的PHP版本为5.5,请使用PHP函数。否则,请使用crypt或bcrypt

旁注:password_*函数有一个密码兼容包

<!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>
脚注:

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

$name=$_POST['name']; // <-- right there
$pw = $_POST['pw'];  // <-- right there
登录方法:侧注:如果可能,请使用顶部显示的密码存储方法

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

$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.");
}

我建议您使用这个方法来处理数据

我不太清楚你到底想要什么。您要创建登录页还是注册页

//连接数据库

$dsn='mysql:dbname=userdb;主机=本地主机'

$dbu=//你的数据库 用户名在这里

$dbp=//你的数据库密码在这里

试一试{

}捕获$e{

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

如果是登录页面,请使用以下命令:

//检查姓名和密码

$sth=$dbh->prepare'从name=?密码=?'

$sth->executearray$_POST[name],$_POST[pw]

$row=$sth->fetchAllPDO::FETCH_ASSOC

如果count$row==1{

回显正确的姓名和密码

}否则{

回显错误的名称或密码

}

如果是注册页面,请使用以下选项:

//插入姓名和通行证

$sth=$dbh->准备“插入用户名、密码值?,?”


$sth->executearray$_POST[name],$_POST[pw]

您是否没有将变量定义为$name=$\u POST['name'];等在没有看到完整代码的情况下,很可能就是这样。另外,你说我不知道如何用表格检查是什么意思?是否要检查它是否已存在?显示完整代码。在此处发布您的完整相关代码,包括$name和$pw定义。我想提及使用此代码进行SQL注入的可能性。需要添加的一个重要内容是,密码不应以明文形式存储在数据库中。更好的做法是将密码的散列存储在数据库中,对表单中提供的密码进行散列,然后将其与数据库中的值进行比较。@Marty,就是这样吗?他存储密码的方式如何?@Shahar我更关心SQL注入,而不是纯文本密码。就我而言,我看不出这与会话有什么关系。另外,正如OP所说的,它告诉我我有未定义的变量,尽管很明显我在这里搞错了。这是如何修复OP的未定义错误的呢?哦,现在可以消除错误了,但是我如何使它显示登录是否成功呢?现在我可以在表单中输入任何旧垃圾,它不会给出错误?我需要它来检查登录是否与数据库条目匹配,然后说success/fail。好吧,我想它几乎可以工作了,它只是说未定义的变量:现在在第24行的C:\xampp\htdocs\validate\insert.php中发布?哦,我想这已经很接近了,除了我糟糕的语法。如果是关于登录方法的,请重新加载它。我在mysqli\u real\u escape\u字符串$con、$\u POST中都犯了一个小错误@granvi11e,读作mysqli\u real\u escape\u字符串$con,$POST。。。我以前忘了下划线POST@granvi11e至于如何检查插入是否成功,请查看另一个编辑下的内容:如果要检查插入是否成功,请执行:这只是一个简单的验证页面。是的,我想是一个登录页面。好的,我将尝试此操作。连接失败:用户“$dbu”@'localhost”使用密码的SQLSTATE[HY000][1045]访问被拒绝:是的,我想是因为数据库没有密码?我只是把它设为默认值,没有通过
wordsorry忘了删除,应该是$dbh=newpdo$dsn,$dbu,$dbp;
$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.");
}
$dbh=new PDO($dsn,$dbu,$dbp);
echo 'Connection failed: '. $e->getMessage();