从使用POST发送的AJAX请求中检索多个输入

时间:2017-06-09 08:38:19

标签: javascript php html ajax

function openV(){
var obj=document.getElementById("name").name+"="+document.getElementById("name").value+"&"+document.getElementById("comp").name+"="+document.getElementById('comp').value+"&"+document.getElementById('pass').name+"="+document.getElementById('pass').value;`

var oReq = new XMLHttpRequest();
oReq.onreadystatechange=function() {
if(this.readyState==4&&this.status==200){
window.alert(this.responseText);}
};
oReq.open("POST", "Validiation.php","true");
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
oReq.send(obj);}

我的PHP代码如下:

<?php

$name=$_REQUEST["name"];
$company=$_REQUEST["company"];
$password=$_REQUEST["password"];   

//Create Connection
$conn=new mysqli("127.0.0.1","root","");

//Check Connection
if($conn->connect_error)
{
    die('Connection error:'.$conn->connect_error);
    }
echo 'Connection successful Mr '.$name;
echo 'Company: '.$company;
?>

我可以访问$name,但问题是我无法访问代码中的$company

警告信息显示: 连接成功的Sidharth公司先生:

5 个答案:

答案 0 :(得分:3)

我认为您应该检查document.getElementById("comp").name的元素名称 变化:

$company=$_REQUEST["company"];

要:

$company=$_REQUEST["comp"];

答案 1 :(得分:0)

你得到名字=&gt;

java interface

表示#name 你的公司=&gt;

$ _request ['name'] 

但其ID为#comp

答案 2 :(得分:0)

function openV(){
    var $=function(n){
        return document.getElementById( n );
    };
    var obj=[];
    ['name','comp','pass'].forEach(function(e,i,a){
        obj.push( $(e).name+'='+$(e).value );
    });
    obj=obj.join('&');


    var oReq = new XMLHttpRequest();
    oReq.onreadystatechange=function() {
        if( this.readyState==4 && this.status==200 ){
            alert(this.response);
        }
    };
    oReq.open('POST', 'Validiation.php','true');
    oReq.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    oReq.send(obj);
}

由于Ajax函数正在发送POST请求,因此PHP脚本应该处理POST数组。使用REQUEST允许用户发送查询字符串(GET)或POST请求,因此比仅处理POST更安全。

PHP脚本需要使用的字段显示为namecomppass,但是javascript正在使用ID来查找元素的名称情况可能并非如此。例如,ID可以是name,但我们所知道的名称可能是geronimo - 这使得PHP方面的处理变得棘手,因为名称不一定是已知的。

但是,假设每个表单元素的名称和ID都相同,那么您将/可以处理请求,服务器端,就像这样。

<?php
    if( $_SERVER['REQUEST_METHOD']=='POST' ){

        $name=$_POST["name"];
        $company=$_POST["comp"];
        $password=$_POST["pass"];   

        //Create Connection
        $conn=new mysqli("127.0.0.1","root","");

        //Check Connection - in production never reveal too much/any db information!!!
        if( $conn->connect_error ) die('Connection error:'.$conn->connect_error);

        echo 'Connection successful Mr '.$name;
        echo 'Company: '.$company;
    }
?>

答案 3 :(得分:0)

来自_REQUEST的表单输入命名和预期参数之间存在差异 - 您期望:

$company=$_REQUEST["company"];
$password=$_REQUEST["password"];  

但实际的表单输入名称是'comp'和'pass'/,根据JS,它获取输入字段,如果表单输入id等于表单输入名称/。如果JS是正确的,那么你需要改变PHP以期望相应的参数:

$company=$_REQUEST["comp"];
$password=$_REQUEST["pass"];  

但是如果JS部分中的输入名称错误,那么你需要修复JS:

    var obj=document.getElementById("name").name+"="+document.getElementById("name").value+"&"+document.getElementById("company").name+"="+document.getElementById('company').value+"&"+document.getElementById('password').name+"="+document.getElementById('password').value;

答案 4 :(得分:0)

我纠正了它。首先,它使用 name 属性来标识变量。其次,我改变了所有元素的id,所以现在代码就是这个。
的Javascript

var obj=document.getElementById("nam").name+"="+document.getElementById("nam").value+"&"+document.getElementById("comp").name+"="+document.getElementById("comp").value+"&"+document.getElementById("pass").name+"="+document.getElementById("pass").value;

//Creating the XMLHttpRequest object
var oReq = new XMLHttpRequest();


oReq.onreadystatechange=function() {
    //This is where you response is handled.
    //The actual data is found on this.responseText
    if(this.readyState==4&&this.status==200){
        window.alert(this.responseText);}
        };

oReq.open("POST", "Validiation.php","true");
oReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
oReq.send(obj);
}


PHP

<?php
$name=$_POST["name"];
$company=$_POST["company"];
$password=$_POST["password"];

//Create Connection
$conn=new mysqli("localhost","root","");

//Check Connection
if($conn->connect_error)
{
    die('Connection error:'.$conn->connect_error);
    }
echo 'Connection successful Mr '.$name;
echo 'Company: '.$company;?>