【问题标题】:Storing $_SESSION variable after multiple submits多次提交后存储 $_SESSION 变量
【发布时间】:2014-07-07 14:17:51
【问题描述】:

我有一个包含多个提交的表单。首先有一个带有几个选项的下拉菜单。基于该选择,当从菜单中选择一个值时,在页面上的某些语言更改(Buck而不是Bull ...等)。显示更多表单输入。在用户填写其余部分并提交该数据后,将其写入数据库。我遇到的问题是我试图使用 $_SESSION 来存储第一个 $_POST 值。

它会在第一个帖子之后存储它,但在第二个帖子之后它会被清除。非常沮丧。

<?
include_once('global_inc.php');//required for debugging
include_once('MySQL.php');//connects this form to the database
session_start();
?>
<html>
<body>
<form action="<?php print $_SERVER['PHP_SELF']?>" method="post" id="cervidSolutions">
<?
if (empty($_POST)) {
  echo "<h3>Please select the species of your farm.</h3>";
  echo "<select name='cervid'>";

  $list = array("WHITETAIL"=>"Whitetail", "RED_DEER"=>"Red Deer", "ELK"=>"Elk", "FALLOW_DEER"=>"Fallow Deer", "MULE_DEER"=>"Mule Deer");

  foreach ($list as $key=>$value) { //Creates a drop down from the above array
    echo "<option value='{$key}'";

    if ($_POST['cervid'] == $key) 
      echo " selected";

    echo ">{$value}</option>";
  }
  echo "</select>";
  echo "<input type='submit' name='speciesSelected' value='Select Species' />";
}

$_SESSION['cervid'] = $_POST['cervid'];

//Statements to assign noun values
if ($_POST['cervid'] == "WHITETAIL" || $_POST['cervid'] == "MULE_DEER" || $_POST['cervid'] == "FALLOW_DEER") {
  $maleNames = "Buck";
  $femaleNames = "Doe";
  $babyNames = "Fawn";
} else {
  $maleNames = "Bull";
  $femaleNames = "Hind";
  $babyNames = "Calf";
}

 /* Main form information including name, email, phone number and head count. */
if (!empty($_POST['cervid'])) { //These elements will only appear if $_POST['cervid'] has a value

echo "<p>Please type your name, email, and phone number. This information will help us provide you with any assistence you may need.</p>
<fieldset class='mainFormNamesFieldset'>
    <label for='firstName'>First Name</label>
    <input type='text' value='' name='firstName' class='mainFormNames' required />
</fieldset>
<fieldset class='mainFormNamesFieldset'>
    <label for='lastName'>Last Name</label>
    <input type='text' value='' name='lastName' class='mainFormNames' required />
</fieldset>
<fieldset class='mainFormEmailFieldset'>
    <label for='emailAddress'>Email Address</label>
    <input type='email' value='' name='emailAddress' class='mainFormEmail' required />
</fieldset>
<fieldset class='mainFormPhoneFieldset'>
    <label for='phoneNumber'>Phone Number</label>
    <div class='phoneWrap'>
    <input type='text' value='' maxlength='3' name='phoneNumber1' id='mainFormPhoneFirst' required /><span class='dash'>-</span>
    <input type='text' value='' maxlength='3' name='phoneNumber2' id='mainFormPhoneMiddle' required /><span class='dash'>-</span>
    <input type='text' value='' maxlength='4' name='phoneNumber3' id='mainFormPhoneLast' required />        
    </div>
    <div class='phoneWrap'>
    <span id='hashLeft'>###</span>
    <span id='hashMiddle'>###</span>
    <span id='hashRight'>####</span>
    </div>
</fieldset>
<fieldset class='mainFormHerdFieldset'>
    <label for='maleHeadCount'>Number of ". $maleNames ."</label>
    <input type='text' value='' maxlength='3' size='3' name='maleHeadCount' class='mainFormMale' />
</fieldset>
<fieldset class='mainFormHerdFieldset'>
    <label for='femaleHeadCount'>Number of ". $femaleNames ."</label>
    <input type='text' value='' maxlength='3' size='3' name='femaleHeadCount' class='mainFormFemale' />
</fieldset>
<fieldset class='mainFormHerdFieldset'>
    <label for='femaleHeadCount'>Number of ". $babyNames ."</label>
    <input type='text' value='' maxlength='3' size='3' name='babyHeadCount' class='mainFormBaby' />
</fieldset>
<input type='submit' name='custInfo' value='Submit Data' id='submitCustInfo' /><input type='reset' name='reset' value='Reset Form' id='resetForm' />";
}

这就是所有相关的代码。剩下的只是一些变量计算和一个插入语句。我知道插入语句是正确的,因为如果我硬编码一个值,它将写入它。做一个 print_r($_SESSION['cervid']);在第一个帖子后显示变量,但在第二个帖子后清除。

【问题讨论】:

    标签: php forms session


    【解决方案1】:

    虽然您的方法不太理想,但我相信您可以通过更改此行来“解决”您当前的问题:

    $_SESSION['cervid'] = $_POST['cervid'];
    

    到这里:

    if(isset($_POST['cervid']))
      $_SESSION['cervid'] = $_POST['cervid'];
    

    【讨论】:

    • 我之前尝试过,但它仍然不会在提交之间保留 $_SESSION。
    • 我的版本和你的版本之间的区别在于会话变量只有在发布的数据数组中存在该值时才会设置。根据您发布的代码,只有在没有发布数据的情况下才会打印“cervid 选择下拉菜单”。在初始页面加载时,选择下拉菜单位于页面上。在第一次提交表单时,会话变量被设置并且输出的页面不再包含选择下拉菜单,因此只要它们是由发布的表单提交触发的,就不会在后续页面加载时设置它。我们在这里缺少什么?
    猜你喜欢
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 2014-08-12
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多