如何发送" null"或者通过PHP将数据空值化?

时间:2014-09-15 02:12:33

标签: php jqgrid

我有一个jqgrid,其日期列以格式0/0/0000发布,或者如果为空,则将“null”发送到我的php文件,然后插入到MYsql列。它发布“null”但不向数据库列发送“null”命令。我错过了什么? Firephp说,此时我的日期列输入都是“1969-12-31”。如何正确地将“null”发布到这些列? ****更新:以下是$ _REQUEST的var dumb:****

array(12) {
  ["name"]=>string(24) "FABTECH B2B Presentation"
  ["id_continent"]=>string(6) " Ramon"
  ["lastvisit"]=>string(10) "12/31/2104"
  ["cdate"]=>string(9) "8/22/2014"
  ["ddate"]=>string(9) "9/14/2014"
  ["notes"]=>string(69) "B2B machines are C1 AJ and HG ATC.  Waiting for part data from Yoshi."
  ["hello"]=>string(2) "No"
  ["mydate"]=>string(4) "null"
  ["oper"]=>string(4) "edit"
  ["id"]=>string(3) "184"
  ["PHPSESSID"]=>string(32) "93de884f9e02d507ff3662f63149f9f3"
  ["SQLiteManager_currentLangue"]=>string(2) "10"
}

我的代码:

    $crudColumns =  array(
    'id' =>'id'
    ,'name'=>'name'
    ,'id_continent'=>'id_continent'
,'lastvisit'=>'lastvisit'
    ,'cdate'=>'cdate'
    ,'ddate'=>'ddate'
    ,'notes'=>'notes'
    ,'hello'=>'hello'
    ,'mydate'=>'mydate'

);

function fnCleanInputVar($string){
    //$string = mysql_real_escape_string($string);
    return $string;
    }
    /*----====|| GET and CLEAN THE POST VARIABLES ||====----*/
    foreach ($postConfig as $key => $value){ 
        if(isset($_REQUEST[$value])){
            $postConfig[$key] = fnCleanInputVar($_REQUEST[$value]); 
        }
    }
    foreach ($crudColumns as $key => $value){ 
        if(isset($_REQUEST[$key])){
            if ($key == 'lastvisit' || $key == 'cdate' || $key == 'ddate' || $key == 'mydate' ) {
                $crudColumnValues[$key] = '"'.date('Y-m-d', strtotime($_REQUEST[$key])).'"';
            } else {
                $crudColumnValues[$key] = '"'.fnCleanInputVar($_REQUEST[$key]).'"';
            }
        }
    } 
    FB::info($crudColumnValues, "Dates");
    /*----====|| INPUT VARIABLES ARE CLEAN AND CAN BE USED IN QUERIES||====----*/

Mysql query
case $crudConfig['update']:
        /* ----====|| ACTION = UPDATE ||====----*/
        if($DEBUGMODE == 1){$firephp->info('UPDATE','action');}
        $sql = 'update '.$crudTableName.' set ';
        /* create all of the update statements */
        foreach($crudColumns as $key => $value){ $updateArray[$key] = $value.'='.$crudColumnValues[$key]; };
        $sql .= implode(',',$updateArray);
        /* add any additonal update statements here */
        $sql .= ' where id = '.$crudColumnValues['id'];
        if($DEBUGMODE == 1){$firephp->info($sql,'query');}
        mysql_query( $sql ) 
        or die($firephp->error('Couldn t execute query.'.mysql_error()));
        break;

2 个答案:

答案 0 :(得分:1)

检查网格中的参数是否为null,并将NULL放入数据库而不是日期。

foreach ($crudColumns as $key => $value){ 
    if(isset($_REQUEST[$key])){
        if ($key == 'lastvisit' || $key == 'cdate' || $key == 'ddate' || $key == 'mydate' ) {
            if ($_REQUEST[$key] == 'null') {
                $crudColumnValues[$key] = 'NULL';
            } else {
                $crudColumnValues[$key] = '"'.date('Y-m-d', strtotime($_REQUEST[$key])).'"';
            }
        } else {
            $crudColumnValues[$key] = '"'.fnCleanInputVar($_REQUEST[$key]).'"';
        }
    }
} 

答案 1 :(得分:1)

似乎你可能会将null与null混淆。空字符串将被解释为""而null将被解释为" null",差异很大。试试这个。

修改 在查看PHP手册之后,似乎如果您尝试将空值添加到数组键,它将更改为""。

首先,像这样创建你的数组

['mydate'] => ''

更改日期格式。

foreach ($crudColumns as $key => $value){ 
    if(isset($_REQUEST[$key])){

if ($key == 'lastvisit' || $key == 'cdate' || $key == 'ddate' || $key == 'mydate' ) {       
    if (strtotime($value)) {
       $value = '"'.date('Y-m-d', $value).'"';
    } else {
      $value = "";
    }
} else {
    $crudColumnValues[$key] = fnCleanInputVar($_REQUEST[$key]);
}

此外,部分问题是您指定了密钥,但您需要更改值。