こんにちは私は奇妙な問題があります。フォームのフィールドが空の場合でも、フォームはまだ送信されます。以下は私のコードです...ここで何が起こっているのか教えてください。フォームが空で検証が行われているときに送信されるPHPフォーム
また、同じページに2つのフォームがあります。両方とも$_SERVER['PHP_SELF']
アクションを使用します。
作業フローは、ユーザーが最初のフォームを使用して賞品ホイールを回転させ(検証はこのフォームで正常に機能します)、投稿が成功した後にスピナーが表示されます。
2番目のフォームでsubmitをクリックすると、最初のフォームが再び表示され、2番目のフォームの検証が無視され、2番目のフォームが表示されます(どちらが空になりますか)。ページが爽やかであることを前提としていることを確認してください。これを回避する方法はありますか?
$nameErr = $lNameErr = $pCodeErr = $successMessage = $errorMessage = "";
$name = $lName = $pCode = "";
$errors = 0;
$regex = '^[a-zA-Z0-9]{3}()?[a-zA-Z0-9]{3}$^';
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "First Name is required";
$errors++;
}else {
$name = test_input($_POST["name"]);
}
if (empty($_POST["lName"])) {
$lNameErr = "Last Name is required";
$errors++;
}else {
$lName = test_input($_POST["lName"]);
}
if (empty($_POST["pCode"])) {
$pCodeErr = "Postal Code is required";
$errors++;
}else {
$pCode = test_input($_POST["pCode"]);
// check if e-mail address is well-formed
if (!preg_match($regex, $_POST["pCode"])) {
$pCodeErr = "Invalid Postal Code format";
$errors++;
}
}
if($errors == 0){
$duplicate = $conn->prepare("SELECT `Pcode` FROM `winners` WHERE `Pcode` = ?");
$query->bindValue(1, $email);
$query->execute();
if($duplicate->rowCount() > 0) {
$errorMessage = "Sorry this user is already in our database!";
} else {
$successMessage = "Form Submission Successful!";
$sql = "INSERT INTO winners (Fname, Lname, Pcode) VALUES (:fName, :lName, :pCode)";
$stmt = $conn->prepare($sql);
// $stmt->bindParam(':email', $email, PDO::PARAM_STR);
$stmt->bindParam(':fName', $name, PDO::PARAM_STR);
$stmt->bindParam(':lName', $lName, PDO::PARAM_STR);
$stmt->bindParam(':pCode', $pCode, PDO::PARAM_STR);
$stmt->execute();
}
}
}
、ここでは私のフォームで
<form id="winner-form" class="spin-form" method = "post" action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<p>To claim your prize please fill in the form below.</p>
<div class="form-group">
<label>Name:</label>
<input class="form-control" placeholder="Please enter your First Name" value="<?php echo $name;?>" type = "text" name = "name">
<span class = "error">* <?php echo $nameErr;?></span>
</div>
<div class="form-group">
<label>Last Name:</label>
<input class="form-control" placeholder="Please enter your Last Name" value="<?php echo $lName;?>" type = "text" name = "lName">
<span class="error">* <?php echo $lNameErr;?></span>
</div>
<div class="form-group">
<label>Postal Code:</label>
<input class="form-control" placeholder="Please enter your Postal Code" value="<?php echo $pCode;?>" type = "text" name = "pCode">
<span class="error">* <?php echo $pCodeErr;?></span>
</div>
<td>
<input class="btn btn-lg btn-success" type="submit" name="sub" value="Submit">
</td>
<?php if($successMessage != "") { ?>
<span class ='alert alert-success'><?php echo $successMessage; ?></span>
<?php } ?>
<?php if($errorMessage != "") { ?>
<span class ='alert alert-danger'><?php echo $errorMessage; ?></span>
<?php } ?>
</form>
PHPはフォームの送信を停止できません。これはクライアント側で、PHPはサーバー側にあります。 – miken32
また、ここにはフォームが1つしかないため、パラメータを渡さないため、最初のデータベースクエリは機能しません。 – miken32