问题描述
|
这种情况是我程序的目的是更新员工详细信息。用户可以选择要更新的信息(姓名,职位,部门和标签(表明他/她是否仍在公司工作))中的哪一个。他或她可能会或可能不会按照自己的意愿填写所有详细信息。换句话说,如果他/她不打算更改某些信息,则可以将其留空。
我的问题是更新。现在正在更新。但是,例如,如果用户仅想更改该员工的职位信息,则他/她将部门名称保留为空白。(标记默认情况下设置为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\';
}