单个PHP页面上的多个表单

时间:2014-06-12 01:46:19

标签: php

我对“''''''''''用户可以更改其用户名,电子邮件,姓名,密码等的页面,但当我在页面上有多个表单时似乎有冲突,因为它们都是单独工作的?

我可能会遗漏一些显而易见的东西,所以如果有人能帮助我很欣赏它。

<?php 
require 'core/init.php';
include 'includes/overall/header.php'; 
?>
<h1><p>Hello <?php echo escape($user->data()->username); ?></a>!</p></h1> 

<h4><p>You joined the MMOunition community <?php echo escape($user->data()->joined); ?></a></p></h4> 

<alert_banner>
<?php
if(Session::exists('home')) {
    echo '<p>', Session::flash('home'), '</p>';
}
?>
</alert_banner>
<br />
<form action="changeusername.php" method="post">
    <div class="field">
        <label for="username">Username:</label>
        <input type="text" name="username" id="username" value="<?php echo escape($user->data()->username); ?>">
        <input type="submit" value="Update">
        <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
    </div>
</form>


<br />
<form action="changepassword.php" method="post">
    <div class="field">
        <label for="password_current">Current password:</label>
        <input type="password" name="password_current" id="password_current">
    </div>
    <div class="field">
    <label for="password_new">New password:</label>
        <input type="password" name="password_new" id="password_new">
    </div>
    <div class="field">
        <label for="password_new_again">New password again:</label>
        <input type="password" name="password_new_again" id="password_new_again">
        <input type="submit" value="Change">
        <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
    </div>
</form>


</br>
<form action="changename.php" method="post">    
    <div class="field">
        <label for="name">Name:</label>
        <input type="text" name="name" id="name" value="<?php echo escape($user->data()->name); ?>">
        <input type="submit" value="Update">
        <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
    </div>
</form> 


<br />   
<form action="changeemail.php" method="post">      
    <div class="field">
        <label for="email">Change email address:</label>
        <input type="text" name="email" id="email" value="<?php echo escape($user->data()->email); ?>">
        <input type="submit" value="Update">
        <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
    </div>
</form>
<?php
include 'includes/overall/footer.php';
?>

2 个答案:

答案 0 :(得分:-1)

你好你还没有提到你实际面临的问题,但这似乎问题是服务器端表单的唯一标识

请看这篇文章

Multiple HTML Forms on One Page

希望这会有所帮助;)

答案 1 :(得分:-1)

将每个表单操作设置为当前页面,并使用隐藏的输入来确定正在执行的操作。使用此方法可以防止用户被放到不同的页面上,并将所采取的操作放入可以使用或操作的变量中。

如果您想为实际功能使用单独的PHP脚本,请使用包含或要求。

<form action="" method="post">
<div class="field">
    <label for="username">Username:</label>
    <input type="text" name="username" id="username" value="<?php echo escape($user->data()->username); ?>">
    <input type="submit" value="Update">
    <input type="hidden" name="token" value="<?php echo Token::generate(); ?>">
    <input type="hidden" name="action" value="changeUsername">
</div>
</form>

然后PHP脚本从POST获取操作并使用开关来确定要调用的函数。

if (isset($_REQUEST['action'])) {
    $action = $_REQUEST['action'];
    switch ($action) {
        case "changeUsername":
            changeUsername();
            break;
        case "changePassword":
            ...

如上所述,如果您希望将这些函数放在单独的php文件中,则可以使用include或require。

这样可以在用户更新信息时方便地将用户放回同一页面,以便他们可以进行其他更新。