我必须生成下一个可用的ID,该ID是表中的主键,但为此,我必须在输入标签的value属性内将html转换为PHP。
此操作无效,因为PHP文件介于两者之间,并且不允许加载整个页面。
我尝试了以下代码:
<input type="number" id="id" class="textbox" name="s_id" onkeyup="showAvailableId(this.value)" min="10000" max="999999"
value ="<?php $mysqli = new mysqli('localhost', 'root', '', 'project_db');
if($mysqli->connect_error) {
exit('Could not connect');
}
$sql = 'SELECT student_id from students WHERE student_id = 11120';
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($result);
$stmt->fetch();
$stmt->close();
if ($result != NULL){
echo ++$result;
}?>" required><label id="demo"></label>
答案 0 :(得分:2)
我不认为您想这样做,如果100个人同时运行此代码,他们都获得相同的下一个可用ID,但实际上只有1个人可以执行任何操作,因为这是一个主键,因此谁先提交表单,谁就得到了id,但其他所有人都返回false,他们陷入了一个循环,直到足够多的人放弃或等待足够长的时间来提交表单。
您应该重新考虑您要实现的目标
答案 1 :(得分:0)
我不太了解需求,我将使用mysql的自动增量功能,如果在此代码段之前有插入,则将使用“选择最后一个ID”。 但是您必须谨慎使用这种生成ID的方式。 您必须提交不带ID的表单,并在MySQL中生成ID
<?php
$nextID = array("student_id"=>0);
$mysqli = new mysqli('localhost', 'root', '', 'project_db');
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$sql = 'SELECT MAX(student_id) + 1 AS student_id from students';
if ($result = $mysqli->query($sql)) {
while ($row = $result->fetch_row()) {
$nextID = $row[0]['student_id'];
}
$result->close();
}
$mysqli->close();
?>
<input type="number" id="id" class="textbox" name="s_id" onkeyup="showAvailableId(this.value)" min="10000" max="999999"
value="<?php echo $result['student_id']; ?>" required><label id="demo"></label>