将变量分配给输入类型[submit]名称并将其用于PHP查询

时间:2016-03-05 17:14:09

标签: php

我有以下按钮echo' d:

<input type='submit' name='delete_$id' value='x' title='Delete message' />

$id从这里收集:

$get_messages = mysqli_query ($connect, "SELECT * FROM private_messages WHERE message_to = '$username' OR message_from='$username' AND
                DELETED ='no' ORDER BY id DESC");
  while ($get_msg = mysqli_fetch_assoc($get_messages)){
        $id         = $get_msg['id'];
  }

我想获取x所分配给的消息的ID,然后执行此操作:

if (@$_POST['delete_' . $id . '']){
    echo "Deleted";
}

但回显没有显示在我的页面上,这意味着代码有问题。我已经检查了很多次,并且无法弄清楚它为什么不工作?

修改

我只是想添加一个delete按钮,点按SET我表格中的deletedyes

以下是找到delete按钮的完整代码:

<?php
echo "
<div class='parent'> 
  <div class='msg_prof'>
    <img class='img-rounded' src='/user_data/profile_pics/$my_pro_pic'/>
  </div>
  <div class='new_msg_from_user'>
      <p><b style= 'color: red;'> You said:</b> $msg_body</p>
      <span class='faded'>$date </span>
      <input type='submit' name='delete_$id' value='x' title='Delete message' />
  </div><hr/>
</div>";
?>

我在这背后的想法是,我可以使用$id变量获取帖子的ID,并将其分配给名称。然后使用if (@$_POST['delete_' . $id . ''])我可以根据$id执行查询 - 现在我正在尝试回显一条消息,仅用于测试目的。这是我对此功能的所有代码。

3 个答案:

答案 0 :(得分:0)

你忘记了php标签。

<input type='submit' name='delete_<?php echo $id ?>' value='x' title='Delete message' />

答案 1 :(得分:0)

首先,看看你在显示的是什么:

<input type='submit' name='delete_$id' value='x' title='Delete message' />

e.g。名称应/必须显示为name='delete_1'name='delete_9'或其名称末尾带有数字/数字的任何其他string。一般说:name='delete_anyNumber'

为此,您应该在PHP文件中拥有消息的获取记录(您想要显示的消息并且只有一个交叉按钮,以便良好地呈现NORMS)并迭代每个结果并在迭代循环中回显所有带有X按钮的消息,如:

echo "<input type='submit' name='delete_" . $ResultVariableHoldingRows['id'] . "' value='x' title='Delete message' />";

原因:(您必须正确显示它,以便在发布表单时,您必须能够获得需要删除的确切POSTED值,因此您不必迭代以检查哪一行需要删除。)

解决上述问题后,请按照以下说明操作:

在提交后调用的PHP文件中访问该值:

    $_POST['\'delete_' . $id . '\'']

建议:使用AJAX-Calls删除相应的消息,因为单个页面上的多个表单不是一个好方法,并且在发布问题之前在AJAX上进行一些良好的搜索< / p>

答案 2 :(得分:0)

正如在提到的评论中,你必须遍历global POST array

<?php
function getRecordIdFromKey($sKey)
{
      $sId = str_replace("delete_", "", $sKey);
      $iReturn = -1;
       if (strlen($sId) > 0 && is_numeric($sId))
       {
           $iReturn = (int) $sId;
        }
        return $iReturn;
  }

  foreach ($_POST as $sKey => $mValue)
   {
          $iId = getRecordIdFromKey($sKey);
           if ($iId >= 0)
            {
                   // fire up your delete query
            }
     }