【发布时间】:2014-05-02 11:25:22
【问题描述】:
我有一个使用带有 AJAX 的 POST 方法的注册表单,我是否需要将提交按钮的类型设为“提交”,因为 php 函数似乎只适用于要提交的类型,但我希望 ajax 发送关闭数据并立即返回结果,无需更改页面。
HTML
<form name = "reg" action = "insert.php" method = "POST">
<table>
<tr>
<td class="ule">First Name</td>
<td><input type = "text" name="firstnames" id="firstnames"></input></td>
</tr>
<tr>
<td class="ule">Last Name</td>
<td><input type = "text" name="lastnames" id="lastnames"></input></td>
</tr>
<tr>
<td class="ule">Email</td>
<td><input type = "text" name="emails" id="emails"></input></td>
</tr>
<tr>
<td class="ule">User Name</td>
<td><input type = "text" name = "usernames" id="usernames"></input></td>
</tr>
<tr>
<td class="ule">Password</td>
<td><input type = "password" name = "passwords" id="passwords"></input></td>
</tr>
</table>
<div class="regButton">
<button onclick = "register()" type = "button" >Register</button>
</div>
</form>
PHP
<?php
session_start();
$db = sqlite_open('my_database.db', 0666, $error);
$fname = $_POST["firstnames"]; //potential problem area
$lname = $_POST["lastnames"];
$email = $_POST["emails"];
$user = $_POST["usernames"];
$pass = $_POST["passwords"];
$query = "INSERT INTO User (firstName, lastName, Email, Username, Password) VALUES ('.$fname','.$lname','.$email','.$user','.$pass')";
insertRows($db, $fname, $lname, $email, $user, $pass, $query);
function insertRows($dbs, $names, $lnames, $emails, $usernames, $passwords, $querys)
{
if($names != NULL && $lnames != NULL && $emails != NULL && $usernames != NULL && $passwords != NULL)
{
echo "Thank you for registering";
$result = sqlite_query($dbs, $querys);
}
else
{
echo "<h1 style=color:red;>Fill out required fields</h1>";
}
}
?>
JavaScript
function register(){
var xmlHTTPreq1;
var name = encodeURIComponent(document.getElementById('firstnames').value);
var lastname = encodeURIComponent(document.getElementById('lastnames').value);
var myemail = encodeURIComponent(document.getElementById('emails').value);
var users = encodeURIComponent(document.getElementById('usernames').value);
var passwords = encodeURIComponent(document.getElementById('passwords').value);
var params = "fname="+name+"&lname="+lastname+"&email="+myemail+"&user="+users+"&pass="+passwords;
if (window.XMLHttpRequest) {
try {
xmlHTTPreq1 = new XMLHttpRequest();
} catch(e) {
xmlHTTPreq1 = false;
}
} else {
try{
xmlHTTPreq1 = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
xmlHTTPreq1 = false;
}
}
xmlHTTPreq1.onreadystatechange = function()
{
if(xmlHTTPreq1.readyState == 4 && xmlHTTPreq1.status == 200){
document.getElementById('myDiv').innerHTML = xmlHTTPreq1.responseText;
}
}
xmlHTTPreq1.open("POST", "insert.php?", true);
xmlHTTPreq1.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHTTPreq1.send(params);
}
【问题讨论】: