我试图用PHP变量动态命名我的表单按钮

时间:2012-02-12 00:08:40

标签: php mysql html

您好我正在尝试为每个按钮名称指定一个唯一编号的名称。这些按钮对中最多可以有50个,每对都会引用一个订单。 (这是一个实践estore im building的管理页面)无论如何,他们的名字当前是“dele_ord”和“ship_ord”我希望它(不知何故)Dele_ord($ i)所以每个按钮都被编号,即: dele_ord34

一旦我有了这个设置,我将使用if(isset($ _ POST(dele_ordXX){...}来运行数据库查询,删除或修改与按钮相关的订单。

我是php和mysql的新手,想要更好地学习它。

        $i=1;
           while($i<=50)
        {
        echo '<h5>'.$row['o_id'].' || '.$row['first_name'].' || '.$row['last_name'].' || '.$row['prod_id'].' || '.$row['prod_title'].' || '.$row['prov'].' || '.$row['city'].' || '.$row['street'].' || '.$row['s_instruct'].' || '.$row['order_time'].' || '.$row['ship_status'].'</h5>';

        echo'<form action="admin.php" method="post" class="dele_o"><input type="button" name="delete_ord" value="Delete Order"></form>';
        echo'<form action="admin.php" method="post" class="ship_o"><input type="button" name="ship_ord" value="Ship Order"></form> <br />';         

        $row = mysqli_fetch_array($result);
         $i++;
        }
        mysqli_close($link); 
        ?>

4 个答案:

答案 0 :(得分:1)

每个按钮不需要单独的<form>标记,您可以在同一表单中使用不同名称的多个提交按钮。

无论如何,要回答你的问题,如果你的echo命令使用双引号“...”而不是单个'...',那么php允许你在你的字符串中嵌入变量,例如:

$i = 5;
echo "<input type=\"button\" name=\"delete_ord$i\" value=\"Delete Order\">";

那将输出

<input type="button" name="delete_ord5" value="Delete Order">

请注意我是如何使用\来转义字符串中的双引号,但如果您愿意,也可以使用单引号作为HTML属性。

答案 1 :(得分:1)

嗯,有趣的是,你是用你自己的表单上下文单独包装每个按钮,也许你可以根据提交的按钮完成你要找的东西。

在任何一种情况下,您都应指定隐藏值以指示订单的ID:

<form action="admin.php" method="post" class="dele_o">
    <input type="hidden" name="order_id" id="$i" />
    <input type="submit" name="delete_ord" value="Delete Order" />
</form>

<form action="admin.php" method="post" class="ship_o">
    <input type="hidden" name="order_id" id="$i" />
    <input type="submit" name="ship_ord" value="Ship Order" />
</form>

然后在接受POST方面你可以做到:

$order_id = $_POST["order_id"];
if(isset($_POST["delete_ord"])) {
    // Delete order by $order_id
}
if(isset($_POST["ship_ord"])) {
    // Ship order by $order_id
}

答案 2 :(得分:0)

Nick的答案是正确的,但我认为有一个更好的方法可以做到这一点。

不要回显那条长行,而是关闭PHP标记并将数字的动态元素放在PHP标记内。

while(loop){
?>
<input type="button" name="delete_ord" value="<?php echo $i ?>">
<?php
}

在帖子页面上,您可以访问$ _POST [“delete_ord”]获取正确的ID

答案 3 :(得分:-1)

不要使用formbutton来实现此目的。只需使用锚点。

for($i = 1; $i <= 50; $i++){
  echo '<h5>'.$row['o_id'].' || '.$row['first_name'].' || '.$row['last_name'].' || '.$row['prod_id'].' || '.$row['prod_title'].' || '.$row['prov'].' || '.$row['city'].' || '.$row['street'].' || '.$row['s_instruct'].' || '.$row['order_time'].' || '.$row['ship_status'].'</h5>';

  echo'<a href="admin.php?action=delete&id=' . $row['o_id'] .'">Delete Order</a>';
  echo'<a href="admin.php?action=ship&id=' . $row['o_id'] .'">Ship Order</a>';

  //$row = mysqli_fetch_array($result); // what is this for?
  $i++;
}

然后点击;

<?php

if(isset($_GET['action']) AND isset($_GET['id'])){

  switch($_GET['action']){

    case "delete":
      // do action for deletion $_GET['id']
    break;
    case "ship":
      // do action for shipment $_GET['id']
    break;
    default:
      die('unknown action');
    break;

  }

}

作为对表单与超链接的响应。表单用于提交访问者输入的数据。超链接用于页面请求。在这种情况下,根本没有理由使用表单,它没有添加任何价值或安全性,只是使它更复杂。无论使用表单还是超链接,您都需要通过检查请求URL的活动用户是否已登录并具有执行所请求的权限来保护您的页面。如果您的代码不安全,使用超链接只是不安全,使用表单,这是完全相同的。 汤姆的回复是完全垃圾,没有任何事实,否则请告诉我他们的论点。