Javascript 动态JQUERY数组适用于某些记录

Javascript 动态JQUERY数组适用于某些记录,javascript,php,jquery,mysql,sql,Javascript,Php,Jquery,Mysql,Sql,多亏StackOverflow的帮助,我创建了一个包含字段的单行条目,然后将每个字段添加到一个数组中,但Hours SQL语句不起作用,例如,前两条记录的SQL条目为空,然后在另一条记录上正常工作,但我看不出我做错了什么。任何帮助都将不胜感激 <td colspan="3" align="left"><div id="hoursrow"> <p> <span class="text">Hours Labour :</span

多亏StackOverflow的帮助,我创建了一个包含字段的单行条目,然后将每个字段添加到一个数组中,但Hours SQL语句不起作用,例如,前两条记录的SQL条目为空,然后在另一条记录上正常工作,但我看不出我做错了什么。任何帮助都将不胜感激

 <td colspan="3" align="left"><div id="hoursrow">
        <p> <span class="text">Hours Labour :</span></span></p>
        <p> <span class="headings"><span class="text"><span class="hours">Start Time:
          <input type="time" name="add_start" size="4" />
          Finish Time:
          <input type="time" name="add_finish" size="4" />
          Date:
          <input type="date" name="add_date" size="4" />
          OVT:
          <input type="checkbox" name="add_overtime_hours" id="add_overtime_hours" size="1" maxlength="1" />
          </span></span><span class="text"><span class="hours">
        <input onclick="addhours(this, event);" type="button" value="Add Labour" />
        </span></span></p>
        <p class="headings"><span class="text"><span class="hours">
          <span class="info">(This row will not be saved unless you click on "Add Labour" first) </span></span></span></p>
        </div></td>
      <td width="7"></td>
      </tr>
    <tr>



var rownumhours = 1;

function addhours(obj, e) {
  rownumhours++;
  var hoursrow = '<p id="rownumhours' + rownumhours + '">Start Time: <input type="time" name="add_start[' + rownumhours + ']" size="4" value="' +
  $(obj).closest('span.headings').find('[name="add_start"]').val() + '">  Finish Time: <input type="time" name="add_finish[' + rownumhours + ']" value="' +
  $(obj).closest('span.headings').find('[name="add_finish"]').val() + '"> Date: <input type="date" name="add_date[' + rownumhours + ']" value="' +
  $(obj).closest('span.headings').find('[name="add_date"]').val() + '"> Show_Overtime: <input type="text" name="show_overtime_hours[' + rownumhours + ']" size="1" value="' + 
  (($(obj).closest('span.headings').find('[name="add_overtime_hours"]').is(':checked')) ? '1' : '0' ) + '"> Overtime: <input type="checkbox" name="add_overtime_hours[' + rownumhours + ']" size="1" value="'                       +                       
  $(obj).closest('span.headings').find('[name="add_overtime_hours"]').val() + '"' +
      (($(obj).closest('span.headings').find('[name="add_overtime_hours"]').is(':checked')) ? 'checked' : '') +
  ' "> <input type="button" value="Remove" onclick="removeRow(' +
      rownumhours + ');"></p>';
  jQuery('#hoursrow').append(hoursrow);

    $(obj).closest('span.headings').find('[name="add_start"]').val("");
    $(obj).closest('span.headings').find('[name="add_finish"]').val("");
    $(obj).closest('span.headings').find('[name="add_date"]').val("");
    $(obj).closest('span.headings').find('[name="show_overtime_hours"]').val("");
        $(obj).closest('span.headings').find('[name="add_overtime_hours"]').removeAttr('checked');
 }
