我正在建立一個成就係統,在複選框的基礎上工作(因爲它沒有發佈相關)然而,我碰到一個問題,我似乎不能包住我的頭在它周圍,因爲我沒有那麼方便的循環和陣列。複選框在php中循環,同時發佈到數據庫
好了,所以我做了複選框,被張貼了這個網頁上,並充滿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和0發佈到數據庫。我想我通過更改IsChecked []並在成就中插入IsChecked [] ID來解決問題。至少,現在我需要知道我是否也可以使用數組中的Key來定義它中的變量,這很可能會。它已經有一段時間了,我現在對PHP很生疏。 – Dorvalla
未檢查的將不會到達,因此如果沒有檢查到您,$ isChecked陣列將爲空,唯一區別是在檢查的地方獲得1的地方,您將獲得成就編號 – CodeBird
嗯,你有一個好點,我會看看我能如何解決這個問題。我只需要用更多的if else語句來更新更新查詢,但是我可以幫你解決問題。 – Dorvalla