2011-05-16 52 views
0
$i=0; 
while (db_data) { 
$i++; 
echo '<input type="checkbox" name="v['.$i.']" value="'.$url.'"'; 
if ($v[$i]) { 
    echo ' checked'; 
    $s .= $url; 
} 
echo '/>'; 

} 

我有上面的复选框数组。它在我的电脑上工作,但不在服务器上;它似乎是令人困惑的部分在$v[$i]php复选框数组访问

$ v没有定义,但确定没有在其他地方使用。问题是我的复选框选择从未恢复,并且代码永远不会进入if语句。

但是,如果我添加以下内容,我可以看到值。只是复选框在处理后丢失 $ v = $ _ POST ['v']; (list($ key,$ val)= @each($ v)){ $ x。='11 *'。$ key。 - '。$ val。'* 22'; }

我的目标是保留在窗体上选中的复选框,我需要在其他地方的$ s。任何解决方案来取代$ v [$ i]?

任何人都可以帮我解决这个问题吗?谢谢。

+0

你复制/粘贴不正确的? – 2011-05-16 18:48:51

+0

呵呵?抱歉,但没有足够的可以继续下去,请你详细说明一下? – mcgrailm 2011-05-16 18:49:06

+4

定义了“$ v”和“$ i”在哪里?你的代码示例显然是不完整的。 – 2011-05-16 18:49:41

回答

0

这个问题似乎是$ v = $ _POST。如果你只是这样做,那么你的条件语句将需要

if ($v['v'][$i]) { 
    ///Checkbox 
} 

或只是做$ V = $ _ POST [“V”。

对不起,以上忽略,因为你提到你做了那部分。见下文。

这是工作代码。

<form action="" method="post"> 
<?php 
$v = $_POST['v']; 
$i=0; 
while ($i < 4) { 
    $i++; 
    $url = "test.com/".$i; 
    echo '<input type="checkbox" name="v['.$i.']" value="'.$url.'"'; 
    if ($v[$i]) { 
     echo ' checked="checked"'; 
     $s .= $url; 
    } 
    echo '/> '.$url.'<br />'; 
} 
?> 
<input type="submit" name="submit" value="submit" /> 
</form> 

我离开的代码非常给你看,你出了问题相同,但你使用前应检查战功$ _ POST变量。如果我也这样做了,我会使用for count,但它被设置为数据库代码的占位符。确保$ url也被填充。

你也可以做废除了$我喜欢变量:

<?php 
$v = $_POST['v']; 
while (db_data) { 
    echo '<input type="checkbox" name="v[]" value="'.$url.'"'; 
    if (is_array($v)) { 
     if (in_array($url,$v)) { 
       echo ' checked="checked"'; 
       $s .= $url; 
     } 
    } 
    echo '/> '.$url.'<br />'; 
} 
?> 
+0

它石头!我得到的最好的帮助!你们真棒! – jon 2011-05-18 17:31:45

0

尝试print_r($ _ POST),然后print_r($ v)并查看是否有任何东西出现。如果$ _POST有效,那么您知道它正确地被发回到页面。然后如果$ v正在工作,那么你知道你正确设置了$ v = $ _POST。由于事实上你并没有给我们任何关于db_data的信息,所以我认为这是正常工作的,并且在第一次加载时显示所有的复选框,所以只要它被发布并且你正在设置$ v变量,它应该工作。

一个方面是,你应该在使用前验证$ _POST变量,但是在你做事情之后再做。

+0

如果你做了上面说的FatherStorm(我不能评论它,因为我是一个新用户),那么你需要使用is_array和in_array,这可能会变得更好。 – fanfavorite 2011-05-16 20:58:21

+0

我知道_POST工作,因为while循环工作。问题是检查框立即丢失 – jon 2011-05-16 21:33:37

0

变化

name="v['.$i.']" 

name="v[]" 

在PHP拾取,最多为阵列是未故意设计PHP的意想不到的特征这一事实。你不需要设置索引,只需将其定义为一个数组即可。

+0

不,我必须设置索引,否则,它将存储为v0,v1,v2 ...依次,无论我选择什么东西。 – jon 2011-05-16 20:57:05