function removeRow(rnum) {
  jQuery('#rownumhours' + rnum).remove();
}
Sql部分如下所示

        if (
                 !empty($_POST['add_start']) && !empty($_POST['add_finish']) && !empty($_POST['add_date']) && !empty($_POST['show_overtime_hours'])&&
                 is_array($_POST['add_start']) && is_array($_POST['add_finish']) && is_array($_POST['add_date']) && is_array($_POST['show_overtime_hours'])&& 
                count($_POST['show_overtime_hours']) && count($_POST['add_finish']) && count($_POST['add_date']) === count($_POST['add_start']) 
                ) {
                $add_start_array = $_POST['add_start'];
                $add_finish_array = $_POST['add_finish'];
                $add_overtime_hours_array = $_POST['show_overtime_hours'];
                $add_date_array =$_POST['add_date'];                    
                     for ($i = 0; $i < count($add_start_array); $i++) {
                        $add_start_values = $mysqli->real_escape_string($add_start_array[$i]);
                        $add_finish_values = $mysqli->real_escape_string($add_finish_array[$i]);
                        $add_date_values = $mysqli-> real_escape_string($add_date_array[$i]);
                        $add_overtime_hours_boolean = $mysqli-> real_escape_string($add_overtime_hours_array[$i]);
                        $sql_add_hours = "INSERT INTO hours(job_number,start_time,finish_time,date,overtime) VALUES('$increment_job_number','$add_start_values','$add_finish_values','$add_date_values','$add_overtime_hours_boolean')";

                        $mysqli-> query($sql_add_hours);
                        // This next section is for debugging only
                        //echo ($add_date_values);
                        //echo ($add_start_values);
                        //echo ($add_finish_values);
                        echo ($sql_add_hours);
                        //echo ($add_overtime_hours_values);

                }
if(
!empty($_POST['add_start'])和&!empty($_POST['add_finish'])和&!empty($_POST['add_date'])和&!empty($_POST['show_加班时间])&&
is_数组($_POST['add_start'])和is_数组($_POST['add_finish'])和is_数组($_POST['add_date'])和is_数组($_POST['show_加班时间]])和
计数($\u POST['show\u times'])和计数($\u POST['add\u finish'])和计数($\u POST['add\u date'])==计数($\u POST['add\u start']))
) {
$add_start_array=$_POST['add_start'];
$add_finish_数组=$_POST['add_finish'];
$add_加班时间\u数组=$\u POST['show_加班时间];
$add_date_array=$_POST['add_date'];
对于($i=0;$ireal_escape_string($add_start_数组[$i]);
$add_finish_values=$mysqli->real_escape_string($add_finish_数组[$i]);
$add_date_values=$mysqli->real_escape_字符串($add_date_数组[$i]);
$add\u加班时间\u boolean=$mysqli->real\u escape\u字符串($add\u加班时间\u小时\u数组[$i]);
$sql_add_hours=“插入小时(工作编号、开始时间、完成时间、日期、加班)值(“$increment_job_编号”、“$add_start_值”、“$add_finish_值”、“$add_日期_值”、“$add_加班时间_布尔值”);
$mysqli->query($sql\u add\u hours);
//下一节仅用于调试
//echo($add\u date\u值);
//echo($add\u start\u值);
//echo($add_finish_值);
echo($sql\u add\u小时);
//echo($add\u加班时间\u小时\u值);
}

好的,在进行一些检查之后,实际上JQuery生成的第一组html组件是:

同样在第二个索引处,但由于循环从零开始,因此位置的条目为空

因此,从
-1
开始javascript部分中的
行数小时


var rownumhours=-1;

好的,在做了一些检查之后,实际上从JQuery生成的第一组html组件是:

同样在第二个索引处,但由于循环从零开始,因此位置的条目为空

因此,从
-1
开始javascript部分中的
行数小时

var rownumhours=-1;

快速修复 在动态添加新行字段之前,可以增加
rownumhours

最快的修复方法是将
rownumhours
值更改为0

var rownumhours = 0;
因此,新添加的字段行的索引为1及以上

还将
[]
添加到第一行/默认行的
名称
标记中:

<input type="time" name="add_start[]" size="4"> <!-- this will have an index of 0 -->
<!-- DO THE SAME WITH FIRST/DEFAULT SET OF FIELDS -->
然后删除
rownumhours
,不要为动态添加的输入字段分配索引:

var hoursrow = '<p id="rownumhours' + rownumhours + '">Start Time: <input type="time" name="add_start[]" size="4" value="' +  $(obj).closest('span.headings').find('[name="add_start"]').val() + '"> /*** JUST CONTINUE THE REST OF THE INPUT FIELDS ***/
开始时间:/***只需继续输入其余的输入字段***/
快速修复 在动态添加新行字段之前,可以增加
rownumhours

最快的修复方法是将
rownumhours
值更改为0

var rownumhours = 0;
因此,新添加的字段行的索引为1及以上

还将
[]
添加到第一行/默认行的
名称
标记中:

<input type="time" name="add_start[]" size="4"> <!-- this will have an index of 0 -->
<!-- DO THE SAME WITH FIRST/DEFAULT SET OF FIELDS -->
然后删除
rownumhours
,不要为动态添加的输入字段分配索引:

var hoursrow = '<p id="rownumhours' + rownumhours + '">Start Time: <input type="time" name="add_start[]" size="4" value="' +  $(obj).closest('span.headings').find('[name="add_start"]').val() + '"> /*** JUST CONTINUE THE REST OF THE INPUT FIELDS ***/
开始时间:/***只需继续输入其余的输入字段***/
非常感谢大家的帮助。很抱歉,我花了几天的时间才回复。我做了一些更改,去掉了rownhours++并使用[]来自行命名,我不知道它是否足够聪明,可以自行完成命名

Mysql部分工作得很好,我也离开了html部分,因为我只想在输入的几个小时内有不同的名称

var rownumhours=0;
功能添加小时数(obj,e){

var hoursrow='

开始时间:完成时间:日期:加班时间:非常感谢大家的帮助。很抱歉,我花了几天时间才回复。我已通过关闭rownumhours++并使用[]我不知道这个名字是不是足够聪明,可以自己命名

Mysql部分工作得很好,我也离开了html部分,因为我只想在输入的几个小时内有不同的名称

var rownumhours=0;
功能添加小时数(obj,e){

var hoursrow='

开始时间:完成时间:日期:加班时间:让我们从这里开始:#1-这是从HTML直接提交到PHP的“表单”吗?还是您在使用AJAX?#2-当

var\u转储($\u POST)时会得到什么
在你的PHP中?同样,如果你不再试图跟踪$u POST值中的索引,而只是将输入命名为
add_start[]
add_finish[]
,等等,那么你的生活可能会轻松得多。PHP会自动设置它们的索引。让我们从这里开始:#1-这是一个直接的“表单”吗从HTML提交到PHP?或者您正在使用AJAX?#2-当您在PHP中
var\u dump($\u POST)
时会得到什么,
var hoursrow = '<p id="rownumhours' + rownumhours + '">Start Time: <input type="time" name="add_start[]" size="4" value="' +  $(obj).closest('span.headings').find('[name="add_start"]').val() + '"> /*** JUST CONTINUE THE REST OF THE INPUT FIELDS ***/
 var rownumhours = 0;

 function addhours(obj, e) {
  var hoursrow = '<p id="rownumhours' + rownumhours + '">Start Time: <input type="time" name="add_start[]" size="4" value="' +
  $(obj).closest('span.headings').find('[name="add_start"]').val() + '">  Finish Time: <input type="time" name="add_finish[]" value="' +
  $(obj).closest('span.headings').find('[name="add_finish"]').val() + '"> Date: <input type="date" name="add_date[]" value="' +
  $(obj).closest('span.headings').find('[name="add_date"]').val() + '"> <input type="hidden" name="show_overtime_hours[]" size="1" value="' + 
  (($(obj).closest('span.headings').find('[name="add_overtime_hours"]').is(':checked')) ? '1' : '0' ) + '"> Overtime: <input type="checkbox" name="add_overtime_hours[]" size="1" value="'                      +                       
  $(obj).closest('span.headings').find('[name="add_overtime_hours"]').val() + '"' +
      (($(obj).closest('span.headings').find('[name="add_overtime_hours"]').is(':checked')) ? 'checked' : '') +
  ' "> <input type="button" value="Remove" onclick="removeRow(' +
  rownumhours + ');"></p>';
  jQuery('#hoursrow').append(hoursrow);
  rownumhours++;

    $(obj).closest('span.headings').find('[name="add_start"]').val("");
    $(obj).closest('span.headings').find('[name="add_finish"]').val("");
    $(obj).closest('span.headings').find('[name="add_date"]').val("");
    $(obj).closest('span.headings').find('[name="show_overtime_hours"]').val("");
    $(obj).closest('span.headings').find('[name="add_overtime_hours"]').removeAttr('checked');
   }
function removeRow(rnum) {
  jQuery('#rownumhours' + rnum).remove();
   }

</script>