2011-05-16 103 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