从javascript到php的多个数组的数组

时间:2016-08-19 02:41:07

标签: javascript php arrays

我试图从javascript到php获取一些数据。它是一个行数可变的表。所以,我试图通过javascript中的循环获取所有数据,然后将它们发送到php。在那里,我将使用另一个循环来保存每一行与另一个循环。所以,有代码:

JAVASCRIPT

//---- this is the important section ---- //
var data = new FormData();
var table = [];
for (var i = 1; i <= document.getElementById('nblines').value; i++) {
    var date = document.getElementById('date' + i).innerHTML;
    if (document.getElementById('l' + i).checked == true) { var type = 1;} else { var type = 2;}
    var paiement = document.getElementById('a' + i).innerHTML;
    var tps = document.getElementById('b' + i).innerHTML;
    var tvq = document.getElementById('c' + i).innerHTML;
    var total = document.getElementById('d' + i).innerHTML;
    var interet = document.getElementById('e' + i).innerHTML;
    var principal = document.getElementById('f' + i).innerHTML;
    var balance = document.getElementById('g' + i).innerHTML;
    var line = [i,date,type,type,paiement,tps,tvq,total,interet,principal,total];
    table.push(line);
};
console.log(table);
data.append('amortTable', table);


------------------------------------------------
|                                              |
| ---- this is the NOT important section ----  |
|                                              |
------------------------------------------------


var token = document.getElementById("csrf_token").content;
var request = new XMLHttpRequest();
request.onreadystatechange = function notify()
{
    if (request.readyState === XMLHttpRequest.DONE) {
        if (request.status === 200) {
            setTimeout(loadPage(page),500);
            $.niftyNoty({
                type: 'success',
                container : 'floating',
                html : 'Votre calcul s\'est enregistré avec succès!',
                timer : 5000
            });
        } else {
        }
    } else {
        // still not ready
    }
}
request.open( "POST", "savecalcul", true);
request.setRequestHeader("X-CSRF-TOKEN", token);
request.send(data);

PHP

foreach ($request->input('amortTable') as $i) {
    $line = new Amortissement;
    $line -> calcul()   -> associate($calcul->id);
    $line -> number = $i[0];
    $line -> date = $i[1];
    $line -> type = $i[2];
    $line -> paiement = $i[3];
    $line -> tps = $i[4];
    $line -> tvq = $i[5];
    $line -> total = $i[6];
    $line -> interet = $i[7];
    $line -> principal = $i[8];
    $line -> total = $i[9];
    $line -> save();
}

我收到此错误local.ERROR:exception&#39; ErrorException&#39;带有消息&#39;为foreach()&#39;提供的参数无效在...线是:

    foreach ($request->input('amortTable') as $i) {

所以,我是在正确的方式,如果是的话,我做错了什么。如果我不是正确的方式,我该怎么办?

2 个答案:

答案 0 :(得分:2)

问题出在这一行:

for (var i = 1; i >= document.getElementById('nblines').value; i++) {

应该是:

for (var i = 1; i <= document.getElementById('nblines').value; i++) {

答案 1 :(得分:0)

所以,在@Terminus带领我this Q/A的帮助下,我找到了解决问题的方法。

有新的javascript代码,解释如下:

var data = new FormData();
data.append('nblines', document.getElementById('nblines').value);
for (var i = 1; i <= document.getElementById('nblines').value; i++) {
    var date = document.getElementById('date' + i).innerHTML;
    if (document.getElementById('l' + i).checked == true) { var type = 1;} else { var type = 2;}
    var paiement = document.getElementById('a' + i).innerHTML;
    var tps = document.getElementById('b' + i).innerHTML;
    var tvq = document.getElementById('c' + i).innerHTML;
    var total = document.getElementById('d' + i).innerHTML;
    var interet = document.getElementById('e' + i).innerHTML;
    var principal = document.getElementById('f' + i).innerHTML;
    var balance = document.getElementById('g' + i).innerHTML;
    var line = i + '|' + date + '|' + type + '|' + paiement + '|' + tps + '|' + tvq + '|' + total + '|' + interet + '|' + principal + '|' + balance;
    data.append('line' + i, line);
};

因此,我没有尝试将所有内容放在同一个数组上,而是将“数据”添加到包含有用信息的第一行。在这种情况下,我想要添加到数据库的行总数。

然后,我创建了一个循环,将每行添加到dataForm,索引为line + i,其中包含一个具有特定字符的每个var单独的字符串。不要使用输入中可以找到的。因为在这种情况下我只添加数字字符,我选择“|”。

在此之后,来一下php代码,你只需使用第一个data.append来查找运行下一个循环所需的时间。

    $nblines = $request->input('nblines');
    for ($i=1; $i <= $nblines ; $i++) { 
        $line = new Amortissement;
        $line -> calcul()   -> associate($calcul->id);
        $j = explode('|', $request->input('line'.$i));
        $line -> number = $j[0];
        $line -> date = $j[1];
        $line -> type = $j[2];
        $line -> paiement = $j[3];
        $line -> tps = $j[4];
        $line -> tvq = $j[5];
        $line -> total = $j[6];
        $line -> interet = $j[7];
        $line -> principal = $j[8];
        $line -> balance = $j[9];
        $line->save(['timestamps' => false]);
    }

使用$j = explode('|', $request->input('line'.$i));将根据我添加到dataForm中的每个字符串创建数组。

特别感谢Rationalboss和Terminus!