更新一个MySQL列通过PHP为NULL不工作
问题描述:
当我点击这个按钮我的网页被转发到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,当我单击上述按钮但这不起作用。我没有得到任何错误。
答
你有
$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,在注释中提到。
你的专栏允许为空吗? :D – 2014-12-02 15:06:51
你能回应查询吗? – Strawberry 2014-12-02 15:07:35
在问题的范围之外,但从我记得PHP日子里记得,您的安全检查已被破坏。如果$ _SESSION ['rights']'不包含所需的'$ accptList',你可以设置一个头部重定向到登录页面,但是你不会退出脚本或者将剩下的部分包含在'else'中,所以数据库代码即使发送标题也会执行,不是吗? – 2014-12-02 15:14:31