【发布时间】:2018-03-21 14:15:23
【问题描述】:
我的问题是,当用户单击注册按钮时,如何在两种情况下阻止模式关闭:
- 如果输入无效?并显示 PHP 错误信息
- 输入有效并在关闭模式前显示 PHP 成功消息几秒钟?
对于第一种情况,如果我重新打开模式,我可以看到 PHP 显示的验证错误消息。
I have checked this similar question 但还没有弄清楚如何在我的情况下做到这一点,所以任何帮助将不胜感激。我想完全了解发生了什么以及我在做什么。
到目前为止,在阅读了这里和那里之后,我注意到这可能可以通过以下方式实现:
- JQuery / JavaScript 做表单验证而不使用 PHP
- 有人建议使用 iframe
有没有办法使用下面的 PHP 代码并显示来自该代码的错误/成功消息?还是必须通过 JQuery/JS 来完成?
我的带有 HTML 代码的 PHP
<?php
ob_start();
include('header.php');
include_once("db files/db_connect.php");
if(isset($_SESSION['user_id'])) {
header("Location: index.php");
}
$error = false;
if (isset($_POST['signup'])) {
$name = mysqli_real_escape_string($conn, $_POST['name']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
$cpassword = mysqli_real_escape_string($conn, $_POST['cpassword']);
if (!preg_match("/^[a-zA-Z ]+$/",$name)) {
$error = true;
$uname_error = "Name must contain only alphabets and space";
}
if(!filter_var($email,FILTER_VALIDATE_EMAIL)) {
$error = true;
$email_error = "Please Enter Valid Email ID";
}
if(strlen($password) < 6) {
$error = true;
$password_error = "Password must be minimum of 6 characters";
}
if($password != $cpassword) {
$error = true;
$cpassword_error = "Password and Confirm Password doesn't match";
}
if (!$error) {
if(mysqli_query($conn, "INSERT INTO users(user, email, pass) VALUES('" . $name . "', '" . $email . "', '" . md5($password) . "')")) {
$success_message = "Successfully Registered!";
} else {
$error_message = "Error in registering...Please try again later!";
}
}
}
?>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="registrationFormLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content" >
<div class="modal-header">
<h5 class="modal-title" id="registrationFormLabel">Register</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<!-- REGISTRATION FORM -->
<div class="container">
<div class="form-row">
<div class="col">
<form onsubmit="return validateForm()" role="form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="signupform">
<fieldset>
<legend>Sign Up</legend>
<div class="form-group">
<label for="name">Name</label>
<input type="text" name="name" placeholder="Enter Full Name" required value="<?php if($error) echo $name; ?>" class="form-control" />
<span class="text-danger"><?php if (isset($uname_error)) echo $uname_error; ?></span>
</div>
<div class="form-group">
<label for="name">Email</label>
<input type="text" name="email" placeholder="Email" required value="<?php if($error) echo $email; ?>" class="form-control" />
<span class="text-danger"><?php if (isset($email_error)) echo $email_error; ?></span>
</div>
<div class="form-group">
<label for="name">Password</label>
<input type="password" name="password" placeholder="Password" required class="form-control" />
<span class="text-danger"><?php if (isset($password_error)) echo $password_error; ?></span>
</div>
<div class="form-group">
<label for="name">Confirm Password</label>
<input type="password" name="cpassword" placeholder="Confirm Password" required class="form-control" />
<span class="text-danger"><?php if (isset($cpassword_error)) echo $cpassword_error; ?></span>
</div>
<div class="form-group text-center">
<input id="modalSubmit" type="submit" name="signup" value="Sign Up" class="btn btn-primary" formnovalidate />
</div>
</fieldset>
</form>
<span class="text-success"><?php if (isset($success_message)) { echo $success_message; } ?></span>
<span class="text-danger"><?php if (isset($error_message)) { echo $error_message; } ?></span>
</div><!-- / col -->
</div><!-- / form-row -->
<!-- already registered row -->
<div class="row">
<div class="col text-center">
Already Registered? <a href="login.php">Login Here</a>
</div>
</div> <!-- / already registered row -->
</div><!-- / REGISTRATION FORM container-->
</div><!-- / Modal body div -->
</div>
</div>
</div><!-- / Modal -->
当用户单击索引页面上的按钮时,我的模式打开,这是 JQuery 代码
$(document).ready(function(){
$("#myBtn").click(function(){
$("#myModal").modal();
});
});
【问题讨论】:
-
尝试将
required更改为required="yes" -
它仍然消失了。可能需要更改为客户端验证
-
问题在于结构,当您插入提交表单时,如果您保持默认行为,模式将始终关闭,因此在输入类型按钮中更改输入类型提交您也可以保持类型提交但必须进行 ajax 调用,因此 $.post(url) 或 event.preventDefault 以避免模式将关闭。
-
你的
function validateForm() { ... }代码在哪里?
标签: javascript php jquery html bootstrap-4