我有这个表单,其中只有一个字段,即"电子邮件ID",所以我要做的是当我输入电子邮件ID时,电子邮件ID必须分成两部分,如{ {1}}和user name
并且必须以下一种形式显示
所以我的问题是我的第二个表单没有显示结果,但是当我使用domain name
方法代替$_SESSION
(获取电子邮件字段的值)时,它会获取值并且还会分割它只需要一个值,因为我想要多个电子邮件ID
为了更好地理解,请检查我的代码。
$_POST
控制器:
<?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>
答案 0 :(得分:1)
我可以看到,
在您的代码中,您将表单数据发布到控制器,而不是第二页。
虽然您要将数据存储到控制器页面中的$_SESSION
,但这样才能让您从第二页访问数据。
解决方案:
使用$_SESSION
或第二页访问第二页上的数据
将您的第一页张贴到第二页,然后使用$_POST
访问数据。
答案 1 :(得分:0)
执行以下代码时, NOT 会发送POST变量。 他们在那时迷路了。但是,您已将数据存储在会话中。
header('Location:screen3_2.php'); exit();
另请注意以下代码:
$str = $_POST['email_text'];
$hello = explode("@", $str);
$_SESSION ['emails'] = $hello;
将存储一封电子邮件的两部分。您提到要存储多封电子邮件,但此代码无法实现此目的。
在我看来,您想要做的是继续回到同一页面并在收集电子邮件地址时重复使用表单。请确认。
试试这个:
请勿使用单独的控制器文件。获取该代码并删除重定向。将该代码放在文件的顶部。这样你收集 来自$ _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>