【问题标题】:Form selectbox post multiple variables from selection表单选择框从选择中发布多个变量
【发布时间】:2013-12-05 21:13:46
【问题描述】:

好的,所以我有一个带有选择框的表单来选择美国的每个州,以下只是州的一部分。每个州都有一个不同的电子邮件地址,表格需要发送到。在通过电子邮件发送的表单结果中,我需要传递州名和电子邮件地址。

它现在是如何设置的,表单可以工作并提交到正确的州电子邮件地址,但它也说用户在州:email1@test.com 而不是阿拉巴马州。

form.php 中选择框的 HTML:

<select name="state222"> 
    <option value="email1@test.com" id="Alabama">Alabama</option> 
    <option value="email2@test.com" id="Alaska">Alaska</option> 
    <option value="email3@test.com" id="Arizona">Arizona</option>
</select>

form-submit.php 的部分 PHP 代码(表单提交的地方)

这会将所选选项的值设置为 $state

$state = $_REQUEST['state222'] ;

这使得 phpmailer 发送到所选状态的电子邮件:

$mail->AddAddress($state);

示例:如果选择 Alaska,$state 将变为 email2@test.com - 我怎样才能将不同的变量发布到 Alaska,以便我也可以发送电子邮件中选择的状态?

【问题讨论】:

    标签: php html forms


    【解决方案1】:

    您不能只使用select。 You could get fancy with Javascript and when the select changes update a hidden field with the state name ... but I wouldn't do that.为什么不将值设为州名或首字母缩写,然后在后端查找电子邮件地址?您可以将电子邮件地址存储在数据库中并查询它们 (SELECT email FROM state_emails WHERE state='$state')。或者(不太好,不是很推荐)在脚本中只包含一个静态数组:

    $emails = array('AL'=>'email1@test.com', 'AK'=>'email2@test.com' ...);
    $email = $emails[$state];
    

    【讨论】:

      【解决方案2】:

      我不会以这种方式公开电子邮件地址,因为某些人很容易编辑 DOM 并插入他们选择的电子邮件。您应该创建一个数组,用于填充您的选择字段,并稍后参考在后端选择的选择。

      $states = array(array('email' => 'email1@test.com', 'state' => 'Alabama'), array('email' => 'email2@test.com', 'state' => 'Alaska') ...);
      

      在您的表单中,您现在可以循环该数组

      <select name="state222">
      <?php foreach($states as $key => $value){ ?>
      <option value="<?=$key; ?>"><?=$value['state']; ?></option>
      <?php } ?>
      </select>
      

      然后您将在后端使用相同的数组来提取所需的值

      $state = $states[$_REQUEST['state222']];
      

      您现在有一个名称为$state['state'] 和电子邮件$state['email'] 的州的数组

      【讨论】:

      • 我试过这个方法,我设置了 3 个状态的数组,选择框显示 3 个结果,但它们是空白的。您可以在以下位置查看此表格:uslegalsupport.com/record-retrieval/…
      【解决方案3】:

      这是最终的工作,我将使用,因为电子邮件地址已经是公共信息。

      后端代码:感谢@NeilGiradi - 您的代码中唯一缺少的是第二个 $_POST 前面的 $

      $state222 = (isset($_POST['state222'])) ? explode('|', $_POST['state222']) : null;
      if ($state222) {
          $email = $state222[0];
          $state = $state222[1];
      }
      

      前端:

      <option value="email1@test.com|Alabama" id="Alabama">Alabama</option> 
      

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 2017-01-30
        • 1970-01-01
        • 1970-01-01
        • 2010-10-06
        • 1970-01-01
        • 2013-07-26
        • 2018-04-16
        • 1970-01-01
        相关资源
        最近更新 更多