【发布时间】:2021-07-13 09:50:16
【问题描述】:
问题很简单 (一切,php 和 html 都在一个文件中(.php))
<?php
try {
$bdd = new PDO('mysql:host=localhost;dbname=dlp;charset=utf8', /*the PDO works*/);
} catch(Exception $e) {
die('Erreur : '.$e->getMessage());
}
if(isset($_POST["name"], $_POST["pass"], $_POST["mail"])
&& !empty($_POST["name"]) && !empty($_POST["pass"]) && !empty($_POST["mail"])) { //that works
if(!filter_var($_POST["mail"], FILTER_VALIDATE_EMAIL)) { //that works
die("adresse email invalide");
}
$name=strip_tags(($_POST["name"])); //that works
$pass=password_hash($_POST["pass"], PASSWORD_ARGON2ID); //that works
$stmt="INSERT INTO `users`
(`name`, `pass`, `mail`, `role`)
VALUES (:name, '$pass', :mail, '[\"ROLE_USER\"]')";
$query=$bdd->prepare($stmt);
$query->bindvalue(':name', $name);
$query->bindvalue(':mail', $_POST["mail"]);
$query->execute();
}else{
die('formulaire incomplet');
}
?>
html部分:
</div>
<form method="post">
<section class="formulaireTitreCulture">
<label for="name">name</label>
<input type="name" name="name"></input>
</section>
<section class="formulaireTitreCulture">
<label for="motdepasse">Mot de passe</label>
<input id="motdepasse" name="pass"></input>
</section>
<section class="formulaireTitreCulture">
<label for="">Mail</label>
<input name="mail" id="mail">
</section>
<input type="submit" value="Envoyer">
</form>
</div>
结果是 die('formulaire incomplet');,数据库中没有写入任何内容,我不明白为什么。 欢迎任何线索!提前致谢
【问题讨论】:
-
为什么不将密码和角色作为绑定变量以及所有其他列数据传递
-
这个
'[\"ROLE_USER\"]'看起来有点不必要的复杂。你能解释一下你希望列数据的样子吗,所以也许我们理解你试图在那里构建的字符串 -
我是 php 新手! '[\"ROLE_USER\"]' 是 JSON,我不确定,但我的目标是使用角色分配对数据库的定义访问权限。使用“正常”,它的工作表列是:``` id name pass mail role ```
-
旁注:如果你正在检查
!empty($_POST[...]),你也不需要isset()。 stackoverflow.com/questions/4559925/… -
<input type="name"... 据我所知,name不是有效的输入类型。你的意思是id="name"?检查表单实际发送的内容。做一个var_dump($_POST);。由于您说 PHP 和表单在同一个文件中,因此在提交表单之前,首次加载时,发布的代码将始终以die('formulaire incomplet');结尾。