单击时获取按钮的ID并将其存储为会话变量

时间:2014-11-14 15:04:11

标签: php

我试图制作一个小版本的博客,但是在点击附加到该帖子的按钮来编辑数据库中的某个帖子时,我感到困惑。我为每个与数据库中的id匹配的按钮设置了一个id,但我现在需要做的是将它存储在一个会话变量中,这样我就可以使用这个id从数据库中获取信息,从而允许我更新数据库中的信息。

以下是帖子的样子:

$result = $db->query("SELECT * FROM posts");

while($row = $result->fetch()) {
   echo "<li><h1>" . $row['headline'] . "</h1></li>";
   echo "<li><b>" . $row['content'] . "</b></li>";
   echo "<li><h4>" . $row['author'] . "</h4></li>";
   echo "<li><h5>" . $row['date'] . "</h5></li>";
   echo "<input type='submit' name='edit' value='Edit' id='" . $row['id'] . "'>";
   echo "<br>";
   echo "<input type='submit' name='delete' value='delete' id='" . $row['id'] . "'>";
}

   if (isset($_POST['edit'])) {
       //Here is where I need to get the ID of the clicked edit button
       //But I can't figure out how to do that in PHP
   }

8 个答案:

答案 0 :(得分:2)

HTML表单元素的id属性不会随提交时的表单一起发送。您要做的是使用表单中的<input type="hidden" name="post_id" value="" />元素来检索帖子的ID。

答案 1 :(得分:2)

在表单中添加一个名为postId的隐藏字段。

然后,在按钮中添加一个类,当按下给定类的任何按钮时,使用jQuery可以更新隐藏字段的值。

...
<input type="submit" name="edit" value="Edit" class="postButton" id="<?php echo $row["id"]; ?>" />
...
<input type="submit" name="edit" value="Edit" class="postButton" id="<?php echo $row["id"]; ?>" />
...
<input type="submit" name="edit" value="Edit" class="postButton" id="<?php echo $row["id"]; ?>" />
...
<input type="hidden" name="postId" value="" />

然后你可以使用jQuery将id传递给hiddenfield:

$('.postButton').click(function() {
    $('#postId').val($(this).attr('id'));
});

或者使用链接来实现这一点,并将其从css格式化为一个按钮。

答案 2 :(得分:0)

我建议使用带有链接的编辑页面:

<a href="/posts/12941/edit">edit post</a>

答案 3 :(得分:0)

我不认为你只能用PHP做到这一点。您可以为每个按钮设置不同的name属性并以此方式识别它,尽管我不确定如何在不使用monstreous if/else语句的情况下有效地检测哪些被点击。

另一种方法是使用jQuery(或纯Javascript,尽管我推荐使用jQuery)和AJAX请求将单击按钮的id发送到PHP脚本

这样的事情:

的jQuery

$('.button').on('click', function(e){
    e.preventDefault();
    $.post("php_page.php", {id: $(this).attr('id')}, function(data){
        //This is the success function, you can display a message or something
    });
});

然后,在PHP中

if(!empty($_POST['id']))
    $_SESSION['button_clicked'] = $_POST['id']

这是非常基本的,你需要更多的代码来使一切工作(例如:session_start(),jQuery中的文档就绪函数),但这就是我要做的。

您也可以使用AJAX执行GET请求,这更合适取决于您的代码。

答案 4 :(得分:0)

您可以使用JQUERY获取id,然后在php中设置为会话..

while($row = $result->fetch()) {
 echo "<li><h1>" . $row['headline'] . "</h1></li>";
 echo "<li><b>" . $row['content'] . "</b></li>";
 echo "<li><h4>" . $row['author'] . "</h4></li>";
 echo "<li><h5>" . $row['date'] . "</h5></li>";
 echo "<input type='submit' class='edit' name='edit' value='Edit' data-id='your id goes here' id='" . $row['id'] . "'>";
 echo "<br>";
 echo "<input type='submit' name='delete' value='delete' id='" . $row['id'] . "'>";
}

<强> JQUERY

$('.edit').on('click', function(){
var id = $(this).attr('data-id);
$.ajax({
   type: 'post',
   url: '/path/where /you want to set session',
   data: {id : id},
   success: function (res){
     alert(res);
 });
});

答案 5 :(得分:0)

你可以通过以下方式实现

    $result = $db->query("SELECT * FROM posts");
    ?>

    <?php
        echo "<li><h1>" . $row['headline'] . "</h1></li>";
   echo "<li><b>" . $row['content'] . "</b></li>";
   echo "<li><h4>" . $row['author'] . "</h4></li>";
   echo "<li><h5>" . $row['date'] . "</h5></li>";

           echo "<form action='".$_SERVER['PHP_SELF']."' method='post'><input type='hidden' name='id' value='".$row['id']."'>
    <input type='submit' name='edit' value='Edit' id='" . $row['id'] . "'></form>";
       echo "<br>";
       echo "<form action='".$_SERVER['PHP_SELF']."' method='post'><input type='hidden' name='id' value='".$row['id']."'><input type='submit' name='delete' value='delete' id='" . $row['id'] . "'></form>";
    }

       if (isset($_POST['edit'])) {
           $id=$_POST['id'];
 $_SESSION['id']=$id;
       } 

答案 6 :(得分:0)

<script>
    function submitForm(idButton) {
        document.getElementById('storedClickedButtonId').value = idButton;
        document.forms["MyForm"].submit();
    }
</script>

<form name="MyForm" action="tt.php" method="post">

<?php
while($row = $result->fetch()) {
   echo "<li><h1>" . $row['headline'] . "</h1></li>";
   echo "<li><b>" . $row['content'] . "</b></li>";
   echo "<li><h4>" . $row['author'] . "</h4></li>";
   echo "<li><h5>" . $row['date'] . "</h5></li>";
   echo "<input type='button' name='edit' onClick='submitForm(this.id)' value='Edit' id='" . $row['id'] . "'>";
   echo "<br>";
   echo "<input type='button' name='delete' onClick='submitForm(this.id)' value='delete' id='" . $row['id'] . "'>";
   echo "<input type='hidden' id='storedClickedButtonId' name='clickedButtonId' value='' />";
}
?>
</form>

答案 7 :(得分:0)

您需要将每个部分包装在自己的表单标记中。 然后将id设置为隐藏字段,并将提交按钮更改为具有相同的ame但不同的值(在本例中为action - edit / delete)。

然后你可以从隐藏字段中检索值,并根据按下的提交按钮的值来确定如何处理它:

while($row = $result->fetch()) {
   echo "<li><h1>" . $row['headline'] . "</h1></li>";
   echo "<li><b>" . $row['content'] . "</b></li>";
   echo "<li><h4>" . $row['author'] . "</h4></li>";
   echo "<li><h5>" . $row['date'] . "</h5></li>";
   echo "<form method='post'>"; //form tag
   echo "<input type='hidden' name='deleteid' value=" . $row['id'] . ">"; //get id
   echo "<input type='submit' name='action' value='edit' id='" . $row['id'] . "'>";//pick action
   echo "<br>";
   echo "<input type='submit' name='action' value='delete' id='" . $row['id'] . "'>";//pick action
   echo "/form>"
}

if (isset($_POST['action'])) {
    $id=$_POST['deleteid'];//get id
    if($_POST['action']=='edit'){//do edit}
    else if($_POST['action']=='delete'){//do delete}
}