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

    @Dameron Автор вопроса
    код страницы, отвечающей за редактирование:
    <spoiler title="editrow.php">
    <?php
    session_start();
    
    require "config.php";
    
    if(isset($_SESSION['id']))
    {
    	if(isset($_POST['redsub']))
    	{
    		mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    		$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');
    		$mysqli;
    
    		//Установка даты следующего тестирования
    		switch ($red_prevacc) 
    		{
    			case 'Нарк':
    				$dateAt = strtotime(' + 6 months', strtotime($red_date));
    				$ndate = date('Y-m-d', $dateAt);
    				break;
    			case 'ЗПРУ':
    				$dateAt = strtotime(' + 6 months', strtotime($red_date));
    				$ndate = date('Y-m-d', $dateAt);
    				break;
    			case 'Втеча':
    				$dateAt = strtotime(' + 6 months', strtotime($red_date));
    				$ndate = date('Y-m-d', $dateAt);
    				break;
    			case 'Напад':
    				$dateAt = strtotime(' + 6 months', strtotime($red_date));
    				$ndate = date('Y-m-d', $dateAt);
    				break;
    			case 'Членоушкодження':
    				$dateAt = strtotime(' + 3 months', strtotime($red_date));
    				$ndate = date('Y-m-d', $dateAt);
    				break;
    			case 'Самогубство':
    				$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;
    		}
    
    		if(isset($red_status)&&$red_status=='Выбыл')
    			{
    				$mysqli->begin_transaction();
    		        try {
    		        $stmt = $mysqli->prepare("INSERT INTO archive SELECT * FROM content WHERE id=?");
    		        $stmt->bind_param("i", $rid);
    		        $stmt->execute();
    
    		        $stmt = $mysqli->prepare("DELETE FROM content WHERE id=?");
    		        $stmt->bind_param("i", $rid);
    		        $stmt->execute();
    
    		        $mysqli->commit();
    
    		        } catch (\Exception $exception) {
    		            $mysqli->rollback();
    
    		            throw $exception;
    		        }
    			}
    						
    		/*$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);
    		}*/
    	}
    	else
    	{
    		echo "Некорректные данные";
    	}
    	mysqli_close($db);
    }
    else
    {
    	header("Location:".$site_url);
    }
    ?>


    Вот в принципе так весь выглядит
  • Объект и перенос в таблицы?

    @Dameron Автор вопроса
    Fatal error: Uncaught Error: Call to a member function begin_transaction() on null in H:\serv\OSPanel\domains\proj\include\editrow.php:60 Stack trace: #0 {main} thrown in H:\serv\OSPanel\domains\proj\include\editrow.php on line 60

    Исправил. Теперь, я так понимаю ругается на транзакцию ? Можно ли туда воткнуть переменную $red_status ?
  • Объект и перенос в таблицы?

    @Dameron Автор вопроса
    Дмитрий,
    Сделал вот так:
    if(isset($red_status)&&$red_status=='Выбыл')
    			{
    				$mysqli->begin_transaction();
    				try {
    				$stmt = $mysqli->prepare("INSERT INTO archive SELECT * FROM content WHERE id=?");
    				$stmt->bind_param("i", $rid);
    				$stmt->execute();
    
    				$stmt = $mysqli->prepare("DELETE FROM content WHERE id=?");
    				$stmt->bind_param("i", $rid);
    				$stmt->execute();
    
    				$mysqli->commit();
    
    				} catch ($exception) {
    				    $mysqli->rollback();
    
    				    throw $exception;
    				}
    			}


    Однако теперь ругнулось на:
    Parse error: syntax error, unexpected '$exception' (T_VARIABLE), expecting identifier (T_STRING) or namespace (T_NAMESPACE) or \\ (T_NS_SEPARATOR) in

    Хотя вроде бы знак "\\" не употреблялся нигде
  • Объект и перенос в таблицы?

    @Dameron Автор вопроса
    Может в таблицу с архивом добавить еще столбец для хранения старого ID , чтоб, он не пересекался с ID этой же таблицы?
  • Объект и перенос в таблицы?

    @Dameron Автор вопроса
    Дмитрий, Поставил, только выполнение запроса, снова начало ругаться ((
    Fatal error: Uncaught mysqli_sql_exception: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE FROM content WHERE id='3'' at line 1 in H:\serv\OSPanel\domains\proj\include\editrow.php:62 Stack trace: #0 H:\serv\OSPanel\domains\proj\include\editrow.php(62): mysqli_query(Object(mysqli), 'INSERT INTO arc...') #1 {main} thrown in H:\serv\OSPanel\domains\proj\include\editrow.php on line 62
  • Объект и перенос в таблицы?

    @Dameron Автор вопроса
    Дмитрий, ага, там дальше есть в случае не выполнения кода отправляется header..
    Убрал заголовок. Вот что выдало:
    if(isset($red_status)&&$red_status=='Вибув етапом')
    			{
    				$sql1 =   "INSERT INTO archive SELECT * FROM content WHERE id='$rid';";
    				$sql1.=  "DELETE FROM content WHERE id='$rid'; ";
    				var_dump($sql1);
    			}

    string(89) "INSERT INTO archive SELECT * FROM content WHERE id='3';DELETE FROM content WHERE id='3'; "
  • Объект и перенос в таблицы?

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

    Попробовал.. Ругается на строку дампа: Warning: Cannot modify header information - headers already sent by
    Откуда берется эта любовь к mysql, mysqli? По-моему уже на каждом заборе написано что надо использовать PDO и prepared statement

    я толком не занимался программированием, когда то для себя лет 10-15 назад пробовал. А тут начальство на работе озадачило... Вот пришлось вспоминать что умею