【问题标题】:<Select multiple> not working on html form with php [duplicate]<选择多个> 无法使用 php 处理 html 表单 [重复]
【发布时间】:2015-09-03 10:31:12
【问题描述】:

好的,所以我有一个 html 表单,以及一个使用 php 进行服务器端验证的服务器端验证,以将表单中的信息作为电子邮件发送。在我的一生中,我无法获得将项目作为数组发送的表单。

这是我的html:

   <select multiple name="symptoms[]">
   <option value="ADHD">ADHD</option>
   <option value="Insomnia">Insomnia</option>
   <option value="Depression">Depression</option>
   <option value="PTSD">PTSD</option>
   <option value="Autism">Autism</option>
   <option value="Stress">Stress</option>
   <option value="Addiction">Addiction</option>
   <option value="Pain">Pain/Headaches</option>

这是我认为问题所在的 php:

// validation expected data exists

if(!isset($_POST['first_name']) ||

    !isset($_POST['last_name']) ||

    !isset($_POST['email']) ||

    !isset($_POST['telephone']) ||

    !isset($_POST['symptoms']) ||

    !isset($_POST['location']) ||

    !isset($_POST['comment'])) {

    died('We are sorry, but there appears to be a problem with the form you submitted.');       

}

$first_name = $_POST['first_name']; // required

$last_name = $_POST['last_name']; // required

$email_from = $_POST['email']; // required

$telephone = $_POST['telephone']; // not required

$symptoms = $_POST['symptoms']; // not required

$location = $_POST['location']; // not required

$comments = $_POST['comment']; // required

php也有这一段,不过我觉得这里的‘症状’区不是问题……

function clean_string($string) {

  $bad = array("content-type","bcc:","to:","cc:","href");

  return str_replace($bad,"",$string);

}

$email_message .= "First Name: ".clean_string($first_name)."\n";

$email_message .= "Last Name: ".clean_string($last_name)."\n";

$email_message .= "Email: ".clean_string($email_from)."\n";

$email_message .= "Telephone: ".clean_string($telephone)."\n";

$email_message .= "Symptoms: ".clean_string($symptoms)."\n";

$email_message .= "Location: ".clean_string($location)."\n";

$email_message .= "Comment: ".clean_string($location)."\n";

我整天都在尝试更改 !isset 和 $symptoms 行,以使“症状”选择多个以数组形式显示在我的电子邮件中。现在它只是在电子邮件中说“数组”。我在想也许 .clean-string 应该与数组而不是字符串有关?我完全被卡住了,我已经尝试了我能找到的所有东西,复制、粘贴、修改和更改了我在 stackoverflow 上找到的大约 5 组不同的代码......

【问题讨论】:

  • died() 不存在。我假设你的意思是die();
  • 这也是一个有趣的clean_string() 函数。你想阻止什么?
  • 是的,迈克,我搞砸了,谢谢。老实说,我在字符串方面遇到了一些问题(可能与我在工作时错过的东西有关,php 不是我的强项,我通常只做前端)并找到了该代码。当我完成时,除了数组之外的所有东西都可以工作,所以我只是认为它有帮助。谢谢!
  • 当您复制和粘贴代码时,您至少应该了解它的作用。如果您复制一个函数,然后将其应用于变量列表,那么至少了解它的作用会很好。如果它应该“清理”变量,请弄清楚它究竟试图从变量中清理的什么以及为什么。在我看来,您正在发送纯文本电子邮件,所以我真的不知道有人可以将恶意内容注入纯文本电子邮件中。 HTML 将是一个不同的故事,但有 PHP 函数可以做到这一点。你很有可能摆脱clean_string

标签: php html arrays forms post


【解决方案1】:

如果你echo(或连接,或其他将转换为字符串的方法)一个数组,它只会说“数组”,所以你必须以某种方式将它转换为字符串。一种方法是使用implode,这样就可以将数组显示为逗号分隔的列表:

$email_message .= "Symptoms: ".clean_string(implode(", ",$symptoms))."\n";

http://php.net/implode

如果你想花哨并确保最后一项之前有一个“和”,你可以这样做

$symptomString = implode(", ", $symptoms); 
$lastComma = strrpos($symptomString, ", ");
$symptomString = substr_replace($symptomString, "and", $lastComma, 2);

【讨论】:

  • ChiliNUT 神圣的废话,那是我认为正确的代码,正在寻找其他地方。我试图改变!isset。就像我在对 Mike 的评论中所说的那样,php(老实说,大多数后端)根本不是我的强项。非常感谢您的帮助,现在一切似乎都正常了。
  • @Phil 是的,当我第一次开始使用 php 时,这让我感到震惊,如果您打印一个数组,javascript 会很乐意为您将数组转换为逗号分隔的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2015-01-24
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2018-07-15
相关资源
最近更新 更多