2011-11-03 42 views
0

我有一个职业日注册系统,允许学生选择3个独特的职业选择,并将结果提交给mysql数据库。不过,我想限制每个职业选择90人。如何基于数据库下拉列表的mysql计数限制或停止表单提交?

例生涯天的时间表:

会议1:护理(限90) 会议2:军事(限90) 会议3:药房(限90)

是否有可能做一个MySQL计数并将计数值传递给一个JavaScript变量?此外,如果计数> 90,则会发生JavaScript验证,并且不允许您保存到数据库。

<?php 
$sql = "SELECT * FROM mytable WHERE session1 = 'Nursing'; 
$query = mysql_query($sql); 
$num_rows = mysql_num_rows($query); 
?> 

<script> 
var count = <?php echo $num_rows; ?> 
function Form_Validator(editform) 
{ 
if((editform.value_session2.value == "Nursing" && count > 90)) { alert("Nursing is closed!"); return (false); } 

return (true); 
} 
</script> 

我试过几种不同的方法这个方法......但值不被传递。请帮忙!

+0

建议听起来像AJAX – Widor

回答

1

你不应该这样做的JavaScript,因为任何客户端脚本可以绕过。

您需要做的是在插入数据库之前,先计算在该课程中注册的学生人数。如果count >= 90,则返回一个错误,说明课程已满。如果count <= 90,则继续执行插入数据的语句,然后返回成功消息。

+0

没有人最初报名参加,所以我不能指望他们的工作,但是我想每个会话限制为90 .. 。?那可能吗? – avernon2

+0

是的,那是可能的。如果最初没有人注册,则计数应返回0,以便继续进行注册。如果计数返回超过90,那么您不注册它们并显示某种错误消息。 – F21

0

我会做一个简单的和结构化的算法来解决这一问题:

1)在页面加载,我只会显示avaliable选项。 做一个sql“group by”,拥有所有“计数”并限制表单出现。

2)在表格提交过程中再次检查新申请人的可能性。 再次进行简单计数,检查是否可以接收新的提交。而已。这将节省一些并发问题和其他绕过手段。

这听起来更安全和清晰。

当然,你可以编写一个REST服务脚本来在表单填充时刻让应用程序可用性更好,但是这更多的工作可能很简单。

0

我理解这篇文章已经过时了,但这里是我所做的。当用户点击护理会话时:

mysql_select_db($database_mySQLConnection, $mySQLConnection); 
$query_registrant_count = sprintf("SELECT user_id FROM user_signup WHERE class_id = %s", GetSQLValueString($colname_registrant_count, "int")); 
$registrant_count = mysql_query($query_registrant_count, $mySQLConnection) or die(mysql_error()); 
$row_registrant_count = mysql_fetch_assoc($registrant_count); 
$totalRows_registrant_count = mysql_num_rows($registrant_count); 

if ($totalRows_registrant_count > 19) { 
    $returnToCourseList = "../courseListFileName.php"; 
    header(sprintf("Location: %s", $returnToCourseList . "?alert=" . urlencode("We're sorry, but this class is full. Please select another class or contact us for assistance."))); 

exit; }

然后在courseListFileName.php,使用佩卡对Handling alerts in php