用户未在文本框中输入任何内容时,表将更新空白

问题描述

| 这种情况是我程序的目的是更新员工详细信息。用户可以选择要更新的信息(姓名,职位,部门和标签(表明他/她是否仍在公司工作))中的哪一个。他或她可能会或可能不会按照自己的意愿填写所有详细信息。换句话说,如果他/她不打算更改某些信息,则可以将其留空。 我的问题是更新。现在正在更新。但是,例如,如果用户仅想更改该员工的职位信息,则他/她将部门名称保留为空白。(标记认情况下设置为yes,因此总会有一个值)。当用户单击提交按钮时。它更新表,但是将空文本框更新为空格。在示例中。在数据库中,名称和部门将包含\“ spaces \”。 我的目标是,如果用户将文本框留空,则应保留原始值。它只会更改输入的值。 这是我在empinfo.PHP中使用的代码(注意:这是一个弹出窗口,emp来自索引,但是那没有问题:D)
<body>
<center>
<table class=\"main\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\"> 
<form action=\"empinfo.PHP\" method=\"POST\">
<input type=\'hidden\' name=\'submitted\' id=\'submitted\' value=\'1\'/>
<input type=\'hidden\' name=\'eid\' id=\'eid\' value= \'<?PHP echo $_GET[\'emp\']?>\' />  

<fieldset>
            <div class=\'container\'>
                <label for=\'ename\' >Employee name:</label><br/>
                <input type=\'text\' name=\'ename\' id=\'ename\' maxlength=\"50\" /><br/><br/>
             </div>

             <div class=\'container\'>
                <label for=\'pos\' >Position:</label><br/>
                <input type=\'text\' name=\'pos\' id=\'pos\' maxlength=\"50\" /><br/><br/>
             </div>

            <div class=\'container\'>
                <label for=\'dep\' >Department/Division:</label><br/>
                <input type=\'text\' name=\'dep\' id=\'dep\' maxlength=\"100\" /><br/><br/>
            </div>

            <div class=\'container\'>
                <label for=\'tag\' >Employee Tag:</label><br/>
                <select name=\"tag\" id=\"tag\">
                    <option value=\"Y\">Yes</option>
                    <option value=\"N\">No</option>
                </select> <br/><br/>
            </div>

            <div class=\'container\'>
                <input type=\'submit\' name=\'Submit\' value=\'Submit\' />
            </div>
</fieldset>

</form>
</div>
<?PHP   
$con=MysqL_connect(\'localhost\',\'root\',\'mariel\') or die(MysqL_error());
MysqL_select_db(\'intranet\',$con);
    if(isset($_POST[\'submitted\']))
    {

    $sql = \"SELECT * FROM gpl_employees_list where emp_id=\'\".$_POST[\'eid\'].\"\'\";
    $result = MysqL_query($sql) or die (MysqL_error());
    if(!$result || MysqL_num_rows($result) <= 0)
                            {                       
                                return false;
                            }

    $qry = \"UPDATE gpl_employees_list SET emp_nme = \'\".$_POST[\'ename\'].\"\',emp_pos = \'\".$_POST[\'pos\'].\"\',emp_dep = \'\".$_POST[\'dep\'].\"\',emp_tag = \'\".$_POST[\'tag\'].\"\' WHERE emp_id = \'\".$_POST[\'eid\'].\"\' \";  

    MysqL_query($qry) or die (MysqL_error()); 
?><script>window.close();</script><?PHP 
        }       
    ?>
</table>
<?PHP MysqL_close($con); ?>
</center>
</body>
    

解决方法

        
$col[\'emp_name\'] = (trim($_POST[\'ename\']))?trim($_POST[\'ename\']):false;
$col[\'emp_pos\']  = (trim($_POST[\'pos\']))?trim($_POST[\'pos\']):false;
$col[\'emp_dep\']  = (trim($_POST[\'dep\']))?trim($_POST[\'dep\']):false;
$col[\'emp_tag\']  = (trim($_POST[\'tag\']))?trim($_POST[\'tag\']):false;
// add a val in $col[] with key=column name for each corresponding $_POST val

$queryString =\"UPDATE `gpl_employees_list` SET \";
foreach($col as $key => $val){
  $queryString .= ($val)?\"`\".$key.\"`=\'\".$val.\"\',\":\"\";
}
$queryString = substr($queryString,strlen($queryString) - 1 ).\" WHERE `emp_id` = \'\".$_POST[\'eid\'].\"\'\"; 
mysql_query($queryString);
    ,        在这种情况下,您的脚本如何知道空数据是否是故意的(我决定删除该字段的内容)。不是(您正在尝试实现)?最简单的选择是跳过所有留空的字段,但是您可能希望设计出更好的应用程序。最好已经在页面的表单字段中设置了所有这些值。 除了您的问题外,还请看一下确保脚本安全的内容。仅使用$ _POST和$ _GET值willy nilly不是一个好主意。为此有很多好的资源。     ,        只是做一些检查。例如使用此:
MoreSQL=\'\';
if($_POST[\'ename\']!=\'\') {
    $MoreSQL.=\'emp_nme = \"\'.$_POST[\'ename\'].\'\"\';
}

if($_POST[\'emp_pos\']!=\'\') {
    if($MoreSQL!=\'\') $MoreSQL.=\',\'; // add comma if $MoreSQL is not empty any more
    $MoreSQL.=\'emp_pos = \"\'.$_POST[\'emp_pos\'].\'\"\';
}

if($_POST[\'emp_dep\']!=\'\') {
    if($MoreSQL!=\'\') $MoreSQL.=\',\'; // add comma if $MoreSQL is not empty any more
    $MoreSQL.=\'emp_dep= \"\'.$_POST[\'emp_dep\'].\'\"\';
}

if($_POST[\'tag\']!=\'\') {
    if($MoreSQL!=\'\') $MoreSQL.=\',\'; // add comma if $MoreSQL is not empty any more
    $MoreSQL.=\'emp_tag= \"\'.$_POST[\'emp_tag\'].\'\"\';
}

if($_POST[\'eid\']!=\'\') {
    if($MoreSQL!=\'\') $MoreSQL.=\',\'; // add comma if $MoreSQL is not empty any more
    $MoreSQL.=\'emp_id = \"\'.$_POST[\'eid\'].\'\"\';
}

if($MoreSQL!=\'\') {
    $qry=\'UPDATE gpl_employees_list SET \'.$MoreSQL.\' WHERE emp_id = \'.($_POST[\'eid\']+0).\'\';
    mysql_query($qry) or die (mysql_error()); 
}else{
    echo \'nothing to update\';
}