通过PHP将mysql列更新为NULL无效

时间:2014-12-02 15:04:17

标签: php mysql

当我点击此按钮时,我的页面将被转发到removeRowValue.php页面:

<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 个答案:

答案 0 :(得分: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

旁注:错误报告应仅在暂存时完成,而不是生产。


在评论中引用Dan Farrell:

“超出了问题的范围,但从我在PHP日期记得的情况来看,你的安全检查已经破了。如果$_SESSION['rights']没有,你设置一个标题重定向到登录页面包括所需的$accptList,但是你不退出脚本或将其余内容包装在else中,所以即使发送了头文件也会执行数据库代码,不是吗?“

  • 您还应在标题后添加exit;。如果它退出到标题,那么您将知道它是代码的第一部分失败。

  • exit;应始终遵循标题,并且被视为良好做法。


我还建议您检查是否确实使用isset()设置了所有会话名称,并且即使它们在条件语句中使用empty()为空也是如此。

即:

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

将其他会话变量添加到该条件,并检查您的列是否允许NULL,如注释中所述。