无法用php验证动态表单

时间:2016-11-11 21:09:12

标签: php jquery html

我在使用php脚本验证动态html表单时遇到问题。当我按下提交时,它表示存在未定义的索引,但是已定义此索引。我的问题与其他问题不同,因为我试图将所有这些代码写入单个php文件。我的代码出了什么问题?

我的HTML:

<form method="POST" action="/vehicles/add">  
    <div class="table-responsive">  
        <table class="table table-bordered" id="dynamic_field">  
            <tr>  
                <td><input type="text" name="name[]" placeholder="Enter your Name" class="form-control name_list" required></td>  
                <td><button type="button" name="add" id="add" class="btn btn-success">Add More</button></td>  
            </tr>  
        </table>  
    </div>  
    <input type="submit" name="submit" class="btn btn-primary" value="Submit" />  
</form>

我的jquery脚本:

$(document).ready(function(){  
      var i=1;  
      $('#add').click(function(){  
           i++;  
           $('#dynamic_field').append('<tr id="row'+i+'"><td><input type="text" name="name[]" placeholder="Enter your Name" class="form-control name_list" /></td><td><button type="button" name="remove" id="'+i+'" class="btn btn-danger btn_remove">X</button></td></tr>');  
      });  
      $(document).on('click', '.btn_remove', function(){  
           var button_id = $(this).attr("id");   
           $('#row'+button_id+'').remove();  
      });  
      });

我的PHP脚本:

if (isset($_POST['name'])) {
    $fields = count($_POST["name"]);
    for($i = 0; $i < $fields; $i++) {
        if(trim($_POST["name"][$i] != ''))  
           {  
                mysqli_query($CONNECT, "INSERT INTO `vehicles` VALUES('', '$_POST[name][$i]', 0)"); 
           }  
    }
}

我的错误:

PHP Notice:  Undefined index: submit in

1 个答案:

答案 0 :(得分:1)

对于多维数组,您需要使用复杂的字符串语法来替换该值,因此您必须在其周围加上大括号并引用文字索引。

mysqli_query($CONNECT, "INSERT INTO `vehicles` VALUES('', '{$_POST['name'][$i]}', 0)"); 

但最好使用准备好的查询来阻止SQL注入。

$stmt = mysqli_prepare($CONNECT, "INSERT INTO vehicles VALUES ('', ?, 0)");
mysqli_stmt_bind_param($stmt, 's', $name);
foreach ($_POST['name'] as $name) {
    if (trim($name) != '') {
        mysqli_stmt_execute($stmt);
    }
}