如何验证此php表单?
我有一个简单的html表单,如下所示如何验证此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> 现在我对最重要的一点感到困惑,那
<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();