2011-05-31 33 views
0

我正在做一个项目,可以更新员工的姓名,职位,部门和标签。当用户没有向文本框输入任何东西时,表格更新为空格

但是,当我做我的项目,它不会更新,我知道我的代码有问题。你们会不会介意检查它。

我的php页面有一个index.php这是主菜单,如果你点击列表中的员工名字,会弹出一个窗口。弹出的是更新。

我的PHP代码(现在更新),但是发现错误:

<?php 
$con=mysql_connect('localhost','root','pss') or die(mysql_error()); 
mysql_select_db('intra',$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 
     }  
    ?> 

*注:这是现在更新,但如果用户离开文本框的一个空的,它更新还有空格的表格,这是我现在的问题。我如何避免这种情况?我的意思是,如果用户将一个文本框留空,那么具有空值的数据仍然必须包含其旧值,但是如何使用此代码执行此操作?感谢那些谁可以帮助

 
MisaChan 
+0

Pleeeeease确保您合法性检查该输入,或者更好的是,使用参数在你的查询中,在使用这个之前。您正在使用该代码请求SQL注入攻击。您需要对emp数据执行preg_match(),理想情况下使用SELECT * FROM gpl_employees_list WHERE emp_id =?;为您的查询。 – 2011-05-31 03:22:18

+0

@King Skippus:我已经更改了我的代码,请参阅Sir CleaverQuack的帖子,这与我现在使用的代码差不多,尽管仍然存在一点错误 – MisaChan 2011-05-31 03:56:13

+1

输入仍需要清理。永远不要将用户提供的输入直接传递到查询中。请阅读,特别是底部的“缓解”部分:http://en.wikipedia.org/wiki/SQL_injection – 2011-05-31 04:00:45

回答

2

所以你可能不会得到的值可以使用$ _POST为“名/ POS/DEP /标签”和“EMP” $ _GET。 将GETs更改为POST - 应该这样做。 由于您正在更新,我建议使用POST over GET。 GET更适合搜索。

此外,您可以将所有更新查询放入一个更新查询中。 像这样。

$name = $_POST['name']; 
$pos = $_POST['pos']; 
$dep = $_POST['dep']; 
$tag = $_POST['tag']; 
$emp = $_POST['emp']; 

$qry_start = "UPDATE gpl_employees_list SET "; 
$where = " WHERE emp_id = $emp"; 
$fields = ""; 
$updates = ""; 

if($name){ 
    $updates .= " `emp_name` = $name,"; 
} 
if($pos){ 
    $updates .= " `emp_pos` = $pos,"; 
} 
if($dep){ 
    $updates .= " `emp_dep` = $dep,"; 
} 
if($tag){ 
    $updates .= " `emp_tag` = $tag,"; 
} 
$updates = substr($updates, 0, -1); //To get rid of the trailing comma. 
$qry = $qry_start . $updates . $where; 
+0

@CleverQuack:谢谢你的回复。出现以下错误:注意:未定义的索引:在C:\ wamp \ www \ Intranet_Update \ empinfo.php中的名称在行上的C:\ wamp \ www \ Intranet_Update \ empinfo.php中的未定义索引:emp 说明:未定义指数:用C POS:\瓦帕\ WWW \ Intranet_Update \ empinfo.php上线87 说明:未定义指数:DEP在C:\瓦帕\ WWW \ Intranet_Update \ empinfo.php上线88 注意:未定义的索引:位于第89行的C:\ wamp \ www \ Intranet_Update \ empinfo.php中的pos。 – MisaChan 2011-05-31 02:19:12

+0

您可以发布您的代码吗? – 2011-05-31 02:21:00

+0

@MisaChan为了使用'$ _POST'超全局,您需要通常从表单提交POST请求。 – Phil 2011-05-31 02:23:01

0

更改SQL数据库后,请记住提交这些更改,否则将被忽略。

+1

你是什么意思? – MisaChan 2011-05-31 02:20:07

+1

虽然是真的,但我怀疑这是问题所在。 PHP的MySQL库默认设置为自动提交 – Phil 2011-05-31 02:23:39

+0

啊,好的,我不知道。 (我会认为它会更安全,因为它不会默认自动提交。) – MRAB 2011-05-31 02:27:14

1

这是我用来保持它的工作:)我希望这能成为别人的来源以及:)

$col['emp_nme'] = (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){ 
if($val){ 
    $queryString .="`".$key."`='".$val."',"; 
} 
          } 
$queryString = substr($queryString ,0 ,strlen($queryString) - 1)." WHERE emp_id = '".$_POST['eid']."'"; 
mysql_query($queryString); 
+0

是的,这也是一个很好的方法。我是自己的foreach循环的粉丝。虽然我会通过将我标记为答案而不是你自己来欣赏一些爱。 :P – 2011-06-02 05:39:15

+0

gomen ne desu:好的!检查答案可以吗? :P – MisaChan 2011-06-02 05:46:30

+0

我想不是:)反正谢谢! xD – MisaChan 2011-06-02 05:47:34

相关问题