如何确保输入的输入是唯一的?
How to ensure that input entered is unique?
我有一个在数据库中提交的简单表单。其中一个字段必须是唯一的(因此我已将其相应的列声明为唯一的)。它工作正常并且没有 post 任何重复值。到目前为止,一切都很好。
但我也想添加一条消息(就像我尝试将数值提交到非数字字段等时的消息)。此消息将告诉用户该值已存在。这是我 post 从 w3schools 截取的屏幕截图。这是我要使用的格式:
我可以在 submit.php 文件中添加一些行来搜索该值是否已存在。但是,我如何显示该消息? (因为验证是服务器端,而消息显示在客户端)?
在乔迪的要求下,我正在post编写代码。尽管是标准的。
html 文件:
<form action="add_classroom.php" method="post">
Name: <input type="number" placeholder="Name" name="classroom_id" required>
</form>
php代码(add_classroom.php):
$result = pg_query(connect(), "SELECT COUNT(1) FROM classroom WHERE classroom_id = '$_POST[classroom_id]'");
$count = pg_fetch_all($result);
//if it exists, do sth (havent figured out what yet)
if($count[0]['count'] == 1){
$result = pg_query(connect(), "INSERT INTO classroom VALUES ('$_POST[classroom_id]', '$_POST[building]', '$_POST[floor]', '$_POST[capacity]')");
}
else $result = pg_query(connect(), "INSERT INTO classroom VALUES ('$_POST[classroom_id]')");
并且在 table 声明中,classroom_id 被声明为唯一的。这会阻止插入现有数据。所以不需要处理那部分。
您将必须查询数据库以查看该值是否存在,或者您可以检查查询返回的行,如果它是 1(表示已插入某些内容),则您知道该值是唯一的,如果它 returns 0,则表示该名称已被使用。
但是,如果您想 'live' 显示该值已被使用,则必须查看 AJAX。
在尝试插入数据之前,检查它是否存在,并回显该响应。否则,插入数据。
例如使用Mysqli
// Store '1' if already exists
$stmt = $db->prepare("SELECT 1 FROM mytable WHERE field = ?");
$stmt->bind_param('s',$value);
$stmt->execute();
$stmt->bind_result($exists);
$stmt->fetch();
$stmt->close();
if($exists){
echo 'Already exists';
}
else
{
// insert the data
}
我有一个在数据库中提交的简单表单。其中一个字段必须是唯一的(因此我已将其相应的列声明为唯一的)。它工作正常并且没有 post 任何重复值。到目前为止,一切都很好。 但我也想添加一条消息(就像我尝试将数值提交到非数字字段等时的消息)。此消息将告诉用户该值已存在。这是我 post 从 w3schools 截取的屏幕截图。这是我要使用的格式:
我可以在 submit.php 文件中添加一些行来搜索该值是否已存在。但是,我如何显示该消息? (因为验证是服务器端,而消息显示在客户端)?
在乔迪的要求下,我正在post编写代码。尽管是标准的。
html 文件:
<form action="add_classroom.php" method="post">
Name: <input type="number" placeholder="Name" name="classroom_id" required>
</form>
php代码(add_classroom.php):
$result = pg_query(connect(), "SELECT COUNT(1) FROM classroom WHERE classroom_id = '$_POST[classroom_id]'");
$count = pg_fetch_all($result);
//if it exists, do sth (havent figured out what yet)
if($count[0]['count'] == 1){
$result = pg_query(connect(), "INSERT INTO classroom VALUES ('$_POST[classroom_id]', '$_POST[building]', '$_POST[floor]', '$_POST[capacity]')");
}
else $result = pg_query(connect(), "INSERT INTO classroom VALUES ('$_POST[classroom_id]')");
并且在 table 声明中,classroom_id 被声明为唯一的。这会阻止插入现有数据。所以不需要处理那部分。
您将必须查询数据库以查看该值是否存在,或者您可以检查查询返回的行,如果它是 1(表示已插入某些内容),则您知道该值是唯一的,如果它 returns 0,则表示该名称已被使用。
但是,如果您想 'live' 显示该值已被使用,则必须查看 AJAX。
在尝试插入数据之前,检查它是否存在,并回显该响应。否则,插入数据。
例如使用Mysqli
// Store '1' if already exists
$stmt = $db->prepare("SELECT 1 FROM mytable WHERE field = ?");
$stmt->bind_param('s',$value);
$stmt->execute();
$stmt->bind_result($exists);
$stmt->fetch();
$stmt->close();
if($exists){
echo 'Already exists';
}
else
{
// insert the data
}