【问题标题】:Form submission for different buttons不同按钮的表单提交
【发布时间】:2017-04-27 03:20:34
【问题描述】:

大家好, 我有一个带有两个按钮的表单。一个用于“编辑”,另一个用于“删除”试点记录:

<form method="post" action="<?php echo adminurl('/pilotmanager/pilotsedit');?>">
<table class="PManager">
    <tr><th colspan="2">pilot edit form</th></tr>
    <tr>
        <td><b>First Name:</b></td>
        <td><input type="text" name="firstname" value="<?php echo $firstname;?>" /></td>
    </tr>
    <tr>         
        <td><b>Last Name:</b></td>
        <td><input type="text" name="lastname" value="<?php echo $lastname;?>" /></td>
    </tr>
    <tr>
        <td><b>Airline:</b></td>
        <td>
            <select name="code">
            <?php
            $allairlines = OperationsData::GetAllAirlines();
            foreach($allairlines as $airline)
                {
                    echo '<option value="'.$airline->code.'" '.$sel.'>'.$airline->name.'</option>';
                }
            ?>  
            </select>
        </td>
    </tr>
    <tr>
        <td><b>Transfer Hours:</b></td>
        <td><input type="text" name="transferhours" value="<?php echo $transferhours;?>" /></td>
    </tr>
    <tr> 
        <td><b>Hub:</b></td>
        <td>
            <select name="hub">
            <?php
            $allhubs = OperationsData::GetAllHubs();
            foreach($allhubs as $hub)
                {
                    echo '<option value="'.$hub->icao.'" '.$sel.'>'.$hub->icao.' - ' . $hub->name .'</option>';
                }
            ?>  
            </select>
        </td>
    </tr>
    <tr>
        <td><b>Total Flights:</b></td>
        <td><input type="text" name="totalflights" value="<?php echo $totalflights;?>" /></td>
    </tr>
    <tr> 
        <td><b>Total Pay:</b></td>
        <td><input type="text" name="totalpay" value="<?php echo $totalpay;?>" /></td>
    </tr>
    <tr> 
        <td><b>Pilot active:</b></td>
        <td>
        <?php 
        if(intval($pilot->retired) == 1) 
            {  
                $retsel='selected'; 
                $activesel = ''; 
            }
        else
            {
                $activesel = 'selected'; 
                $retsel = '';
            }
        ?>
            <select name="retired">
                <option value="0" <?php echo $activesel?>>Active</option>
                <option value="1" <?php echo $retsel?>>Inactive</option>
            </select>
        </td>
    </tr>
    <tr> 
        <td><b>Email Address:</b></td>
        <td><input type="text" name="email" value="<?php echo $email;?>" /></td>
    </tr>
    <tr>
        <td colspan="2">
            <input type="hidden" name="pilotid" value="<?php echo $pilotid;?>">
            <input type="hidden" name="action" value="saveprofile">
            <input type="hidden" name="action" value="deletepilot">
            <input type="submit" value="Save Changes" style="width:200px;">
            <input type="submit" value="Delete" style="width:200px;">
        </td>
    </tr>

在我的模块中,我有以下功能:

public function pilotsedit() {
    $pilotid = $_POST['pilotid'];
    $action = $_POST['action'];
    switch($action) {
        case 'saveprofile':
            $this->savepro($pilotid);
            echo '<script type="text/javascript">alert("Profile Updated!");</script>';
            $url = $_SERVER['HTTP_REFERER']; // right back to the referrer page from where you came.
            echo '<meta http-equiv="refresh" content="5;URL=' . $url . '">';
            break;
        case 'deletepilot':
            $this->deletePilot($pilotid);
            echo '<script type="text/javascript">alert("Pilot Deleted!");</script>';
            $url = $_SERVER['HTTP_REFERER']; // right back to the referrer page from where you came.
            echo '<meta http-equiv="refresh" content="5;URL=' . $url . '">';
            break;
    }
}

我试图在我的模块中使用“case”语句分隔按钮提交,但是当我使用“Edit”按钮提交表单时,记录被删除。请帮我找出我做错了什么。谢谢

【问题讨论】:

  • 移除两个具有相同名称的隐藏输入(因为这完全没有意义),并将名称和值放在每个提交按钮上。只有用于提交的按钮的名称/值才会传递给$_GET/$_POST
  • 好吧,您有两个隐藏的输入字段,定义了相同的 POST 变量 action。这意味着第二个将获胜。
  • 已经在这里回答了:stackoverflow.com/questions/2129346/…
  • 谢谢大家。我还需要“case”语句吗?

标签: php html forms


【解决方案1】:

答案是使用 button 代替 input 标签。我所做的是以下内容:

<td colspan="2">
  <input type="hidden" name="pilotid" value="<?php echo $pilotid;?>">
  <button type="submit"  name="action"  value="saveprofile" style="width:200px;">Save Changes</button>
  <button type="submit"  name="action"  value="deletepilot" style="width:200px;">Delete Pilot</button>
</td>

在我的 PHP 模块中:

public function pilotsedit() {
    $pilotid = $_POST['pilotid'];
    $action = $_POST['action'];
    switch($action) {
        case 'saveprofile':
            $this->savepro($pilotid);
            break;
        case 'deletepilot':
            $this->deletePilot($pilotid);
            break;
    }
}

它就像我期望的那样工作。

【讨论】:

    【解决方案2】:

    你们都在 saveprofile 和 deletepilot 上发送这些操作

    &lt;input type="hidden" name="action" value="saveprofile"&gt;

    &lt;input type="hidden" name="action" value="deletepilot"&gt;

    你应该把它们分开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 2011-02-19
      相关资源
      最近更新 更多