PHP 抓取对应的列id

PHP grab corresponding column id

我有以下 html/php table:

    <table id="blacklistgrid">
        <tr id="Row1">
            <td class="space">&nbsp;</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>

我正在创建一个系统来跟踪谁提交了他们的家庭作业,因此它采用 table 的形式。左侧是所有人员的姓名(在 class 中),右侧是包含各种作业名称的单独列。

我正在使用 contenteditable 来更新作业的名称/ 以及在 student/person 提交作业时勾选的复选框。

但是,为了使滴答工作,我需要获取相应的 .columnclass id(我已将其指定为 assignmentid),以便我更新正确的字段。

现在的问题是列class php在前面的while循环中,所以我不太确定如何从第二个[=中访问列class id 47=] while 循环。 问题:php 是否可以在不使用 javascript 的情况下获取 td(元素)的 ID?

如果用户提交作业,我的 table 中提交的行将为 1,因此 php 将显示选中的复选框。但是,根据其 mysql 查询,我还需要添加分配 ID,这可以从相应的 td 列的 ID class id.

中检索到

table 看起来像这样:

             Assignment 1           Assignment 2

Name1          CHECKBOX                CHECKBOX

Name2          CHECKBOX                CHECKBOX

Name3          CHECKBOX                CHECKBOX

Name4          CHECKBOX                CHECKBOX

所以假设我想看看 name1 是否提交了 assignment1,然后在我的 mysql table 中,我需要同时提供用户 ID 和相应的作业 ID,以便检索作业id,我需要获取 "assignment 1" .columnclass 元素的 id(我存储了 assignmentid 的值)我觉得这是一个 hack,有没有更好的方法来做到这一点?

请注意,我删除了上面代码片段中的添加 column/row 代码以增加简洁性。

为了更容易理解上面的 table 代码,table 是这样创建的:

(row 1)  emptytd1     td2(assignment)..
(row 2)    td1(name)  td2(checkbox)..
  .
  .

要确定是否应该检查 td2,我需要查询数据库,为此,由于有多个用户和多个分配,我需要名称和分配,名称很容易获得,因为它在查询中,但赋值在前面的 php while 循环中。

看起来,当您开始列出 table 中的用户时,您并没有遍历现有分配。无论用户提交了什么作业,您只写入第一个作业列。

因此,下面是对现有代码的一些调整。首先,我在您的作业 header 行中添加了两行,并标有注释。第一个创建一个赋值数组(供以后使用),第二个用现有赋值加载该数组。

然后,在遍历用户时,我为每个用户添加了一个遍历现有分配数组的循环。这完成了两件事,1) 它将分配与适当的列对齐,以及 2) 它为您提供了检查用户是否提交了分配所需的分配 ID。 (我还使用准备好的语句来增加安全性。)

注意: 我猜你的 "userassignment" table 有一个名为 "a_id" 的字段,它与 [=23] 一起设置=] 当用户提交作业时。

<table id="blacklistgrid">
        <tr id="Row1">
            <td class="space">&nbsp;</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>