2013-03-20 34 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