PHP获取相应的列ID

时间:2015-01-04 09:40:19

标签: javascript php jquery html mysql

我有以下html / php表:

    <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>

我创建了一个系统来跟踪谁提交他们的作业,所以它是以表格的形式。在左侧将是所有人的名字(在班级中),右侧是具有各种任务名称的单独列。

我正在使用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,有更好的方法吗?

Sample table from my code. Note that i removed the add column/row code in my code snippet above to make it simpler

请注意,我删除了上面代码段中的添加列/行代码,以提高简洁性。

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

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

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

1 个答案:

答案 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">&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>