2013-02-07 46 views
0

我在寫一個表單,可以選擇多個複選框並將其保存到MySQL數據庫中。不過,我現在想限制用戶可以使用javascript選擇的複選框的數量,並且遇到了一些麻煩。使用Javascript驗證選擇多個複選框

似乎導入功能仍然有效,每個複選框需要具有相同的名稱,以便它們可以被識別和內爆,但是爲了使Javascript功能起作用,每個名稱都需要不同,以便他們可以有區別。

任何建議將受到感謝!

這是我一直在玩的代碼。

JavaScript函數:

<?php $calc = mysql_query($query) or die(mysql_error()); ?> 

<SCRIPT LANGUAGE="javascript"> 

function KeepCount() 
{ 
var NewCount = 0 

<?php while($count_row = mysql_fetch_array($calc)){ 
echo " 

if (document.import1.checkbox".$count_row['id'].".checked) 
{NewCount = NewCount + 1} 

"; 
} ?> 

if (NewCount == 6) 
{ 
alert('You can select up to 5 competitors. If you wish to import more you will need to add more judges.') 
document.import1; return false; 
} 
} 
</SCRIPT> 

形式:

<form action="import_process.php" method="post" name="import1" id="import1"> 
<input name="import" type="submit" id="import" value="Import"> 

<table> 
<tr> 
<td>&nbsp;</td> 
<td>Name</td> 
<td>Gender</td> 
</tr> 

<?php $counter = 1; 
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array($result)){ 
echo "<tr bgcolor=white>"; 
echo "<td align=\"center\"> 
<input name=\"checkbox".$row['id']."\" type=\"checkbox\" id=\"checkbox[]\" value=\"".$row['id']."\" onClick=\"return KeepCount()\"></td>"; 
} 
echo "<td>".$row['name']."</td>"; 
echo "<td>".$row['gender']."</td>"; 
echo "</tr>"; 
$counter++; 
} 
?> 
</table> 
</form> 

import_process.php:

if(isset($_POST['checkbox'])){ 
$checkbox = $_POST['checkbox']; 
$id = "('" . implode("','", $checkbox) . "');" ; 
$sql=" 
INSERT INTO..." 
+0

我不明白你到底在想什麼,import.php是做什麼的? –

+0

該表顯示了用戶體育俱樂部中人員的姓名和性別列表。他們選擇哪些人作爲競爭對手進入競爭對手。 import_process.php應該標識選定的競爭者ID,並將他們的詳細信息插入競爭表。至少它應該這樣做,在上面的例子中,JavaScript的工作原理並不是導入。 – adswayne

+0

您的意思是您無法將與選定競爭對手相關的信息發送到您的服務器,但是您能夠限制用戶檢查5個複選框嗎? –

回答

0

,很難一點點理解你的代碼,但我想你混淆由名字的差異一個id。 ID必須爲每一個複選框不同,名稱必須相同:

<input id=\"checkbox".$row['id']."\" type=\"checkbox\" name=\"checkbox[]\" value=\"".$row['id']."\" onClick=\"return KeepCount()\"></td>"; 

並且名稱屬性是一個,至極需要[],讓你的陣列$_POST['checkbox']中得到的結果。

第二個是,你的函數KeepCount似乎總是檢查相同的複選框(或者我真的不明白它是如何工作的),因爲無論$count_row['id']是什麼,它在頁面解析時設置一次,所以javascript函數不能真正數一數。

因此改變複選框創造這樣的:

<input id=\"checkbox".$row['id']."\" type=\"checkbox\" name=\"checkbox[]\" value=\"".$row['id']."\" onClick=\"return KeepCount(this)\"></td>"; 

像這樣

var count = 0;  

function KeepCount(it) { 
if (it.checked) { 
    count = count + 1; 
} else { 
    count = count - 1; 
} 
if (count == 6) { 
    alert('You can 
    etc. 

這應該工作的JavaScript。

順便說一下:value = row ['id']似乎也是無稽之談。

+0

謝謝你 - 警報出現,因爲他們應該和導入功能也起作用。唯一的問題是,在警報出現後,用戶仍然可以選擇多於所需數量的複選框。我認爲我在正確的路線上加入了這一點,但它又不能很好地工作: – adswayne

+0

var count = 0;功能CountUp(it){if(it。選中){count = count + 1; } else { count = count - 1; } if(count == <?php echo($ quota + 1);?>){ alert('您可以選擇最多<?php echo $ quota;?>競爭對手。將需要增加更多的法官。') document.import1;返回false; count = count - 1; } } – adswayne

+0

取而代之還是額外的返回false(我沒有具體的理由,我可以弄清楚)你把「it.checked = false」 - 這應該有所幫助。另外:警告的括號後缺少分號。 – Paflow