提问者:小点点

如果在PHP的编辑模式下未选择,列表框值在数据库中变为0


我有三张桌子

  • 城市:城市id、城市名称

我在所选ID的编辑按钮点击时,在文本框和列表框中显示数据。

数据以所选id正确显示在列表框中,但当我单击“保存”按钮而不更改列表框值时,它在数据库中变为0。

如果我不更改列表框的值并单击“保存”,则它将从列表框中插入0。

<?php 
$data = 0;
if(isset($_GET['edit']))
{
$id = clean($_GET['edit']);
mysql_set_charset('utf8'); 
$sql="SELECT city_name,state_name,category_name,headline,author,story,source,photo,date from news left join
 city on news.city_id=city.city_id left join state on news.state_id=state.state_id left join category on news.cat_id=category.category_id where id = '$id'";
$result=mysql_query($sql);
$data=mysql_fetch_array($result);
}
?>

<?php 
$cat = $Admin->select($Admin->cat_table,'','','');  
?>

<select name="cat_id" class="select"  required="">
    <option value="<?php if(isset($_GET['edit'])){ echo $data['category_name']; }?>"><?php if(isset($_GET['edit'])){echo $data['category_name'];}?></option>      
    <?php                  
    foreach($cat as $load_category)
    {                       
    ?>  
    <option value="<?php echo $load_category["category_id"]; ?>"><?php echo $load_category["category_name"]; ?></option>
    <?php }?>
</select>

<?php           
        $errors = array();      
        $Admin = new admins;                
        if(isset($_POST['save']))
        {   
                $table = $Admin->news_table;
                    if(isset ($_GET['edit']))           
                    {                   
                            $id = clean($_GET['edit']);
                            $cond = "id = '$id'";                       
                            if($Admin->save_advance($table,$_POST,'',$cond))
                            {
                                $_SESSION['message'] = "News Updated Successfully";                 
                                header("Location:add_news.php");
                                exit;       
                            }               

                    }                                               

        }
?>  

我做错了什么?


共1个答案

匿名用户

如果我错了,请告诉我

<option value="<?php if(isset($_GET['edit'])){ echo $data['category_name']; }?>">
    <?php if(isset($_GET['edit'])){echo $data['category_name'];}?>
</option> 

对我来说似乎很奇怪,它将类别名称设置为select中第一个选项的值。基本上,如果不更改列表框,则尝试更新category\u id是category\u名称的行。这应该是:

<option value="0">
    <?php if(isset($_GET['edit'])){echo $data['category_name'];}?>
</option> 

但是如果你必须更新一些东西,没有值你就做不到。所以添加某种验证,禁止单击保存按钮而不在选择中设置值,或者只是做这样的事情(向列表框添加默认类别)

<select name="cat_id" class="select" required>  
    <?php   
    $counter = 0;                        
    foreach($cat as $load_category){ ?>  
    <option <?php echo ($counter == 0) ? 'selected' : ''; ?> value="<?php echo $load_category["category_id"]; ?>"><?php echo $load_category["category_name"]; ?></option>
    <?php
    //increments counter
    $counter++; }?>
</select>