我正在尝试使用mysqli,php插入表单数据。我遇到的问题是它在表格中插入"?"作为表单值,而不是我在表单中键入的内容?我知道我在某个地方出错了,但我无法弄清楚。
我的附加问题是:使用这样的 mysqli 语句从数据库中插入或选择数据是否安全,因为我想 $_POST 成为注入攻击的威胁。现在我在这里写的内容是否足以防止攻击,或者我需要添加更多内容?
任何建议都会有很大帮助。
这是我的代码
索引.php
<?php
session_start();
include('db.php');
?>
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="stylesheet" type="text/css" href="style.css"/>
</head>
<body>
<?php
if(isset($_POST['login']) && $_POST['login'] == 'Login') {
$loginEmail = $_POST['loginEmail'];
$loginPassword = $_POST['loginPassword'];
$query = $db->prepare("INSERT INTO dbname(password,email) VALUES ('?','?');");
$query->bind_param("ss",$loginEmail,$loginPassword);
$query->execute();
}
?>
<div id="login">
<strong>Login</strong>
<br/><br/>
<form action = "<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
<table style="width:500px">
<tr>
<td><input type="text" name="loginEmail" placeholder = "Email" required/><br/></td>
</tr>
<tr>
<td><input type="password" name="loginPassword" placeholder = "Password" required/><br/></td>
</tr>
</table>
<input style="font-weight: bold; width: 70px; height: 25px; border-radius: 5px;" type="submit" name="login" value="Login"/>
</form>
</div>
</body>
</html>
数据库.php
<?php
$host = 'host';
$user = 'user';
$password = 'password';
$database = 'dbname';
$db = new mysqli($host, $user, $password, $database);
if($db->connect_errno > 0){
die('Unable to connect to database ['.$db->connect_errno.']');
}
?>
使用
$db->prepare("INSERT INTO users(password,email) VALUES (?, ?);");
而不是
$db->prepare("INSERT INTO users(password,email) VALUES ('?','?');");
顺序很重要:在您的bind_param()
中,您的电子邮件和密码顺序与查询中的顺序相反。
删除 INSERT 查询中的引号。
$query = $db->prepare("INSERT INTO dbname(password,email) VALUES (?,?);");
另外,我建议您使用stripslahes()和trim()之类的函数
。用:
$loginEmail = trim (stripslashes( $_POST['loginEmail'] ));
$loginPassword = stripslashes( $_POST['loginPassword'] );