输入带数组的文本

时间:2014-01-23 13:02:08

标签: php jquery ajax

这是我到目前为止所做的事情。我正在使用AJAX打印一些复选框和一些文本输入。 每个plauer的1个复选框和1个输入文本(来自DB)。

问题是当我将数据提交到另一个php文件时,我只看到两种情况。 下面是我将解释的代码。

由AJAX调用的PHP

if($_GET['function']=="chkplayers")
{
     $sql=mysql_query("SELECT * FROM tbl_Player ORDER BY team_name")
     or die(mysql_error());
     $i = 1;
        echo'Players : ';
        echo '<br>';
     while ($row = mysql_fetch_array($sql)) {
        echo '<input type="checkbox" name="chk_player[]" value="'.$row['player_id'].'" /> '.$row['player_name'].' in team '.$row['team_name'];
        echo '<input type="text" name="chk_target[]" placeholder="Target Name"/><br/>';
    $i++;
  }

}

PHP呼吁提交

if (isset($_POST['chk_player']) && isset($_POST['chk_player'])) {
    $optionArray = $_POST['chk_player'];
    $optionArrayTarget = $_POST['chk_target'];
    for ($i=0; $i<count($optionArray); $i++) {
        echo "i :";
        echo $i;
        echo "Player : ";
        echo $optionArray[$i];
        echo "Target : ";
        echo $optionArrayTarget[$i];
        echo '<br>';

    }
}

如果我检查连续的每一个方框(不要在其间留下空的复选框),它显示正常。

示例:

i :0Player : 15Target : A1
i :1Player : 18Target : A2
i :2Player : 14Target : A3

如果我取消选中一个方框然后再检查一下,我会得到这个

i :0Player : 15Target : A2
i :1Player : 16Target : 

无论如何我可以解决这个问题吗?

如果我找到$ optionArrayTarget,我会得到

i :0Player : 15Target : A1
i :1Player : 14Target :
i :2Player : 12Target : A2
i :3Player : 13Target :
i :4Player : Target : A3
i :5Player : Target : A4
i :6Player : Target :
i :7Player : Target : 

3 个答案:

答案 0 :(得分:0)

而不是循环直到$optionArray循环直到optionArrayTarget

if (isset($_POST['chk_player']) && isset($_POST['chk_target'])) {
   $optionArray = $_POST['chk_player'];
   $optionArrayTarget = $_POST['chk_target'];
   for ($i=0; $i<count($optionArrayTarget); $i++) {
     if (isset($optionArrayTarget[$i]) || trim($optionArrayTarget[$i])!=''){
         echo "i :";
         echo $i;
         echo "Player : ";
         echo $optionArray[$i];
         echo "Target : ";
         echo $optionArrayTarget[$i];
         echo '<br>';
    }
  }
}

因此,根据检查的值,您可以打印播放器和目标,否则对于索引“X”中出现的每个Player,可能存在或不存在Target

已编辑:我观察到的另一件事,if (isset($_POST['chk_player']) && isset($_POST['chk_player'])) {第二个条件应该是chk_target而不是chk_player

快乐编码:)

答案 1 :(得分:0)

我设法搞清楚了。基本上我首先使用array_filter删除空值然后使用array_values重新排序它们和vuala。谢谢你的身份 -

if (isset($_POST['chk_player']) && isset($_POST['chk_target'])) {
 $optionArray = $_POST['chk_player'];
 $optionArrayTargetsB4 = array_filter($_POST['chk_target']);
 $optionArrayTargets = array_values($optionArrayTargetsB4);
 for ($i=0; $i<count($optionArray); $i++) {
   .....
  }
}

答案 2 :(得分:0)

我首先使用array_filter删除空值然后使用array_values重新排序它们和vuala。