在以下代码中,php变量不接收来自html表单的数据。代码直接执行if-else语句而不等待输入。
<?php
if(mysql_connect("localhost","root","")==false)
{
die ("Connection Failed");
}
mysql_select_db("fb");
$id=$_POST["email"];
$pwd=$_POST["password"];
$sql=mysql_query("SELECT* FROM admin WHERE id='$id' AND pass='$pwd'");
if($sql)
{
die ("Login");
}
else
{
die ("Failed");
}
?>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset="UTF-8" />
<title>
HTML Document Structure
</title>
<!--<link rel="stylesheet" type="text/css" href="style.css" />!-->
</head>
<body>
<form method="POST">
<h1>Welcome</h1>
<div class="inset">
<p>
<label for="email">Login</label>
<input type="text" name="email" id="email">
</p>
<p>
<label for="password">PASSWORD</label>
<input type="password" name="password" id="password">
</p>
</div>
<p class="p-container">
<span>Forgot password ?</span>
<input type="submit" name="Login" id="Login" value="Log in">
</p>
</form>
</body>
</html>
我知道这段代码很容易受到SQL注入攻击,但谁知道它是否是一个归属分配。 :)
答案 0 :(得分:4)
代码直接执行if-else语句而不等待输入。
原因是您将整个代码(HTML / PHP / SQL)放在一个文件中,没有条件语句来控制它。
使用提交按钮的名称元素if(isset($_POST['Login']))
将解决此问题。
另一种选择是使用两个单独的文件。一个使用您的表单,另一个使用PHP / SQL并为表单的操作设置action="handler.php"
。
<form method="POST">
相当于<form method="POST" action="">
(自我)。
<?php
if(mysql_connect("localhost","root","")==false)
{
die ("Connection Failed");
}
mysql_select_db("fb");
$id=$_POST["email"];
$pwd=$_POST["password"];
if(isset($_POST['Login'])){
$sql=mysql_query("SELECT * FROM admin WHERE id='$id' AND pass='$pwd'");
if($sql)
{
die ("Login");
}
else
{
die ("Failed");
}
} // brace for if(isset($_POST['submit']))
?>
以下链接将在稍后帮助您。
对于密码,CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
另外,mysqli
with prepared statements或PDO with prepared statements。
另外,使用or die(mysql_error())
到mysql_query()
而不是现在的方式。它会发出实际错误信号,如果有的话。
答案 1 :(得分:0)
代码直接执行if-else语句而不等待输入。
然后告诉它在输入后执行这些操作。
if($_POST) {
$id=$_POST["email"];
$pwd=$_POST["password"];
$sql=mysql_query("SELECT* FROM admin WHERE id='$id' AND pass='$pwd'");
if($sql)
{
die ("Login");
}
else
{
die ("Failed");
}
}
我知道这段代码很容易受到SQL注入攻击,但是谁关心它是否是一个归属分配。
由于项目的性质,永远不要放弃安全。你会落入一个陷阱,然后它会在以后的生活中咬你。无论项目如何,请确保您的应用程序安全。