【发布时间】:2015-06-14 09:52:38
【问题描述】:
我是一个真正的新程序员,正在为一项我现在正在努力并尝试了几天的任务而苦苦挣扎。
我搜索了 Google 和 Stack Overflow,但找不到(对我来说可以理解的)我的问题的解决方案:
我创建了一个 Twitter Bootstrap 登录页面,点击后会显示一个模式。在这个模式中,我有一个订阅时事通讯的表单:
<form id="newsletter" method="post">
<label for="email">Email:</label><br/>
<input type="text" name="email" id="email"/><br/>
<button type="submit" id="sub">Save</button>
</form>
<span id="result"></span>
现在我想将数据插入到 mySQL 数据库中并进行一些返回错误或成功消息的基本验证。该脚本在没有 ajax 的情况下工作正常,但可能需要更改它为 ajax 返回的内容?
include("connection.php");
if ($_POST['email']) {
if(!empty($_POST['my_url'])) die('Have a nice day elsewhere.');
if (!$_POST['email']) {
$error.=" please enter your email address.";
} else if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$error.=" please enter a valid email address.";
}
if($error) {
$error= "There was an error in your signup,".$error;
} else {
$query="SELECT * FROM `email_list` WHERE email='".mysqli_real_escape_string($link, $_POST['email'])."'";
$result = mysqli_query($link, $query);
$results = mysqli_num_rows($result);
if ($results) {
$error.=" this email address is already registered.";
} else {
$query = "INSERT INTO `email_list` (`email`) VALUES('".mysqli_real_escape_string($link, $_POST['email'])."')";
mysqli_query($link, $query);
$message = "Thanks for subscribing!";
}
}
}
经过大量阅读 ajax 似乎是在提交后不关闭引导模式的方法(以抑制默认事件)。
插入数据库工作正常,验证也是如此。
但我无法获得显示的不同错误消息(存储在 php 文件的 $error 变量中)或者在成功的情况下显示 $message。
这是 jquery 脚本:
$("#sub").submit(function (){
event.preventDefault();
$.ajax( {
url: "newsletter2.php",
type: "POST",
data: {email: $("#email").val()},
success: function(message) {
$("#result").html(message);
},
error: function(error) {
$("#result").html(error);
}
});
我尝试在 #result 范围内的 php 脚本中显示错误和消息变量的值。
感谢任何帮助。由于我对这个领域真的很陌生,所以请非常直接地表述它。
非常感谢您。
编辑: 在 php 文件中添加了一些以创建一个数组并将消息存储在其中:
$response = array();
$response['success'] = $success;
$response['error']= $errors;
exit(json_encode($response));
但是让 ajax 工作仍然有些麻烦。尝试了简写 $.post 而不是 $.ajax 但现在他们甚至无法开始发布数据...
$("#sub").submit(function (){
event.preventDefault();
$.post("newsletter.php", {email: $("#email").val() });
});
非常感谢快速时间。经过数小时的测试后,我被卡住了,找不到错误。如果我定期提交表单,它工作正常,所以 php/mysql 部分不是问题。
我还意识到,当我单击“#sub”按钮时,它仍然尝试通过 get 提交表单(URL 获取传递的值)。所以我不确定 event.preventDefault();不工作? jQuery 已安装并正在运行。
【问题讨论】:
-
显示你的错误信息。
-
使用回声伴侣。回声 $message;
标签: php jquery mysql ajax twitter-bootstrap