我需要你们所有人的帮助。
我用PHP创建了一个表单。这是一个学校申请登记表。它只有一页。
我需要为打开表单的每个人生成注册号(此处用作注册号的会话ID)。
我没有为所有人创建会话,而是使用了 ID。 也就是说,当有人提交表单时,它会检查数据库,如果注册号在那里,它将递增一个值并将当前表单添加到数据库。
我的代码在这里
<td>Application No : <input type="hidden" name="disablusr_dummyid" autocomplete="off" style="background:#f0efed;" value="00<?php
include('config.php');
$q="select MAX(auto_gen_id) from application_form";
$result=mysql_query($q);
$data=mysql_fetch_array($result);
$max_val=$data[0];
echo $max_val+1;
?>"/>
<input type="hidden" name="applicant_id" autocomplete="off" value="00<?php
include('config.php');
$wer = "select MAX(auto_gen_id) from application_form";
$resultgh = mysql_query($wer);
$dates = mysql_fetch_array($resultgh);
$erfdqwe = $dates[0];
echo $erfdqwe+1;
?>" />
<input type="hidden" name="txt_applicant_id" style="display:none;" autocomplete="off" value="<?php
include('config.php');
$werqw = "select MAX(auto_gen_id) from application_form";
$resultghasw = mysql_query($werqw);
$dataqsax = mysql_fetch_array($resultghasw);
$erfdqweqti = $dataqsax[0];
echo $erfdqweqti+1;
?>" /></td>
但是正在发生的事情是,当多个用户使用表单时,会生成相同的会话ID,并且只有一个用户能够保存表单并反映在数据库中。 其他表单未提交且未添加到DB。
帮助我解决此错误。 提前谢谢。
这里的解决方案不是使用 ID 的隐藏字段:此时你有这样的东西:
"INSERT INTO (id, ..., ...) VALUES('".addslashes($_POST['applicant_id']."', ...)
您应该重构逻辑以在之后计算id,这意味着您删除隐藏字段并执行以下操作:
<?php
if (!empty($_POST)) {
$wer = "select MAX(auto_gen_id) from application_form";
$resultgh = mysql_query($wer);
$dates = mysql_fetch_array($resultgh);
$erfdqwe = $dates[0];
$new_applicant_id = $erfdqwe+1;
}
然后将$new_applicant_id
使用到插入 sql 中。在旁注中,您的代码容易受到 SQL 注入的攻击,并且正在使用过时的函数。您应该尝试移动到mysqli
或PDO
并且更可取的使用prepared statements