2014-12-02 32 views
2

當我點擊這個按鈕我的網頁被轉發到removeRowValue.php頁:更新一個MySQL列通過PHP爲NULL不工作

<a href="/includes/incl/removeRowValue.php?name=ontvangenklantdatum"><button type="button" class="btn btn-default">Empty</button></a> 

我removeRowValue.php頁:

<?php 
session_start(); 
$str = (int) $_SESSION['rights']; 
$accptList = array(1,3); 
if(!in_array($str, $accptList)){   
    header('Location: index.php?pagina=login'); 
} 
    require('conn.inc.php'); 
    $getName  = filter_input(INPUT_GET, "name", FILTER_SANITIZE_STRING); 
    $columnName  = 'rd_' . $getName; 
    $artCode  = $_SESSION['artcode']; 
    $getadmrmaid = $_SESSION['getadmrmaid']; 

    $delRmaDetVal = $dbh->prepare("UPDATE rma_detail LEFT JOIN rma ON rma_detail.rd_rma_id=rma.r_id SET $columnName = NULL WHERE rd_artikel_code = :artcode AND r_nr = :getadmrmaid"); 
    $delRmaDetVal->bindParam(':artcode', $artcode, PDO::PARAM_STR); 
    $delRmaDetVal->bindParam(':getadmrmaid', $getadmrmaid, PDO::PARAM_INT); 
    $delRmaDetVal->execute(); 

?> 
  • 在我的mysql表中檢查空列是否爲
  • 默認值爲NULL。

我已將NULL更新爲某個值(即:2014-12-2),但現在我想將其返回NULL,當我單擊上述按鈕但這不起作用。我沒有得到任何錯誤。

+1

你的專欄允許爲空嗎? :D – 2014-12-02 15:06:51

+0

你能迴應查詢嗎? – Strawberry 2014-12-02 15:07:35

+2

在問題的範圍之外,但從我記得PHP日子裏記得,您的安全檢查已被破壞。如果$ _SESSION ['rights']'不包含所需的'$ accptList',你可以設置一個頭部重定向到登錄頁面,但是你不會退出腳本或者將剩下的部分包含在'else'中,所以數據庫代碼即使發送標題也會執行,不是嗎? – 2014-12-02 15:14:31

回答

4

你有

$artCode = $_SESSION['artcode']; 

但在綁定使用$artcode。注意小寫字母「c」。

變量區分大小寫。因此,您需要將其更改爲$artCode

使用error reporting會發出未定義變量的信號。

在連接打開後立即添加$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  • 您可能未檢查錯誤。

將錯誤報告添加到您的文件的頂部,這將有助於查找錯誤。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

旁註:錯誤報告只應在分期完成,並且從不生產。


在評論引述丹·法瑞爾:

「在對問題的範圍,但是從我可以從我的PHP天記住,你的安全檢查被打破你設置一個頭重定向到如果$_SESSION['rights']登錄頁面不包括所需$accptList,但你不退出腳本或在else包裹休息,所以數據庫的代碼執行即使頭部被髮送,不是嗎?」

  • 你也應該你的頭後面加一個exit;。如果它退出到頭部,那麼你會知道這是你的代碼失敗的第一部分。

  • exit;應始終遵循頭,並且被認爲是很好的做法這樣做。


我也建議你檢查是否所有的會話名稱的使用isset()確實設置,甚至如果他們在條件語句中使用empty()是空的。

即:

if(isset($_SESSION['artcode']) && !empty($_SESSION['artcode'])) 

另外加入其他會話變量該條件,並檢查,看看你的列允許NULL,在註釋中提到。

+0

非常感謝您的幫助。我很高興它現在有效,有時它不是代碼,而只是一個愚蠢的錯誤。 Tha camelcase寫作已經成功了! – Peter 2014-12-03 06:40:16

+0

@DanFarrel&Fred在你們給我帶來新東西之前,我並不知道這一點!謝謝你。可悲的是我不能給你一個+1,因爲我的聲望還沒有快速增長,但工作很好! – Peter 2014-12-03 06:42:02

+0

@彼得你非常歡迎彼得。很高興能夠幫助和分享財富;)*歡呼* – 2014-12-03 12:34:28