2014-07-07 68 views
-1

我有一个包含多个提交的表单。首先有一个有几个选择的下拉菜单。基于该选择,页面上的某些语言更改(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']);在第一篇文章后显示变量,但在第二篇文章后清除。

回答

0

虽然你的做法是不太理想,我相信你可以通过改变这一行“修复”当前的问题:

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

这样:

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

我已经试过以前,它提交之间仍然不会保留$ _SESSION。 – Shaazaam

+0

我的版本和你的版本之间的区别在于,只有在发布的数据数组中存在该值时才设置会话变量。根据您发布的代码,'cervid select dropdown'只会在没有发布数据的情况下打印。在初始页面加载时,选择下拉列表位于页面上。在第一次表单提交时,会话变量被设置,并且输出的页面不再包含选择下拉菜单,因此只要它们是通过发布表单提交触发的,它就不会在后续页面加载中设置。我们在这里错过了什么? – oliakaoil