2011-05-31 36 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

相關問題