我有一个从数据库表填充的“表单选择”下拉列表字段。
由于我已经针对空值,特殊字符,电子邮件和数字格式等验证了其他字段,因此我也希望能够针对用户未选择的内容来验证选择下拉列表字段。
这是我的代码
<div class="form-group">
<label>Select Center</label>
<?php
echo "<select class='form-control' name='center_name'>";
$result = mysqli_query($con, "SELECT center_name FROM
center");
while ($row = mysqli_fetch_assoc($result)) {
unset($center_name);
$center_name = $row['center_name'];
echo '<option
value="'.$center_name.'">'.$center_name.'</option>';
}
echo "</select>";
?>
</div>
下面的代码是我已经运行但没用的代码。
if (!isset($_POST["center_name"])) {
$centerError = "Select your center ";
}else{
$center_name = check_input($_POST["center_name"]);//trim
and stripslashes function
}
感谢您的帮助。
答案 0 :(得分:1)
在此示例中,您将看到如何检测是否通过POST而不是GET来请求页面,而在提交表单时会发生这种情况。
然后在顶部,如果它是POST
,则进行检查,如果无效,则设置错误消息。
然后呈现html,并有条件地显示或不显示错误消息。
顶部的print_r()
可让您窥视$_POST
数组的内容。
文件名:process-select.php
<?php
print_r($_POST);
$action = '';
$center_name = '';
$center_name_error = '';
if($_SERVER['REQUEST_METHOD'] === 'POST'):
$action = 'posting';
$center_name = isset($_POST["center_name"]) ? $_POST["center_name"] : '';
if(empty($center_name)){
$center_name_error = "Please select an option";
}
endif;
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Select example</title>
</head>
<body>
<h1>This is a Select example submitted to php</h1>
<form method="post" action="process-select.php">
<select name="center_name">
<option value="" <?php echo empty($center_name)? 'selected' : '' ?>></option>
<option value="Option 1" <?php echo $center_name === 'Option 1'? 'selected' : '' ?>>Option 1</option>
<option value="Option 2" <?php echo $center_name === 'Option 2'? 'selected' : '' ?>>Option 2</option>
<option value="Option 3" <?php echo $center_name === 'Option 3'? 'selected' : '' ?>>Option 3</option>
<option value="Option 4" <?php echo $center_name === 'Option 4'? 'selected' : '' ?>>Option 4</option>
<option value="Option 5" <?php echo $center_name === 'Option 5'? 'selected' : '' ?>>Option 5</option>
</select>
<button type="submit">Submit</button>
<?php if($action === 'posting' && !empty($center_name_error)): ?>
<p><?php echo $center_name_error ?></p>
<?php endif ?>
</form>
</body>
</html>
答案 1 :(得分:0)
由于表单字段仍将提交到服务器!在这里设置isset无效。
使用
if (empty($_POST["center_name"]))
代替
if (!isset($_POST["center_name"]))