Javascript 在php中提交输入为数组的表单
我想提交PHP中不同学生的分数、等级、科目和姓名的值。在添加分数时,使用jQuery在前端自动计算每个学生的平均分和分数。但是我在通过PHP提交数组值时遇到了问题。我尝试了几种选择,但没有一种有效Javascript 在php中提交输入为数组的表单,javascript,php,Javascript,Php,我想提交PHP中不同学生的分数、等级、科目和姓名的值。在添加分数时,使用jQuery在前端自动计算每个学生的平均分和分数。但是我在通过PHP提交数组值时遇到了问题。我尝试了几种选择,但没有一种有效 <?php $con=mysqli_connect('localhost','root','','student'); if($con){ echo "connected"; } else{ echo "not connected"; } if(isset($_POST['s
<?php
$con=mysqli_connect('localhost','root','','student');
if($con){
echo "connected";
}
else{
echo "not connected";
}
if(isset($_POST['submit'])){
$stack = array();
$name=$_POST['name'];
$roll=$_POST['roll'];
$class=$_POST['class'];
$phy=$_POST['phy'];
$eng=$_POST['eng'];
$maths=$_POST['maths'];
$average=$_POST['average'];
$grade=$_POST['grade'];
array_push($stack, $name);
array_push($stack, $roll);
array_push($stack, $class);
array_push($stack, $phy);
array_push($stack, $eng);
array_push($stack, $maths);
array_push($stack, $average);
array_push($stack, $grade);
;
for ($i=0; $i < sizeof($stack); $i++) {
foreach ($stack[$i] as $key => $value) {
$query="INSERT INTO student_detail (id,name,roll,class,phy,eng,maths,avg,grade) VALUES('','$name[$value]','$roll[$value]','$class[$value]','$phy[$value]','$eng[$value]','$maths[$value]','$average[$value]','$grade[$value]')";
}
}
// print_r($stack);
$result=mysqli_query($con,$query);
if($result){
echo "data inserted";
}
else{
echo "data not".mysqli_error($con);
}
}
?>
我最近也做了类似的事情(虽然我以JSON的形式输出,但您应该能够将其用于SQL)
首先,我创建了我的表单
乙二醇
最后,我将其转换为JSON并将其推送到SQL(但您可能不需要/不想这样做,除非您使用的是SQL Server 2016或支持JSON的东西)
将表单的输入更改为项[0][name]
,将为您提供更易于使用的数据集。想法来自:
此外,只要将用户输入的数据注入到查询中,您就很容易受到SQL注入攻击。研究准备好的陈述
编辑
是的,它是有效的,但是我怎么能用我以前的方法来做呢
直到现在才让我这么做。等它起作用后,我可以继续工作
安全问题
解决方案与安全无关,只是建议使用预先准备好的语句。我的建议是更改您的输入名称,以便于您使用。您当前的实现name[]
,roll[]
等将创建按元素分组的数据结构。例如:
array[
'name' => [
0 => 'Matt',
1 => 'John'
],
'roll' => [
0 => 'Manager',
1 => 'Programmer'
]
]
我想你会明白这有什么问题。使用它非常困难,因为您需要从每个子阵列访问单个元素。您可以将其转换为规范化格式,用于构建查询。比如:
$result = array();
foreach ($_POST as $key => $data) {
if (is_array($data)) {
foreach ($data as $offset => $value) {
if (isset($result[$offset])) {
$result[$offset][$key] = $value;
} else {
$result[$offset] = array($key => $value);
}
}
}
}
这将给你:
array[
[
'name' => 'Matt',
'roll' => 'Manager'
],
[
'name' => 'John',
'roll' => 'Programmer'
]
]
这与我的原始解决方案的格式相同。但它需要额外的2个循环和额外的代码来维护。我会让你决定用哪一个 我相信您必须在php中的字段名中添加[]
code@Ayrton兄弟,我做了,但提交的值是0,仅用于任何输入。请为我们验证。删除所有额外的crud,例如JS、jquery链接、DB查询和连接。问题在于你的循环$stack
中有数据,但您没有正确访问它。为了验证,请向我们展示var\u dump($stack)的输出
。尝试更改foreach($key=>value的堆栈[$i]){
为foreach($value的堆栈[$i]){
@Waterlomatt您可以通过单击下面的堆栈变量来查看转储的堆栈变量输出编辑代码是的,但是我以前的方法如何才能做到这一点,因为有人要求我现在才这样做。在它工作后,我可以处理安全问题
<?php
$con=mysqli_connect('localhost','root','','student');
if($con){
echo "connected";
}
else{
echo "not connected";
}
if(isset($_POST['submit'])){
$stack = array();
$name=$_POST['name'];
$roll=$_POST['roll'];
$class=$_POST['class'];
$phy=$_POST['phy'];
$eng=$_POST['eng'];
$maths=$_POST['maths'];
$average=$_POST['average'];
$grade=$_POST['grade'];
array_push($stack, $name);
array_push($stack, $roll);
array_push($stack, $class);
array_push($stack, $phy);
array_push($stack, $eng);
array_push($stack, $maths);
array_push($stack, $average);
array_push($stack, $grade);
;
for ($j=0; $j < sizeof($stack); $j++) {
foreach ($stack[$j] as $key=>$value) {
$query="INSERT INTO student_detail (id,name,roll,class,phy,eng,maths,avg,grade,date) VALUES('','$name[$key]','$roll[$key]','$class[$key]','$phy[$key]','$eng[$key]','$maths[$key]','$average[$key]','$grade[$key]',CURDATE())";
$result=mysqli_query($con,$query);
// // var_dump($stack);
}
break;
}
// var_dump($stack);
// print_r($stack);
if($result){
echo "data inserted";
}
else{
echo "data not".mysqli_error($con);
}
}
array (size=8)
'name' => string 'Matt' (length=4)
'roll' => string 'Manager' (length=7)
'class' => string '' (length=0)
'phy' => string '' (length=0)
'eng' => string '' (length=0)
'maths' => string '' (length=0)
'average' => string '' (length=0)
'grade' => string '' (length=0)
/var/www/html/public/psft/apply/index2.php:6:
array (size=8)
'name' => string 'John' (length=4)
'roll' => string 'Programmer' (length=10)
'class' => string '' (length=0)
'phy' => string '' (length=0)
'eng' => string '' (length=0)
'maths' => string '' (length=0)
'average' => string '' (length=0)
'grade' => string '' (length=0)
array[
'name' => [
0 => 'Matt',
1 => 'John'
],
'roll' => [
0 => 'Manager',
1 => 'Programmer'
]
]
$result = array();
foreach ($_POST as $key => $data) {
if (is_array($data)) {
foreach ($data as $offset => $value) {
if (isset($result[$offset])) {
$result[$offset][$key] = $value;
} else {
$result[$offset] = array($key => $value);
}
}
}
}
array[
[
'name' => 'Matt',
'roll' => 'Manager'
],
[
'name' => 'John',
'roll' => 'Programmer'
]
]
<?php
$con=mysqli_connect('localhost','root','','student');
if($con){
echo "connected";
}
else{
echo "not connected";
}
if(isset($_POST['submit'])){
$stack = array();
$name=$_POST['name'];
$roll=$_POST['roll'];
$class=$_POST['class'];
$phy=$_POST['phy'];
$eng=$_POST['eng'];
$maths=$_POST['maths'];
$average=$_POST['average'];
$grade=$_POST['grade'];
array_push($stack, $name);
array_push($stack, $roll);
array_push($stack, $class);
array_push($stack, $phy);
array_push($stack, $eng);
array_push($stack, $maths);
array_push($stack, $average);
array_push($stack, $grade);
;
for ($j=0; $j < sizeof($stack); $j++) {
foreach ($stack[$j] as $key=>$value) {
$query="INSERT INTO student_detail (id,name,roll,class,phy,eng,maths,avg,grade,date) VALUES('','$name[$key]','$roll[$key]','$class[$key]','$phy[$key]','$eng[$key]','$maths[$key]','$average[$key]','$grade[$key]',CURDATE())";
$result=mysqli_query($con,$query);
// // var_dump($stack);
}
break;
}
// var_dump($stack);
// print_r($stack);
if($result){
echo "data inserted";
}
else{
echo "data not".mysqli_error($con);
}
}