Всем привет! Видимо началась паранойя, поэтому не могу обойти мимо этого вопроса...
Пользователь добавляет какие-то данные в форму, форма обрабатывается php скриптом, где происходит запись с помощью многих MySQL запросов. Понятное дело, что все данные с этими запросами работают вместе и нужны они все. Так вот вопрос в примере... Нужно ли делать столько проверок в скрипте? Ведь даже с проверкой, при ошибке одного запроса - остальные не будут выполнены. И получится так, что часть данных останется в базе, а часть не запишется, что при выводе будет выдавать серверные ошибки (поэтому в скриптах вывода тоже постоянно приходится проверять есть ли эти данные (перед выводом))
<?
// Предположим пришли эти данные
$title= 'Заголовок';
$text = 'Текст новости Текст новос тиТекст новости';
$categoryes = array('2', '7', '15', '12');
$tags = array('новость', 'тег', 'еще тег');
if(!empty($title) && !empty($text) && count($categoryes) > 0){ // проверка на присутствие данных
if($db->query("INSERT INTO `news` (`title`, `text`) VALUES('{$text}', '{$text}')")){
if($news_id = $db->insert_id){
foreach($categoryes as $val){
if(is_numeric($val)) $insert_cats[] = "('{$news_id}', '{$val}')";
}
if(count($insert_cats) > 0){
$insert_values = implode(', ',$insert_cats);
if($insert_values != ''){
if($db->query("INSERT INTO `category` (`id_news`, `text`) VALUES {$insert_values}")){
foreach($tags as $val){
$val = trim($val);
if($val != '') $insert_tags[] = "('{$news_id}', '{$val}')";
}
if(count($insert_tags) > 0){
$insert_tags_val = implode(', ',$insert_tags);
if($insert_values != ''){
if($db->query("INSERT INTO `tags` (`id_news`, `tag`) VALUES {$insert_tags_val}")){
echo 'Новость добавлена';
die();
}else $err[] = 'Ошибка добавления тегов';
}else $err[] = 'Ошибка в тегах';
}else $err[] = 'Теги не обработаны';
}else $err[] = 'Ошибка записи категорий';
}else $err[] = 'Ошибка в категориях';
}else $err[] = 'Категории отсутствуют';
}else $err[] = 'Не получен id новости';
}else $err[] = 'Ошибка записи новости';
}else $err[] = 'Не все поля заполнено';
if(count($err) > 0) echo implode(PHP_EOL, $err);
else echo 'что-то неизвестное'; // ибо в случае предвиденных ошибок вывелась бы ошибка или при успешной записи скрипт до сюда не дошел
?>
Прошу не обращать внимание на фильтрацию данных или ошибки в коде (код написал для примера исключительно для вопроса)