如何验证从数据库填充的php下拉菜单

时间:2018-08-16 23:55:51

标签: php mysqli

我有一个从数据库表填充的“表单选择”下拉列表字段。

由于我已经针对空值,特殊字符,电子邮件和数字格式等验证了其他字段,因此我也希望能够针对用户未选择的内容来验证选择下拉列表字段。

这是我的代码

 <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  
            }

感谢您的帮助。

2 个答案:

答案 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"]))