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


Assigning variable to input type[submit] name and using it for PHP query

我有以下按钮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表中的deleted列以yes

以下是找到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执行查询 - 现在我正在尝试回显消息,仅用于测试目的。这是我为此功能编写的所有代码。

你忘记了php标签。

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

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

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

例如,名称应/必须显示为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 调用删除相应的消息,因为单个页面上的许多表单不是一个好方法,在发布问题之前在 AJAX 上进行一些好的搜索

如提到的评论,您必须遍历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
            }
     }