Как не включать пустые поля при обновлении записи MySQL - PullRequest
2 голосов
/ 01 декабря 2011

Как бы я не включил текстовые поля формы, оставленной незаполненной, в запрос на обновление MySQL?Я понимаю, почему он заменяет заполненные поля пустыми строками, но я не уверен в эффективном способе исправить это.Является ли лучший вариант действительно просто много if утверждений?Есть ли какая-то функция, которую я мог бы использовать, чтобы запретить пустые поля в моей HTML-форме?

Вот что у меня есть:

//Check if record exists
if(mysql_num_rows(mysql_query("SELECT Item_Id FROM Item_t WHERE Item_Id = '$itemid'")) == 0){
    die('The Item ID you entered was not found. Please go back and try again.');
    }

//Update record
$update = "UPDATE Item_t SET Item_Name='$itemname', Item_Price='$itemprice' WHERE Item_Id='$itemid'";
mysql_query($update);

Итак, в основном, в этом примере, если вы оставитеполе, которое устанавливает $itemname пустым и просто обновляет $itemprice, цена будет обновлена, но имя будет установлено в пустую строку.

Ответы [ 3 ]

5 голосов
/ 01 декабря 2011

Вы можете проверить, являются ли ваши строки пустыми в SQL:

UPDATE Item_t
SET Item_Name = IF('$itemname' = '', Item_Name, '$itemname'),
    Item_Price = IF('$itemprice' = '', Item_Price, 'itemprice')
WHERE Item_Id='$itemid'
0 голосов
/ 01 декабря 2011

попробуйте что-то вроде этого.

$strSet = '';


//make sure to sanitize your inputs first, then do this....
if(Item_Name != ''){ $strSet .= 'Item_Name=\'$itemname\','};
if(Item_Price != ''){ $strSet .= 'Item_Price=\'$itemprice\','};

//removes trailing comma
$strSet = substr($strSet,0,-1);

//Update record
$update = "UPDATE Item_t SET " . $strSet . " WHERE Item_Id='$itemid'";
mysql_query($update);
0 голосов
/ 01 декабря 2011

Если вы строите строку обновления в php, вы можете просто построить ее по-другому, если она пуста:

$update = "UPDATE Item_t SET ".($itemname ? "Item_Name='$itemname', " : "")."Item_Price='$itemprice' WHERE Item_Id='$itemid'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...