在PHP中如何使用$ _REQUEST来检索要输入数据库的输入数组

时间:2013-12-19 13:14:27

标签: javascript php ajax arrays xmlhttprequest

我正在使用AJAX将来自网页的输入发送到PHP文件,然后输入到数据库中。这是我的JavaScript文件:

var pageLoaded = function () {
var submitButton = document.getElementById("submit");
if (submitButton) {
    submitButton.addEventListener("click", submit, true);
}
};

var submit = function () {

var xhr, changeListener;


var form = document.getElementById('item_form');
var inputs = form.getElementsByTagName('input');

// create a request object
xhr = new XMLHttpRequest();

// initialise a request, specifying the HTTP method
// to be used and the URL to be connected to.
xhr.open("POST", "../php/add_item.php", true);
console.log(inputs[0].value); // debugging

// Sends the inputs to the add_item.php file
xhr.send(inputs);
};

window.onload = pageLoaded;

这里我尝试将表单中的输入发送到我的文件系统中名为add_item.php的名为"../php/add_item.php"的PHP文件中。 我很确定这段代码可以工作,并将输入发送到数组中的PHP文件。

我的问题是,如何在该文件中使用$ _REQUEST才能使用数组中的输入发送到数据库?或者,这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:2)

xhr.send()方法只接受一个字符串。如果要发送数组,则必须在发布之前将其展平为字符串。您可以使用javascript中的JSON.stringify()方法轻松完成此操作,然后在接收它时使用PHP中的json_decode()函数。

另外,PHP要在$ _POST []变量中正确接收数据(如果必须,则为$ _REQUEST,但不推荐),您需要设置POST变量的名称并对JSON文本进行URL编码,如下所示:

var json_array = JSON.stringify(inputs);    
xhr.send('myJSONData=' + encodeURIComponent(json_array));

在PHP方面,您不需要使用urldecode(),因为服务器堆栈期望接收url编码的POSTed名称 - 值对。但是你需要在发布的变量上使用json_decode来恢复数组,例如:

php_array = json_decode($_POST["myJSONData"]);

您将看到其他方法,包括将xhr POST内容类型标头设置为JSON,但根据我的经验,这是阻力最小的路径。

另请注意,虽然可以以HTML形式发送对象的“数组”,如下所示:

<input type="text" name="myArray[]" value="val1">
<input type="text" name="myArray[]" value="val2">
<input type="text" name="myArray[]" value="val3">
<input type="text" name="myArray[]" value="val4">
  • 这将导致数组在变量$ _POST [“myArray”]中的PHP中可用,使用XHR对象(AJAX方法)并没有简单的等效。 JSON.stringify()是IMO最简单的方法。

答案 1 :(得分:0)

$_REQUEST内的变量存储为数组。要访问它们,您可以执行与此类似的操作:

echo $_REQUEST['input_1'];

要查看JS发送的所有变量(格式不错),您可以使用以下代码:

echo "<pre>";
print_r($_REQUEST);
echo "</pre>";

答案 2 :(得分:0)

你不能以你的方式去做。您发送不正确的“输入”数组。您应该准备输入值数组。 Morover,我建议你使用JQuery。

 $(function (){
  $("#submit").click(function (){
   //the way to get input values and names
   var arr = [];
   $("input").each(function (index,value){});
       arr.push([$(value).attr('name'), $(value).val()];
   });
   // it can be replaced also via serialize() funciton

   //ajax
   $.post( "../php/add_item.php", arr)
   .done(function( data ) {
      //data has been send response is in data object
   });
  });
 });

在PHP中,您可以通过$_POST获取这些值。此处不需要$_REQUEST因为您使用POST方法。例如,如果您有输入

<input name="xxx" value="test">

要在PHP中打印此输入的值,您需要使用此代码

echo $_POST['xxx'];

如果您不想使用JQuery,那么您仍然需要循环输入并准备正确的数组以通过XHR发送它。