我正在尝试学习如何制作将数据发布到数据库的注册表格。在我将其剥离之前,我无法从教程中获得代码。现在,它可以正常工作,但是如果我刷新页面(以删除键入的值,以便可以键入其他条目),则它将原始数据重新发布到数据库表中。
换句话说,如果我输入名字和姓氏的值Kelly Kau,然后单击Submit按钮,则会在数据库表中输入Kelly和Kau。但是,当我刷新页面时,将添加另一行与Kelly和Kau。
有办法阻止这种情况吗?我正在使用PHP和MySQL。我要复制的教程是jQuery。最终,我可能还会添加一些AJAX。
<form id="signupform" autocomplete="off" method="post" action="" novalidate>
<table>
<tr>
<td class="label"><label id="lfirstname" for="firstname">First Name</label></td>
<td class="field"><input id="firstname" name="firstname" type="text" value="" maxlength="100"></td>
<td class="status"></td>
</tr>
<tr>
<td class="label"><label id="llastname" for="lastname">Last Name</label></td>
<td class="field"><input id="lastname" name="lastname" type="text" value="" maxlength="100"></td>
<td class="status"></td>
</tr>
<tr>
<td class="label"><label id="lsignupsubmit" for="signupsubmit">Signup</label></td>
<td class="field" colspan="2"><input id="signupsubmit" name="signup" type="submit" value="Signup"></td>
</tr>
</table>
</form>
<?php
include('ajax-database/config.php');
$pdo = connect();
try {
$sql = "INSERT INTO g1_members (firstname, lastname) VALUES (:firstname, :lastname)";
$query = $pdo->prepare($sql);
$query->bindParam(':firstname', $_POST['firstname'], PDO::PARAM_STR);
$query->bindParam(':lastname', $_POST['lastname'], PDO::PARAM_STR);
$query->execute();
} catch (PDOException $e) {
echo 'PDOException : '. $e->getMessage();
}
?>
最佳答案
根据您单击的提交按钮使用条件语句:
<?php
include('ajax-database/config.php');
$pdo = connect();
if(isset($_POST['signup'])){
try {
$sql = "INSERT INTO g1_members (firstname, lastname) VALUES (:firstname, :lastname)";
$query = $pdo->prepare($sql);
$query->bindParam(':firstname', $_POST['firstname'], PDO::PARAM_STR);
$query->bindParam(':lastname', $_POST['lastname'], PDO::PARAM_STR);
$query->execute();
} catch (PDOException $e) {
echo 'PDOException : '. $e->getMessage();
}
} // brace for if(isset($_POST['signup']))
?>
或成功查询时的标头重定向:
if($query){
header("Location: http://www.example.com");
exit;
}
理想情况下,如果您不想插入相同的值,则最好将给定的列设置为UNIQUE。