【发布时间】:2012-03-15 20:48:36
【问题描述】:
我正在尝试将 HTML 表单中的地址条目通过 POST 和电子邮件发送到 PHP 脚本,以将结果存储在数据库中。如果用户输入无效的电子邮件地址等,该脚本还负责触发错误消息。我希望整个过程涉及 AJAX 调用,以便每次用户点击提交时都不必重新加载页面表单上的按钮。
到目前为止,每次用户点击表单提交按钮时,页面都会被刷新,我会从 ajax 调用中得到响应,但由于刷新,它会立即被覆盖。
这是我的 HTML 和 Javascript/ajax:
<div id="emailform">
<form method="post"><!--action="planethome.php"-->
<input class="emailinput" type="text" name="email" maxlength="80" placeholder="enter your email address"/>
<input class="submitemailbutton" name="send_button" type="submit" value="Send" onClick="ajaxFunction()/>
<input type="hidden" name="submitted" value="TRUE"/>
</form>
</div>
<div id="errororsuccess">
</div>
<!--ajax stuff:---------------------------------->
<script language="javascript" type="text/javascript">
//Browser Support Code"
function ajaxFunction(){
var ajaxRequest; // The variable that makes Ajax possible!
try{
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e){
// Internet Explorer Browsers
try{
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try{
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e){
// Something went wrong
alert("Ajax is struggling in your browser.");
return false;
}
}
}
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
document.getElementById('errororsuccess').innerHTML = ajaxRequest.responseText;
}
}
// Create a function that will receive data sent from the server
ajaxRequest.open("POST", "addemailtodatabase.php", true);
ajaxRequest.send(null);
}
这是我的 PHP:
<?php
require_once ('planetconfig.php');
if (isset($_POST['submitted'])) { /
require_once (MYSQL);
$email = FALSE;
$trimmed = array_map('trim', $_POST);
if (!empty($_POST['email']))
{
if (preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$_POST['email'])) {
$email = mysqli_real_escape_string ($dbc, $trimmed['email']);
} else {
echo "Invalid";
}
} else {
echo "You need to enter an email address";
}
if ($email) {
$q = "INSERT INTO planetemail (email, time) VALUES (AES_ENCRYPT('$email', 'password'), NOW())";
$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
if (mysqli_affected_rows($dbc) == 1) {
echo "Thanks, we'll be in touch";
exit();
} else {
echo '<p class="error">We\'re sorry, something has gone wrong.</p>';
}
}
mysqli_close($dbc);
}
?>
我确定这与我的 POST 方法或我的 ajax 调用设置方式有关。
我对这一切都很陌生,谁能告诉我我做错了什么或提出更好的实施方案。我有一个明天早上的最后期限来完成这项工作。
【问题讨论】:
-
这太糟糕了。使用 jQuery
-
想详细说明它有多糟糕,而不仅仅是说它很糟糕?
-
Crikey,我曾经很糟糕!更新 - 如果有人正在阅读这篇文章,请忽略我编写的所有内容并将 jQuery 用于 AJAX,它可能会让您的生活更轻松,为后端使用某种 Web 应用程序框架,而不是像我那样编写糟糕的 PHP .我向初学者推荐 CodeIgniter。
标签: php javascript html ajax forms