Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将大量字段从Javascript传递到PHP_Javascript_Php_Mysql - Fatal编程技术网

将大量字段从Javascript传递到PHP

将大量字段从Javascript传递到PHP,javascript,php,mysql,Javascript,Php,Mysql,我正在使用JS、jQuery和PHP为一个MySQL数据库创建一个数据输入页面,该数据库在一个客户机表中有大约250个字段。我不想一个人通过这么多字段 在JS和PHP之间,因此我编写了一个函数来迭代所有的数据输入元素,并构建整个SQL insert语句以传递给PHP。对于每个数据输入元素I 创建了一个自定义属性“fieldname”,其中包含相应数据库字段的名称,如本例所示 <input type='text' fieldname='first_name' ID='txtFirstName

我正在使用JS、jQuery和PHP为一个MySQL数据库创建一个数据输入页面,该数据库在一个客户机表中有大约250个字段。我不想一个人通过这么多字段 在JS和PHP之间,因此我编写了一个函数来迭代所有的数据输入元素,并构建整个SQL insert语句以传递给PHP。对于每个数据输入元素I 创建了一个自定义属性“fieldname”,其中包含相应数据库字段的名称,如本例所示

<input type='text' fieldname='first_name' ID='txtFirstName' maxlength=25>

永远不要在应用程序的客户端生成SQL查询。这是一个巨大的安全问题。任何人都可以通过这种方式直接向您的数据库运行任意查询,将违规行为留给运行@VLAZ评论中提到的内容的人

我能想到的最简单的方法是用前缀命名字段,如
table_1
table_2
。。。 通过这种方式,您可以遍历$POST数组,查找
前缀

foreach($_POST as $key => $value){
    if (startsWith($key,"table_"))
    {
        // Append to your query string or something
    }
}

另外,要注意SQL注入攻击,这在没有用户输入过滤的情况下是可能的。您可以从OWASP网站()开始学习它。

您可以按照如下所示的方式进行操作:

//jQuery.post的简化香草JavaScript版本:
函数post(url、数据、cbf){//cbf:回调函数
var xhr=new XMLHttpRequest();
xhr.open('POST',url);
setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xhr.onload=function(){if(xhr.status==200){cbf&&cbf(JSON.parse(xhr.responseText));};
send(Object.keys(data).map((k)=>encodeURIComponent(k)+'='+encodeURIComponent(data[k])).join('&'))
}
//扫描所有输入字段:
document.querySelector('.go')。onclick=ev=>{
ev.preventDefault();
让dat=[…ev.target.nexist('form').children].reduce((a,c)=>{
如果(c.tagName=='INPUT'&&c.value>'')a[c.name]=c.value;
返回a;
}, {});
console.log(dat);//在控制台中显示要上载的数据
//--取消注释下一行以激活数据过帐:
//post('nwcs.php',dat,response=>console.log(response))
//--(stackoverflow.com上的上述内容不起作用)
}





拯救
我强烈建议您放弃此计划。您正在向internet API的任意查询打开数据库。如果您发布字段的JSON结构,可能会更好。传递大量数据并不奇怪,如果您想。。。传递大量数据。奇怪的是允许用户定义要执行的实际SQL代码。这是对用户的高度信任,让他们可以像那样直接访问数据库;最终,它的内容量大致相同,使用普通值,您可以在服务器上使用预先准备好的语句,保护您的数据库不被公然滥用。
POST/nwcs.php
with body
DROP TABLE clients
。重复我上一篇评论中的问题,如果不是在前端构建整个SQL语句,而是将字段名和值分别传递给PHP,然后在后端添加“insert-into-clients”会更好吗?是的。这样可以防止有人对数据库运行任意SQL。
if (mysqli_query($conn, $sql)) {
  echo 'Record added';
}
 else {
   header('HTTP/1.0 500');
   die('Unable to insert record due to database error: ' . mysqli_error($conn));
}
foreach($_POST as $key => $value){
    if (startsWith($key,"table_"))
    {
        // Append to your query string or something
    }
}