我有一个简单的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>
答案 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”]);