У меня есть jqgrid со столбцами даты, которые публикуются в формате 0/0/0000 или, если они пустые, отправьте «null» в мой php-файл, чтобы затем вставить в столбец MYsql. Он отправляет «null», но не отправляет команду «null» в столбец базы данных. Что мне не хватает? Firephp говорит, что на данный момент все мои данные в столбце даты «1969-12-31». Что я могу сделать, чтобы правильно опубликовать «NULL» в этих столбцах?
****ОБНОВИТЬ: Вот вар туп для $ _REQUEST: ****
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;
Проверьте, является ли параметр из сетки 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]).'"';
}
}
}
Кажется, вы можете путать пустое с нулевым. Пустая строка будет интерпретироваться как «», тогда как ноль будет интерпретироваться как «ноль», большая разница. Попробуй это.
РЕДАКТИРОВАТЬ:
После просмотра руководства по 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]);
}
Кроме того, отчасти проблема заключается в том, что вы указываете ключи, но вам необходимо изменить значение.