while循环表单删除mysql_entry

时间:2012-10-22 09:32:23

标签: php mysql forms while-loop logic

我有这个代码块,显示在用户的日志页面上。他们可以添加一个条目,并且可以选择在页面上删除条目。

我会在代码中显示一些注释,然后解释问题。

// Figures out how many recent posts to display
$posts = $config_journalposts + 1;
if($noposts!=1) {
    // Gets the data from the query
    while(($row = mysql_fetch_array($journalquery)) && ($posts > 1)) {
        // For each of the posts that were gathered, display the following:
        echo '<table border="0" width="100%">
            <tr>
                <td colspan="2" style="vertical-align:bottom;">
                    // Display the title as a link to be used as a permalink
                    <a href="?id='.$row['id'].'"><p class="fontheader">'.$row['title'].'</p></a>
                </td>
            </tr>
            <tr>
                // Show the o-so-important content
                <td width="100%" style="vertical-align:top;padding-left:10px;">
                    '.$row['content'].'
                </td>
            </tr>
            <tr>
                // Show the date
                <td style="font-size:8pt;padding-top:10px;">'.$row['date_day'].'/'.$row['date_month'].'/'.$row['date_year'].'</td>';
                    // Checks if the current user is the owner of the journal or an admin
                    if($_SESSION['user']==$pageowner || $_SESSION['user_rank']=='Admin') {
                        echo '<td align="right">

                            // FOCUS POINT
                            <form method="POST" id="deljournal">
                                <input type=\'hidden\' name=\'delete_id\' value=\''.$row['id'].'\' />
                                // A delete button that executes a bit of Javascript
                                <button type="button" class="button" name="delete" value="Delete" onClick="delete_journal()" />Delete</button>
                            </form>
                            // END FOCUS POINT

                        </td>';
                    }
                echo '</tr>
            </table>
        <hr>
        ';
    $posts --;
}

以下是按下按钮时触发的Javascript

function delete_journal() {
    var answer = confirm("Are you sure you want to delete this journal entry?")
    if (answer){
        // Submits the form
        $("#deljournal").submit()
    }
}

此javascript触发上面的PHP代码中的论坛,该代码重新加载页面并在页面的最顶部,在标记之前触发此

if(($_POST['delete_id'])) {
    // Gets the post ID from the hidden forum tag
    $deleteid = addslashes(strip_tags($_POST['delete_id']));

    // Deletes the row that has the ID of the hidden form
    mysql_query("DELETE FROM `gamezoid_accounts`.`journal_$pageowner` WHERE `id`='$deleteid'");
}

现在,针对这个问题。在while循环中,这个表单反复重复。发生的情况是,在按下删除按钮时,它会触发具有ID“deljournal”的表单。由于它们都具有ID“deljournal”,因此它在页面顶部执行。尝试将帖子ID嵌入到表单ID中会破坏代码,因为mysql_query不知道删除函数是在第一时间被触发的。

有什么方法吗?

我使用Javascript作为触发器的原因是确认弹出窗口,以防有人问。

无论如何,感谢大家阅读这篇文章!

3 个答案:

答案 0 :(得分:0)

 <input type=\'hidden\' name=\'delete_id[]\' value=\''.$row['id'].'\' />

然后只有u才会在发布时将所有值作为数组获取。

答案 1 :(得分:0)

 <input type=\'hidden\' name=\'delete_id[]\' value=\''.$row['id'].'\' />

然后只有u才会在发布时将所有值作为数组获取。 在服务器端你应该使用

$delete_values= implode (',',$_POST['delete_id']);

答案 2 :(得分:0)

找到解决方案。

我已将表单更改为

<form method="POST" id="deljournal_'.$row['id'].'">
    <input type=\'hidden\' name=\'delete_id\' value=\''.$row['id'].'\' />
</form>
<button type="button" class="button" name="delete" value="Delete" onClick="delete_journal_'.$row['id'].'()" />Delete</button>

通过将日记帐分录ID添加到表单的ID和onClick函数中。 javascript就在表格单元格之外的下方,看起来像:

<script type="text/javascript">
    function delete_journal_'.$row['id'].'() {
        var answer = confirm("Are you sure you want to delete this journal entry?")
        if (answer){
            $("#deljournal_'.$row['id'].'").submit()
        }
    }
</script>

其中条目ID已添加到函数名称和表单ID标记中。通过将Javascript放入while循环而不是外部文件,可以使用循环操作它以获得相同的值。

它有点乱,会略微增加加载时间+执行时间,但这是我能找到的最快的方式。

希望这可以帮助其他遇到类似问题的人。