【问题标题】:Struggling with PHP form processing挣扎于 PHP 表单处理
【发布时间】:2013-11-13 12:09:53
【问题描述】:

任何人都可以帮助解决我无法理解的表单问题吗?我有一组复选框,其值无法显示在生成的邮件中。

这是我用来设置变量的方法:

    $benefit01  = ($_POST['benefit_01']);
$benefit02  = ($_POST['benefit_02']);
$benefit03  = ($_POST['benefit_03']);
$benefit04  = ($_POST['benefit_04']);
$benefit05  = ($_POST['benefit_05']);
$benefit06  = ($_POST['benefit_06']);

$property   = addslashes($_POST['property']);
$owner      = addslashes($_POST['owner']);
$mainHeating    = addslashes($_POST['Heating_mainHeating_answer']);
$boiler_working = addslashes($_POST['boiler_working']);
$boiler_age = addslashes($_POST['boiler_age']);

$postcode   = addslashes($_POST['postcode']);
$address1   = addslashes($_POST['address1']);
$address2   = addslashes($_POST['address2']);
$address3   = addslashes($_POST['address3']);
$city       = addslashes($_POST['town']);
$county     = addslashes($_POST['county']);

$name       = addslashes($_POST['firstName']);
$surname    = addslashes($_POST['surname']);
$email      = addslashes($_POST['email']);
$phone      = addslashes($_POST['phonenum']);


$type   = addslashes($_POST['type']);
$time   =   $_POST['time'];
$src = $_POST['urlsrc'] ;

$benefits   = $benefit01." ".$benefit02." ".$benefit03." ".$benefit04." ".$benefit05." ".$benefit06;
$address = $address1." ".$address2;
$note = "Benefits: ".$benefits.". Property Type: ".$property.". Home Owner: ".$owner.". Type of Heating: ".$mainHeating.". Boiler Working: ".$boiler_working.". Boiler Age: ".$boiler_age.". Timescales: ".$time.". Address Line 3: ".$address3;

所以“好处”是复选框。我曾尝试将它们都命名为相同的名称以创建一个数组,然后将这些值内爆,但这也不起作用。最终这些数据被发送到一个数据库,这就是为什么大部分信息都被转储到一个 $note 变量中。

我对此知之甚少,并从一个工作(尽管是简化的)表单中获取了这个示例。任何帮助表示赞赏。

** 下面添加的表单小样本:

    <input name="ctl00_chkBenefit" type="checkbox" id="benefit_01" class="checkbox-benefit" value="Child Tax Credit" />

儿童税收抵免(相关收入为 15,860 英镑或以下)

     <input name="ctl01_chkBenefit" type="checkbox" id="benefit_02" class="checkbox-benefit" value="State Pension Credit" />

国家养老金信贷

【问题讨论】:

标签: php arrays forms checkbox


【解决方案1】:

你的复选框的 HTML 是这样的吗?

<input type="checkbox" name="benefit_01" value="Benefit 01" /> Benefit 01

如果该复选框将被用户选中,$_POST['benefit_01'] 将是该复选框的值 - Benefit 01

如果不勾选,$_POST['benefit_01']将不会被设置。

编辑 1:

您应该在&lt;form&gt; 中拥有所有内容,并设置方法和操作:

<form action="index.php" method="post">
     <input name="ctl00_chkBenefit" type="checkbox" id="benefit_01" class="checkbox-benefit" value="Child Tax Credit" />
</form>

编辑 2:

对于这些复选框,您有不同的 name。你在你的$_POST他们的id中使用,而不是name

将您的代码更改为:

$benefit01  = ($_POST['ctl00_chkBenefit']);
$benefit02  = ($_POST['ctl01_chkBenefit']);
$benefit03  = ($_POST['ctl02_chkBenefit']);
$benefit04  = ($_POST['ctl03_chkBenefit']);
$benefit05  = ($_POST['ctl04_chkBenefit']);
$benefit06  = ($_POST['ctl05_chkBenefit']);

现在它将 100% 工作:)

【讨论】:

  • 感谢 Legionar,即使检查了这些字段,也没有任何结果。
  • 方法是 Post 并且都包裹在一个表单标签中。有一个包含许多其他字段的完整表格,并且所有其他值都可以通过。只是没有好处。这是网址:dvmac.co.uk/ths/index.php?action=ecoProcess&src=
  • 你有不同的名字 - 不是benefit_01,而是ctl00_chkBenefit。这就是原因。查看我的编辑...
  • 感谢 Legionar,我正想问这是否会有所作为。所以是 NAME 而不是 ID?
  • 不客气。是的,在$_POST 中使用了名称标签。 id 标签用于 f.e.供 jQuery 访问元素。
【解决方案2】:

首先,

<input type="checkbox" name="benefits[]" value="one">
<input type="checkbox" name="benefits[]" value="2">
<input type="checkbox" name="benefits[]" value="III">

将在 PHP 中创建一个数组 $_POST['benefits']。

其次,如果复选框被选中,变量将只包含值。

【讨论】:

  • 我尝试使用相同的名称来创建一个数组,但即使选中了这些框,也不会输出任何值。这就是我尝试显示它们的方式:'$benefit = implode(', ', $_POST['benefit']);'
  • 嗯,$_POST['benefit']$_POST['benefits'] 之间是有区别的——你能发现吗?
【解决方案3】:

如果用户未选中输入复选框,则不会在 $_POST 中设置。您可以使用empty() 确定它们是否已设置和/或为空,然后将值设置为您要插入数据库的值。

【讨论】:

  • 感谢 Mads,但即使选中的项目也没有出现。
【解决方案4】:
crate the input field name like this 

<input type="checkbox" name="c[]" value="1">
<input type="checkbox" name="c[]" value="2">
<input type="checkbox" name="c[]" value="3">
<input type="submit" >

而 PHP 你可以这样写-

<?php 
$_POST['benefits'] 
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2014-08-30
    • 1970-01-01
    相关资源
    最近更新 更多