2013-03-20 127 views
0

我有一个错误,我不知道...

我的网页有一种形式,用户有能力添加一些新的输入字段。如果用户提交表单,那么在php文件交付时可选字段为空,为什么?

HTML:

 <form method="post" action="newRequest.php"> 
      <input type="text" name="title" /> 
      <input type="hidden" name="fname" value="0" /> 
      <input type="checkbox" name="fname" value="1"/> 
      <input type="hidden" name="ename" value="0" /> 
      <input type="checkbox" name="ename" value="1" /> 
      <input type="hidden" name="seat" value="0" /> 
      <input type="checkbox" name="seat" value="1" /> 
      <input type="hidden" name="fields" value="0" /> 
      <input type="text" id="fields" name="fields" /> 
      <input type="submit" /> 
     </form> 

PHP:

if (strlen($_POST[title]) > 2) { 
    $toDb[title] = $_POST[title]; 
} else { 
    error('title'); 
} 

$toDb[fname] = $_POST[fname]; 
$toDb[ename] = $_POST[ename]; 
$toDb[seat] = $_POST[seat]; 

if ($_POST[fields] > 0) { 
    $i = 0; 
    while ($i < $_POST[fields]) { 
     $toDb[optional][$i] = $_POST[optional-$i]; 
     $i++; 
    } 
    $toDb[optional] = serialize($toDb[optional]); 
} else { 
    $toDb[optional] = 0; 
} 
newEvent($toDb,$dbh); 

JQuery的,它是将动力场:

$(document).ready(function() { 
    $('#fields').focusout(function(){ 

     var fields = $('#fields').val(); 
     var i = 0; 

     while(i < fields) { 
      $('#fields').after("Valfritt fält "+(i+1)+":<input type='text' name='optional"+i+"' />"); 
      i++; 
     } 

    }) 
}) 
+0

这是你如何使用散列数组:'$ foo [“bar”] = $ _POST [“bar”];',应该引用字符串索引。 – HamZa 2013-03-20 13:33:19

+0

所有的字段名称都有重复;当第一个被PHP解析时,第一个被第二个覆盖。 – 2013-03-20 13:34:56

+0

重复是因为第一个是设置一个默认值发送到PHP,如果用户离开字段为空。 – theva 2013-03-20 13:37:33

回答

1

你应该引用数组索引。它应该是

$toDb['optional'][$i] = $_POST['optional'.$i]; 
1

你缺少逗号$ _ POST

$toDb['fname'] = $_POST['fname']; 
$toDb['ename'] = $_POST['ename']; 
$toDb['seat'] = $_POST['seat']; 

下面是修改后的代码

if (strlen($_POST['title']) > 2) { 
    $toDb['title'] = $_POST['title']; 
} else { 
    error('title'); 
} 

$toDb['fname'] = $_POST['fname']; 
$toDb['ename'] = $_POST['ename']; 
$toDb['seat'] = $_POST['seat']; 

if (count($_POST) > 0) { 
    $i = 0; 
    while ($i < count($_POST)) { 
     $toDb['optional'][$i] = $_POST['optional-'.$i]; 
     $i++; 
    } 
    $toDb['optional'] = serialize($toDb['optional']); 
} else { 
    $toDb['optional'] = 0; 
} 
newEvent($toDb,$dbh); 

而且使用count(),以检查是否$ _POST具有值> 0