我面临的这个问题对我来说很不寻常。我实际上要做的是通过HTML表单将数据插入到mysql数据库表中。
我有一个数据库,我正在尝试将数据插入其中,但它总是显示"重复输入错误"。
问题是尽管检查我输入的信息是唯一的,但它显示错误。当我检查我的数据库表时,我可以看到每次条目将id递增2.我不知道为什么是我的查询插入数据两次,并使主键增加2,请帮助我希望每件事都正常。
我无法解决,请帮助我。
这是表格
的html代码<form class="form-horizontal" name="RegisterCandidate" action="../processors/process_register_candidate.php" method="post" enctype="application/x-www-form-urlencoded">
<div class="form-group">
<label for="Fname" class="control-label col-sm-4">
First Name
</label>
<div class="col-sm-8">
<input type="text" class="form-control" name="Fname" tabindex="1" autofocus required placeholder="First Name" />
</div>
</div>
<div class="form-group">
<label for="Lname" class="control-label col-sm-4">
Last Name
</label>
<div class="col-sm-8">
<input type="text" class="form-control" name="Lname" tabindex="2" required placeholder="Last Name" />
</div>
</div>
<div class="form-group">
<label for="Photo" class="control-label col-sm-4">
Photograph
</label>
<div class="col-sm-8">
<input type="file" class="form-control" name="Photo" tabindex="3" placeholder="Select Photo" />
</div>
</div>
<div class="form-group">
<label for="DOB" class="control-label col-sm-4">
Date of Birth (DD-MM-YYYY)
</label>
<div class="col-sm-8">
<input type="date" class="form-control" name="dob" tabindex="4" required />
</div>
</div>
<div class="form-group">
<label for="password" class="control-label col-sm-4">
Password
</label>
<div class="col-sm-8">
<input type="password" class="form-control" name="password" tabindex="5" required placeholder="Password" />
</div>
</div>
<div class="form-group">
<label for="contact" class="control-label col-sm-4">
Contact No.
</label>
<div class="col-sm-8">
<input type="tel" class="form-control" name="contact" tabindex="6" required placeholder="Contact Number" />
</div>
</div>
<button type="submit" name="register" class="btn btn-success" style="float:right; margin-right:30%;">
Register
</button>
</form>
这是我的php-mysql代码的副本
<?php
require_once "../web_config/web.config.php";
$conn = connect();
$fname = $_POST["Fname"];
$lname = $_POST["Lname"];
$dob = $_POST["dob"];
$password = $_POST["password"];
$contact = $_POST["contact"];
$insert = " INSERT INTO `candidates`
(
`Fname`,
`Lname`,
`dob`,
`password`,
`contact`
) VALUES (
'$fname',
'$lname',
'$dob',
'$password',
'$contact'
)
";
try{
$st = $conn->query($insert);
$st->execute();
} catch(PDOException $e) {
echo "//Failed to insert data due to ".$e->getMessage();
}
echo $fname." ".$lname;
#header("Location:../src/student_login.php");
?>
请帮我解决这个问题。 谢谢。
答案 0 :(得分:3)
所以,这里有一些问题......
如上所述, $conn->query
会直接运行代码,因此执行是多余的,但是,对于SQL注入,您应该大开,因此您应该绑定如下我的示例:
$stmt = $this->conn->prepare("INSERT INTO `candidates`(`Fname`,`Lname`,`dob`,`password`,`contact`) VALUES (?,?,?,?,?)");
$stmt->execute([$fname,$lname,$dob,$password,$contact]);
此外,您不应该对此类通用查询运行try { } catch {}
(特别是如果您是在现场环境中,因为每个人都可以看到此类问题以及您自己)。
另外,在未加密的情况下添加密码也会给您带来安全问题。您应该查看使用password_hash
文档:http://php.net/manual/en/function.password-hash.php
答案 1 :(得分:1)
try{
$st = $conn->query($insert);
$st->execute();
} catch(PDOException $e) {
echo "//Failed to insert data due to ".$e->getMessage();
}
在此代码中,您正在执行$ conn-&gt;查询($ insert);足以插入$ st只保存插入查询的结果它不是一个准备好的语句 除去
$st->execute();