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