如何使用MySqli/PHP插入表单数据?
我正在尝试使用mysqli,php插入表单数据。我遇到的问题是,它在表中插入“?”作为表单值,而不是我在表单中键入的内容?我知道我在某个地方出错了,但我没办法弄明白 我的另一个问题是:像这样使用mysqli语句从数据库中插入或选择数据是否安全,因为我猜$\u POST会成为注入攻击的威胁,。现在我在这里写的内容是否足以防止攻击,或者我是否需要添加更多内容 任何建议都会大有帮助 这是我的密码 index.php如何使用MySqli/PHP插入表单数据?,php,mysql,forms,mysqli,Php,Mysql,Forms,Mysqli,我正在尝试使用mysqli,php插入表单数据。我遇到的问题是,它在表中插入“?”作为表单值,而不是我在表单中键入的内容?我知道我在某个地方出错了,但我没办法弄明白 我的另一个问题是:像这样使用mysqli语句从数据库中插入或选择数据是否安全,因为我猜$\u POST会成为注入攻击的威胁,。现在我在这里写的内容是否足以防止攻击,或者我是否需要添加更多内容 任何建议都会大有帮助 这是我的密码 index.php <?php session_start();
<?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
$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 ('?','?');");
注:顺序很重要:在您的
bind_param()
中,电子邮件和密码的顺序与查询中的顺序相反。删除插入查询中的引号
$query = $db->prepare("INSERT INTO dbname(password,email) VALUES (?,?);");
另外,我建议您使用和之类的函数
使用:
准备好的语句中有语法错误,未检查错误。然后你用纯文本作为密码。如果你还活着或者打算继续活着,不要。使用
密码\u hash()
。您不应该在数据库中存储纯文本密码。请参阅和@fred:您的意思是密码\u散列($loginPassword)?请查阅@riggsfully提供给您的链接。都在里面;-)下面你也有一个上浮的答案。(彼得的)。$query->execute()
=>如果(!$query->execute()){trigger_error(“有一个错误…)“$db->error,E_USER_WARNING)}
你会看到语法错误,顺便说一句。@BishwaroopChakraborty Ref:trim()
密码?另外,为什么在使用预先准备好的语句时还要使用额外的无用函数呢!但是trim当然可以使用。看看这个堆栈上的问答,你就会明白我的意思了。另外,如果用户的密码或用户中有\,则您发布的内容可能会失败。无论如何都不应操纵密码数组。
$query = $db->prepare("INSERT INTO dbname(password,email) VALUES (?,?);");
$loginEmail = trim (stripslashes( $_POST['loginEmail'] ));
$loginPassword = stripslashes( $_POST['loginPassword'] );