我有以下html / php表:
<table id="blacklistgrid">
<tr id="Row1">
<td class="space"> </td>
<?php
$query=mysqli_query($mysqli, "SELECT assignment,a_id FROM assignments WHERE groupid=0");
while ($row=mysqli_fetch_array($query)){
echo'<td class="columnname" id="'.$row['a_id'].'" contenteditable="true">'.$row['assignment'].'</td>';
}
?>
<script>
$('.columnname').keyup(function() {
delay(function(){
var text= $('.columnname').text();
var id= $('.columnname').attr('id')
$.ajax({
type:"post",
url:"updateassignment.php",
data:{text:text, id:id},
success:function(data){
console.log('success bro!');
}
});
}, 500 );
});
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
</script>
</tr>
<?php
$query=mysqli_query($mysqli, "SELECT name,memberid_fk FROM groupsort INNER JOIN members ON groupsort.memberid_fk=members.memberid WHERE group_id_fk=0");
while ($row=mysqli_fetch_array($query)){
echo' <tr id="Row2">';
echo' <td>';
echo'<h3>'.$row['name'].'</h3>';
echo'</td>';
$query=mysqli_query($mysqli, "SELECT submitted FROM userassignment WHERE userid=".$row['memberid_fk']." and groupid=0");
$row2=mysqli_fetch_array($query);
if ($row2['submitted']==0){
echo' <td>';
echo' <input type="checkbox" name="red" />';
echo' </td>';
}else if ($row2['submitted']==1) {
echo' <td>';
echo' <input type="checkbox" name="red" checked />';
echo' </td>';
}
echo' </tr>';
}
?>
</table>
我创建了一个系统来跟踪谁提交他们的作业,所以它是以表格的形式。在左侧将是所有人的名字(在班级中),右侧是具有各种任务名称的单独列。
我正在使用contenteditable来更新作业的名称/以及复选框,以便在学生/个人提交作业时进行勾选。
但是,为了使tick工作,我需要获得相应的.columnclass id(我已指定为assignmentid),以便我更新正确的字段。
现在的问题是,classclass php在前面循环,所以我不太确定如何从第二个php while循环访问列类id。 问题:有没有办法让php在不使用javascript的情况下获取td(一个元素)的id?
如果用户提交了作业,我表中提交的行将为1,因此php将显示选中的复选框。但是,根据其mysql查询,我还需要添加赋值ID,可以从相应的td columnclass id的ID中检索。
表格如下所示:
Assignment 1 Assignment 2
Name1 CHECKBOX CHECKBOX
Name2 CHECKBOX CHECKBOX
Name3 CHECKBOX CHECKBOX
Name4 CHECKBOX CHECKBOX
所以让我说我想看看name1是否提交了assignment1,然后在我的mysql表中,我需要同时提供userid和相应的赋值id,因此要检索赋值id,我需要获取id的id “赋值1”.columnclass元素的id(我存储了assignmentid的值)我觉得这是一个hack,有更好的方法吗?
请注意,我删除了上面代码段中的添加列/行代码,以提高简洁性。
为了更容易理解上面的表格代码,表格就是这样创建的:
(row 1) emptytd1 td2(assignment)..
(row 2) td1(name) td2(checkbox)..
.
.
要确定是否应该检查td2,我需要查询数据库,并且要这样做,因为有多个用户和多个赋值,我需要名称和赋值,名称很容易获得,因为它在查询,但分配是在以前的php while循环中。
答案 0 :(得分:1)
看起来,当您列出表格中的用户时,您不会循环现有的分配。无论用户提交的是什么分配,您只能写入第一个分配列。
因此,下面是对现有代码的一些调整。首先,我在您的赋值标题行中添加了两行,标记了注释。第一个创建一个赋值数组(供以后使用),第二个使用现有赋值加载该数组。
然后,当循环用户时,对于每个用户,我在现有的赋值数组上添加了一个循环。这完成了两件事,1)它将赋值与相应的列对齐,2)它为您提供了检查用户是否提交赋值所需的赋值ID。 (我还使用预准备语句来增加安全性。)
注意:我猜你的&#34; userassignment&#34; table有一个名为&#34; a_id&#34;的字段。与&#34; userid&#34;一起设置当用户提交作业时。
<table id="blacklistgrid">
<tr id="Row1">
<td class="space"> </td>
<?php
$query=mysqli_query($mysqli, "SELECT assignment,a_id FROM assignments WHERE groupid=0");
$assignments = array(); // create empty assignments array
while ($row=mysqli_fetch_array($query)){
echo'<td class="columnname" id="'.$row['a_id'].'" contenteditable="true">'.$row['assignment'].'</td>';
$assignments[$row['a_id']] = $row['assignment']; // add assignment to array
}
?>
<script>
$('.columnname').keyup(function() {
delay(function(){
var text= $('.columnname').text();
var id= $('.columnname').attr('id')
$.ajax({
type:"post",
url:"updateassignment.php",
data:{text:text, id:id},
success:function(data){
console.log('success bro!');
}
});
}, 500 );
});
var delay = (function(){
var timer = 0;
return function(callback, ms){
clearTimeout (timer);
timer = setTimeout(callback, ms);
};
})();
</script>
</tr>
<?php
$query=mysqli_query($mysqli, "SELECT name,memberid_fk FROM groupsort INNER JOIN members ON groupsort.memberid_fk=members.memberid WHERE group_id_fk=0");
while ($row=mysqli_fetch_array($query)){
echo' <tr id="Row2">';
echo' <td>';
echo'<h3>'.$row['name'].'</h3>';
echo'</td>';
// LOOP OVER ASSIGNMENTS ARRAY
foreach ( $assignments as $a_id => $assignment ) {
$query2=mysqli_prepare($mysqli, "SELECT submitted FROM userassignment WHERE userid=? and groupid=0 and a_id=?"); // added assignment id condition
mysqli_stmt_bind_param($query2, "ii", $row['memberid_fk'], $a_id);
mysqli_stmt_execute($query2);
mysqli_stmt_bind_result($query2, $submitted);
mysqli_stmt_fetch($query2);
$checked = ( $submitted )? 'checked': '';
echo" <td> <input type=\"checkbox\" name=\"red\" $checked /> </td>";
mysqli_stmt_close($query2);
} // end assignments array loop
echo' </tr>';
}
?>
</table>