0

我有两页。第一页有两种文本形式,如下所示:

<form name="NameForm">
Name: <input type = "text" name = "uname">
Location: <input type = "text" name = "ulocation">

<button type="button" onClick="MakeRequest()"">Save</button>
</form>

它使用 javascript 将信息推送到第二页(请注意,这与上面的代码在同一页面上):

<script>
function MakeRequest()
{
// get values
var uname = document.NameForm.uname.value;
var ulocation = document.NameForm.ulocation.value;

// validation stuff here that detects browser

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("result").innerHTML=xmlhttp.responseText;
    }
  }
var url = "location.php?uname=" + uname + "&ulocation=" + ulocation;
xmlhttp.open("POST", url, true);
xmlhttp.send();
}
</script>

所以问题是这样的,页面上执行所有服务器通信的 php 脚本没有从这个 post 请求中读取变量并将其存储到我的数据库中。(我查看数据库中项目的其他 get 方法工作正常)

if (isset($_POST['uname']))
{
    $name = $_POST['uname'];
$location = $_POST['ulocation']
}

然后查询就像

//$table and the other undefined variables are the names of my table & columns
$query = "INSERT INTO $table ($tablename, $tablelocation) VALUES ('$name', '$location')";

基本上我正在尝试使该查询正常工作。如果我删除 If 语句,它会将 $name 存储到数据库,但不会存储 $location。

编辑:我忘了添加

<div id="result">
</div>
4

2 回答 2

2

您正在发送一个GET. 发送POST尝试:

[编辑] 执行命令的功能

function XHR(){
    if(typeof XMLHttpRequest !=="undefined"){
        try{ return new XMLHttpRequest(); } catch (e){}
    }
    if(typeof ActiveXObject !=="undefined"){
        try{ return new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){}
        try{ return new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){}
    }
    return false;
}

function MakeRequest()
{
    // get values
    var uname = document.NameForm.uname.value;
    var ulocation = document.NameForm.ulocation.value;

    // validation stuff here that detects browser

    var url = "location.php";

    xmlhttp = XHR();//Fixed
    xmlhttp.open("POST", url, true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");//Fixed
    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4) {
            if(xmlhttp.status==200){
                document.getElementById("result").innerHTML = xmlhttp.responseText;
            } else {
                document.getElementById("result").innerHTML = "ERROR:"+xmlhttp.status;
            }
        }
    };
    xmlhttp.send("uname=" + uname + "&ulocation=" + ulocation);
}
于 2013-04-11T20:24:54.813 回答
0
<form name="NameForm">
Name: <input type = "text" name = "uname">
Location: <input type = "text" name = "ulocation">

<button type="button" onClick="MakeRequest()"">Save</button>
</form>

您缺少表单方法。在您的情况下,您希望:

<form name='NameForm" method="POST">

如果这不能解决您的问题,请下载并使用 firebug for firefox 或 chrome 控制台来调试 javascript 错误。

JS中不会有错误输出到文本中。您将需要使用调试控制台。

通过 html 表单执行插入

我会将您的 HTML 修改为:

<form name="NameForm" method="POST">
Name: <input type = "text" name = "uname">
Location: <input type = "text" name = "ulocation">

<button type="button" onClick="MakeRequest()"">Save</button>
<input type='submit' name='SubmitForm' value='SUBMIT THIS FORM'>
</form>

然后我的PHP代码:

<?php 
if(isset($_POST['SubmitForm'])){
   $Name = $_POST['uname'];
   $Location = $_POST['ulocation'];
   // Perform validation for these inputs, check if empty, set correctly ETC

    $query = "INSERT INTO $table ($tablename, $tablelocation) VALUES ('$name', '$location')";
}

然后在您的 PHP 脚本中调用您的 Javascript 函数;或执行 ajax/jquery 调用来运行插入,而无需提交按钮

于 2013-04-11T20:41:51.123 回答