2014-02-12 77 views
0

我正在建立一個成就係統,在複選框的基礎上工作(因爲它沒有發佈相關)然而,我碰到一個問題,我似乎不能包住我的頭在它周圍,因爲我沒有那麼方便的循環和陣列。複選框在php中循環,同時發佈到數據庫

enter image description here

好了,所以我做了複選框,被張貼了這個網頁上,並充滿appropiately,照見下面的代碼,可以幫助我填補了網頁的那部分羣體。

function MakeProfessionlist(){ 
    $result = LoadListProffesion(); 
    $i = 0; 
    echo '<table class="Overview">'; 
    while($row = mysqli_fetch_array($result)){ 
     $i++; 
     if(($i % 2) == 0){ 
      echo "<td class='small'><td><input id='achievementHidden' type='hidden' value='0' name='IsChecked[]'>"; 
      echo "<input type='checkbox' id='achievement' name='IsChecked[]' value = '1'>"; 
      echo "<input name='AchievementId[]' type='hidden' value='".$row['AchievementId']."'></td>"; 
      echo "<td class='big'>".$row["AchievementName"]."</td></tr>"; 
     }else{ 
      echo "<tr><td class='small'><input id='achievementHidden' type='hidden' value='0' name='IsChecked[]'>"; 
      echo "<input type='checkbox'id='achievement' name='IsChecked[]' value = '1'>" ; 
      echo "<input name='AchievementId[]' type='hidden' value='".$row['AchievementId']."'></td>"; 
      echo "<td class='big'>".$row["AchievementName"]."</td>"; 
      } 
    } 
    echo '</table>'; 
} 

正如你看到的,我嘗試過2個變量,即AchievementId拍攝,和值器isChecked(可以是0或1),將出現問題的時候,我要保存這些信息。我在數據庫中設置了一個表格作爲中介(Achievement_User,只有3個條目,分別是UserId,AchievementId和IsChecked值)

我的開始是我拍攝了所有通過此處獲得的成就AchievementId通過下面的代碼與複選框一起發佈。

if(isset($_POST['AchievementSaveData'])) 
    { 
    // print_r($_POST); 
    $checkbox = isset($_POST['IsChecked']) ? $_POST['IsChecked'] : array(); 
    $Achievement = isset($_POST['AchievementId']) ? $_POST['AchievementId'] : array(); 
    foreach (array_combine($checkbox, $Achievement) as $IsChecked => $AchievementId){  
     $sql="SELECT * FROM Achievement_User WHERE UserId='".$UserId."' AND AchievementId ='".$AchievementId."'" ; 
     $result=mysqli_query($sql); 
     $count=mysqli_num_rows($result);  

     if ($count==1){ 
      echo 'Update datarow with UserID '.$UserId.', AchievementId '. $AchievementId.' and with a value of '.$IsChecked;' <br>'; 
      } 
     else{ 
      echo 'Create datarow with UserID '.$UserId.', AchievementId '. $AchievementId.' and with a value of '.$IsChecked.' <br>'; 
     } 
    } 
} 

現在的問題在於,當我檢查一個複選框,顯然數組增加。它取代了它創建的40個主題(這是多少AchievementId發佈,當檢查一切都是默認),它爲每個檢查值創建一個額外的數組空間,這使得我的比較無用,導致我得到一個錯誤,然後數組可以組合。

有沒有什麼辦法可以讓我的工作能讓我的AchievementId數組與我的IsChecked值匹配?

編輯:接下來,整個foreach循環似乎不再工作了,當我試圖合併數組(即使他們匹配的值)。所以我的想法可能是有一種方法,我可以從IsChecked中發佈數組,並且已經附加了AchievementId的值。如果是這樣,我怎麼能解決這個問題呢?

回答

1

你爲什麼不乾脆放棄複選框成果的價值,擺脫隱藏輸入的

<input type='checkbox' id='achievement' name='IsChecked[]' value = '<?php echo $row['AchievementId'];?>'> 

然後在PHP

foreach ($IsChecked as $AchievementId){  
+0

問題在於這種方法,我不能定義那些沒有被檢查的(稍後用於更新語句,例如當我有一些成就時)。因此,我將1和0發佈到數據庫。我想我通過更改IsChecked []並在成就中插入IsChecked [] ID來解決問題。至少,現在我需要知道我是否也可以使用數組中的Key來定義它中的變量,這很可能會。它已經有一段時間了,我現在對PHP很生疏。 – Dorvalla

+0

未檢查的將不會到達,因此如果沒有檢查到您,$ isChecked陣列將爲空,唯一區別是在檢查的地方獲得1的地方,您將獲得成就編號 – CodeBird

+0

嗯,你有一個好點,我會看看我能如何解決這個問題。我只需要用更多的if else語句來更新更新查詢,但是我可以幫你解決問題。 – Dorvalla