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