@Dameron

Объект и перенос в таблицы?

Есть основная таблица в БД с именем `content`, есть так же таблица с именем `archive` в которую по задумке должны отправляться ненужные мне строки. Эти строки должны были опеределяться путем выбора из выпадающего меню специального пункта. Всего в выпадающем меню 4 пункта. Норма, выбыл, удален, заблокирован. в 2 последних вариантах запись из БД вообще должна удаляться, если выбрана норма - то строка остается в таблице `content`, если "выбыл" то должна переместиться в таблицу `archive` и там какое то время находится, с возможностью вернуть данные в основную таблицу. Ниже структуру таблиц приведу.
И вот как я пытался решить данную проблему:
problem

if(isset($red_status)=='Выбыл')
        {
            $sql =   "INSERT INTO archive SELECT * FROM content WHERE id='$rid';";
            $sql .=  "DELETE FROM content WHERE id='$rid'; ";
            if (!$mysqli->multi_query($sql)) {
                echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;
            }
            else{
                echo "Executed successfully";
            }
        }

Затем я попытался это сделать посредством оператора switch , ну и вот собственно код самого файла, который отвечает за редактирование строки в таблице
codepage
<?php
session_start();
require "config.php";
if(isset($_SESSION['id']))
{
    if(isset($_POST['redsub']))
    {
        $rid=$_POST['rid'];
        $red_name=$_POST['rname'];
        $red_birth=$_POST['rbirth'];
        $red_sps= mysqli_real_escape_string($db, $_POST['rsps']);
        $red_temph=$_POST['rtemph'];
        $red_prevacc=$_POST['rprevacc'];
        $red_date=$_POST['rdate'];
        $ndate;
        $red_status=$_POST['rstatus'];
        $statusdate=date('Y-m-d');

        //Установка следующей даты
        switch ($red_prevacc)
        {
            case 'Значение1':
                $dateAt = strtotime(' + 6 months', strtotime($red_date));
                $ndate = date('Y-m-d', $dateAt);
                break;
            case 'Значение2':
                $dateAt = strtotime(' + 6 months', strtotime($red_date));
                $ndate = date('Y-m-d', $dateAt);
                break;
            case 'Значение3':
                $dateAt = strtotime(' + 6 months', strtotime($red_date));
                $ndate = date('Y-m-d', $dateAt);
                break;
            case 'Значение4':
                $dateAt = strtotime(' + 6 months', strtotime($red_date));
                $ndate = date('Y-m-d', $dateAt);
                break;
            case 'Значение5':
                $dateAt = strtotime(' + 3 months', strtotime($red_date));
                $ndate = date('Y-m-d', $dateAt);
                break;
            case 'Значение6':
                $dateAt = strtotime(' + 3 months', strtotime($red_date));
                $ndate = date('Y-m-d', $dateAt);
                break;
            default:
                $dateAt = strtotime(' + 12 months', strtotime($red_date));
                $ndate = date('Y-m-d', $dateAt);
                break;
        }

        switch ($red_status) {
            case 'Выбыл':
                $sql =   "INSERT INTO archive SELECT * FROM content WHERE id='$rid';";
                $sql .=  "DELETE FROM content WHERE id='$rid'; ";
                break;
            case 'Удален':
                $sql .=  "DELETE FROM content WHERE id='$rid'; "; ...
                break;
            case 'Заблокирован':
                $sql .=  "DELETE FROM content WHERE id='$rid'; "; ...
                break;
                /* сохранение в БД отредактированных данных*/
            default:
                $query6 = "UPDATE content SET `name` = '$red_name', `birth` = '$red_birth', `sps` = '$red_sps', `temph` = '$red_temph', `prevacc` = '$red_prevacc', `date` = '$red_date', `next_date` = '$ndate', status = '$red_status', date_status = '$statusdate' WHERE `id` = '$rid'";
        if($result1 = mysqli_query($db, $query6))
        {
            header("Location:".$site_url);
        }
        else
        {
            echo "Ошибка: " . mysqli_error($db);
        }
                break;
        }
    }
    else
    {
        echo "Некорректные данные";
    }
    mysqli_close($db);
}
else
{
    header("Location:".$site_url);
}
?>

Сам файл редактирования таблицы работал. Но вот когда попытался добавить в него же функцию т.н. "архивирования" начались траблы... Т.е. либо не выполняется запрос, либо выполняется но именно по ключу default, где просто редактируются данные и при нужном мне условии архивная таблица все равно не заполняется... Помогите пожалуйста разобраться в чем ошибка.
images

62c0504398e49707906517.png
62c0504c55d19837771540.png
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 1
iMedved2009
@iMedved2009
Не люблю людей
1.
if(isset($red_status)=='Выбыл')
Эта конструкция будет работать через задницу. Ибо isset($red_status) возвращает boolean и сравнивать его со string занятие не благодарное. Вы наверняка хотели так:
if(isset($red_status)&&$red_status=='Выбыл')

2. А вы пробовали в конце вывести дамп какой именно запрос у вас выполняется

3. Откуда берется эта любовь к mysql, mysqli? По-моему уже на каждом заборе написано что надо использовать PDO и prepared statement
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы