Php 未使用POST方法显示电子邮件值

Php 未使用POST方法显示电子邮件值,php,email,Php,Email,我有一个表单,其中只有一个字段,即“电子邮件id”,因此我要做的是,当我输入电子邮件id时,电子邮件id必须分为两部分,如用户名和域名,并且必须在下一个表单中显示。 因此,我的问题是,我的第二个表单没有显示结果,但是当我使用$\u SESSION方法代替$\u POST(获取电子邮件字段的值)时,它获取该值并将其拆分,但只获取一个值,因为我想要获取多个电子邮件ID。 为了更好地理解,请检查我的代码 <?php session_start(); ?> <!Doctype

我有一个表单,其中只有一个字段,即“电子邮件id”,因此我要做的是,当我输入电子邮件id时,电子邮件id必须分为两部分,如
用户名
域名
,并且必须在下一个表单中显示。
因此,我的问题是,我的第二个表单没有显示结果,但是当我使用
$\u SESSION
方法代替
$\u POST
(获取电子邮件字段的值)时,它获取该值并将其拆分,但只获取一个值,因为我想要获取多个电子邮件ID。
为了更好地理解,请检查我的代码

<?php
    session_start();
?>
<!Doctype html>
<html>
    <head>
        <title>PHP3</title>
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
        <link rel="http://netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.min.css">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    </head>
    <body>
        <div class="jumbotron">
            <div class="container">
                <form class="form-horizontal" method="post" action="screen3_controller.php">
                    <div class="form-group">
                        <label class="control-label col-sm-2" for="email_text">Email:</label>
                        <div class="col-sm-10">
                            <input type="email" class="form-control"  name="email_text" id="email_text">
                        </div>
                    </div>
                    <div class="form-group"> 
                        <div class="col-sm-offset-2 col-sm-10">
                            <input type="submit" name="submit" id="submit_button" class="btn btn-default" value="Submit">
                        </div>
                    </div>
                </form>
            </div>
        </div>
        <table class="table table-striped table-responsive">
            <thead>
                <tr>
                    <th>Email Id</th>
                </tr>
            </thead>
            <tbody>
                <?php
                    if(isset($_SESSION['all_post']) && !empty($_SESSION['all_post']))
                    {
                       foreach($_SESSION['all_post'] as $key=>$value)
                       {
                        ?>
                            <tr>
                                <td><?php echo $value['email_text']; ?></td>
                            </tr>
                    <?php
                        }
                    }
                ?>
            </tbody>
        </table>
        <div class="container">
            <table class="table table-bordered">
                <thead>
                    <tr>
                        <th>User Name</th>
                        <th>Domain Name</th>
                    </tr>
                </thead>
                <tbody>
                    <?php
                        $str = $_POST['email_text'];
                        $hello = explode("@", $str);
                        $_SESSION ['emails'] = $hello;
                        echo "<tr>";
                        foreach ($_SESSION ['emails'] as $value)
                        {
                            echo "<td>$value</td>";
                        }
                        echo "</tr>";
                    ?>
                </tbody>
            </table>
        </div>
    </body>
</html>

PHP3
电邮:
电子邮件Id
用户名
域名
控制器:

<?php
    session_start();
    $data = $_POST;
    if (isset($data['submit'])) {
        $_SESSION['all_post'][] =  $data;
    }
    header('Location:screen3_2.php'); exit();
?>

如我所见, 在代码中,您将表单数据发布到控制器,而不是第二页。 虽然您将数据存储到控制器页面中的
$\u会话
,但这就是您从第二个页面访问数据的方式

解决方案
使用
$\u会话访问第二页上的数据
,或

将第一页直接发布到第二页,并使用
$\u POST

访问数据执行以下代码时,它不会发送POST变量。 他们在那一点上迷失了方向。但是,您已将数据存储在会话中

header('Location:screen3_2.php'); exit();
还请注意以下代码:

$str = $_POST['email_text'];
$hello = explode("@", $str);
$_SESSION ['emails'] = $hello;
将存储一封电子邮件的两个部分。您提到要存储多封电子邮件,但此代码无法实现这一点

在我看来,您想要做的是继续返回到同一页面,并在收集电子邮件地址时重复使用表单。请确认

试试这个:

不要使用单独的控制器文件。获取该代码并删除重定向。将该代码放在文件的顶部。这样你就可以收集 来自$\u POST的所有电子邮件地址

<?php
    // Taken from 'controller'
    session_start();
    // Only process post if it exists
    if ( ! empty($_POST) ) {
        $data = $_POST;
        if ( isset($data['submit']) ) {
            $_SESSION['all_post'][] =  $data;
        }
    }
    // No redirect
 ?>
<?php // put the form here ?>
<form class="form-horizontal" method="post" >
<input type="email" class="form-control"  name="email_text" id="email_text">
<input type="submit" name="submit" id="submit_button" class="btn btn-default" value="Submit">
</form>

<?php
    // output all the email addresses collected
    if(isset($_SESSION['all_post']) && !empty($_SESSION['all_post'])) {
        foreach($_SESSION['all_post'] as $key=>$value) {
            $parts = explode('@', $value['email_text']);
                    ?>
        <tr>
            <td><?= $parts[0] ?></td> <?php // before @ ?>
            <td><?= $parts[1] ?></td> <?php // after @ ?>
        </tr>
<?php
        }
    }
?>
</form>


我的控制器在第二页。请添加第二页的完整代码,以便更好地理解您的问题。这就是我(控制器)在第二页的全部内容。您已经在访问控制器代码第二行中的
$\u POST
数据,并在第四行中设置为会话变量,请澄清您的问题。是的,那么我需要改变什么呢?是的,我需要使用相同的表单,在提交时保留以前的值。正如你所说,你需要更多的电子邮件地址,那么我建议使用AJAX。它可以在没有AJAX的情况下实现,每次循环通过相同的页面/代码,并在运行时存储输入的值。这样的解决方案必须将值存储在某个地方,因为每次迭代只能收集一个电子邮件地址。如果这只是一些需要学习的代码,那么会话就可以了。一个真正的应用程序需要更好的东西,比如Redis或数据库。我只能使用PHPP。请使用我的代码作为参考。我不知道替换某些部件的内容和位置