PHP复杂语法 - 在表单中生成适当的值

时间:2016-07-14 13:40:27

标签: php forms

我有一个提示用户填写表单的应用程序。当他们点击提交时,他们会被重定向到另一个页面以验证他们的信息。如果他们选择编辑(而不是确认其准确性),则会将其重定向到原始表单。

为了维护页面中的值,我将初始表单输入存储在$ _SESSION中。

第二个"验证"页:

$_SESSION['formInput'] = $_POST;

如果用户返回原始表单,我将循环回读这些数据并将用户的输入放在适当的字段中。

if($_SESSION['formInput']) {
foreach($_SESSION['formInput'] as $key => $value) {

${$key} = $value;

总的来说,这似乎可以使用如下内容:

<label>First Name: </label><input type='text' data-validation='[NAME]' id='primaryOneFirst' value='{$primaryOneFirst}' name='primaryOneFirst' data-validation-label='Field' /></div><div class='formGroup colHalf'>

但是,根据访问者拥有的子女数量(在另一页上显示),动态生成表单的一部分。总的来说,我的方法就是访问数据并通过电子邮件发送;但是,我在保留这些值方面遇到了很多麻烦。

例如,知道我有以下内容:

          $counter = 1;
          while($counter <= $numberOf) {

          $html .= "<div class='childField' id='child{$counter}'>

    <h3>Child Data {$counter}</h3>

    <div class='row'><div  class='formGroup colHalf'><label>Child Name: </label><input type='text' data-validation

='[OPTIONAL, NAME]' data-validation-label='Field' name='childName{$counter}'  value='{$childName}$counter' /></div>

<div class='formGroup colHalf'><label>Date of Birth:<select name='childBirthmonth{$counter}'>
                      <option value=''> </option>
                         <option value='01'>January
                         </option>
                         <option value='02'>February
                         </option>
                         <option value='03'>March
                         </option>
                         <option value='04'>April
                         </option>
                         <option value='05'>May
                         </option>
                         <option value='06'>June
                         </option>
                         <option value='07'>July
                         </option>
                         <option value='08'>August
                         </option>
                         <option value='09'>September
                         </option>
                         <option value='10'>October
                         </option>
                         <option value='11'>November
                         </option>
                         <option value='12'>December
                         </option>
                         </select>


                 <select name='childBirthday{$counter}'>"; for($i = 1; $i <= 31; $i++) {
                         if($i < 10) {
                         $i = "0" . $i;
                         }   $html .=  "<option value='$i'>$i</option>";
                         }   $html .=  "</select>
                         <select name='childBirthyear{$counter}'>";

                         for($i = 1900; $i <= date("Y"); $i++) {
                          $html .=  "<option value='$i'>$i</option>";
                         }   $html .=  "</select></div>

                      </div>

                      <div class='row'><div class='formGroup colHalf'><label> SSN: </label><input type='text' placeholder='xxxxxxxxx' data-validation-message='Please enter a 9 digit SSN without dashes.' data-validation='[L==9, INTEGER, OPTIONAL]' value='$childSSN{$counter}' name='childSSN{$counter}' id='childSSN{$counter}' /></div><div class='formGroup colHalf'><label>Gender: </label><select value='childGender{$counter}' name='childGender{$counter}'><option value='male'>Male</option><option value='female'>Female</option></select></div></div>

                      <div class='row'><label>Please Check All That Apply:</label></div><ul class='checkBoxGroup' /><li>Handicapped: <input type='checkbox' name='handicap{$counter}' value='handicap' /></li><li>Full-Time Student: <input type='checkbox' name='student{$counter}' value='student' /></li><li>Step Child: <input type='checkbox' name='step{$counter}' value='stepChild' /></li><li>Foster Child: <input type='checkbox' name='foster{$counter}' value='foster' /></li><li>Different Address (than yours): <input type='checkbox' name='diff{$counter}' value='differentAddress' /></li></ul>

                      <div class='childAddressBox'><div class='row'><div  id='childAddress{$counter}'><div class='formGroup colHalf'><label>Address: </label><input type='text'  value='$childAddress{$counter}' name='childAddress{$counter}' /></div><div class='formGroup colHalf'><label>City: </label><input type='text' size=20  value='$childCity{$counter}' name='childCity{$counter}' /></div></div>

                       <div class='row'><div  class='formGroup colHalf'><label>State: </label><input type='text' size=2 value='$childState{$counter}' name='childState{$counter}'/></div><div class='formGroup colHalf'><label>Zip</label><input type='text' size=5 value='$childZip{$counter}' name='childZip{$counter}' /></div></div>
                       </div>
                       </div></div>";
                      $counter++;
      }
      echo $html;      
}

我尝试了多种方法,但我没有获得所需的输出(孩子的名字,SSN或地址),而是获得了$ counter(1)的值。而不是像value='{$childName}$counter'value='$childSSN{$counter}&#39;我需要它直接转换为诸如value='{$childName1}'value='{$childSSN1}之类的某些内容,就像表单的其他部分一样。我怎么能做到这一点?

非常感谢!

1 个答案:

答案 0 :(得分:1)

对于像您的问题中的动态字段,使用数组管理数据更合适。为此,您必须使用索引语法命名字段。例如,而不是:

<input name='childName{$counter}'  />

你可以写:

<input name='childName[$counter]'  />

因此,当数据发送到PHP时,数据将被解析为数组。

然后,您可能可以使用此类代码输出所需的值:

<input name='childName[$counter]' value='{$childName[$counter]}'/>