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

Ссылка скопирована
1 ответ

Есть основная таблица в БД с именем `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";             }         }

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); } ?>

<?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

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

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

Дополнительно:

Ответы:

1.
if(isset($red_status)=='Выбыл')
Эта конструкция будет работать через задницу. Ибо isset($red_status) возвращает boolean и сравнивать его со string занятие не благодарное. Вы наверняка хотели так:
if(isset($red_status)&&$red_status=='Выбыл')

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

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

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

    Попробовал.. Ругается на строку дампа: Warning: Cannot modify header information - headers already sent by

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

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

  • Dameron,

    Попробовал.. Ругается на строку дампа: Warning: Cannot modify header information - headers already sent by

    Это значит что вы после того как отправили контент вы пытаетесь отправить еще и заголовки через функцию header. Последнее надо убрать.

  • Дмитрий, ага, там дальше есть в случае не выполнения кода отправляется 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); 			}

    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'; "

  • В начале поставьте
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

    И запрос то выполните.

  • Дмитрий, Поставил, только выполнение запроса, снова начало ругаться ((
    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:servOSPaneldomainsprojincludeeditrow.php:62 Stack trace: #0 H:servOSPaneldomainsprojincludeeditrow.php(62): mysqli_query(Object(mysqli), 'INSERT INTO arc...') #1 {main} thrown in H:servOSPaneldomainsprojincludeeditrow.php on line 62
  • Может в таблицу с архивом добавить еще столбец для хранения старого ID , чтоб, он не пересекался с ID этой же таблицы?
  • Dameron, Можно поставить и вывод запроса и вывод ошибки. Но вам только что сказали что у вас ошибка в запросе.
  • Dameron, ошибка не в этом.

    Ну а вообще, зачем вам использовать multi_exec? Это вещь имхо не очень.

    $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; }

    $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; }

  • Дмитрий,
    Сделал вот так:
    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; 				} 			}

    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, сорряныч - отвык я без иде.
    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;         }       }

    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; } }

  • Fatal error: Uncaught Error: Call to a member function begin_transaction() on null in H:servOSPaneldomainsprojincludeeditrow.php:60 Stack trace: #0 {main} thrown in H:servOSPaneldomainsprojincludeeditrow.php on line 60

    Fatal error: Uncaught Error: Call to a member function begin_transaction() on null in H:servOSPaneldomainsprojincludeeditrow.php:60 Stack trace: #0 {main} thrown in H:servOSPaneldomainsprojincludeeditrow.php on line 60

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

  • Dameron, нет он ругается на то что вы метод begin_transaction вызываете у пустой переменной. Код целиком?
  • код страницы, отвечающей за редактирование:
    <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); } ?>

    <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,
    так в первом куске кода в начальном вопросе вы используете $mysqli->multi_query, во втором mysqli_query();
    В том что сейчас все в кучу. Как бы это разные способы работы с базой - процедурный и обьектный.

    Давайте вы сначала выберите какой способ вы хотите видеть.

  • Дмитрий, Такой, который наиболее оптимально сюда подходит... Мулти я импользовать пытался тк пытался объеденить 2 запроса сразу
  • Dameron, ну просто если у вас вверху процедурный подход - то должно mysqli_multi_query

    Ну я так понимаю в переменной $db - соединение с mysql?

    if(isset($red_status)&&$red_status=='Выбыл')       {             mysqli_begin_transaction($db);             try {                 $stmt = mysqli_prepare($db, "INSERT INTO archive SELECT * FROM content WHERE id=?");                 mysqli_stmt_bind_param($stmt, "i", $rid);                 mysqli_stmt_execute($stmt);                  $stmt = mysqli_prepare($db, "DELETE FROM content WHERE id=?");                 mysqli_stmt_bind_param($stmt, "i", $rid);                 mysqli_stmt_execute($stmt);                  mysqli_commit($db);              } catch (Exception $exception) {                 mysqli_rollback($db);                  throw $exception;             }       }

    if(isset($red_status)&&$red_status=='Выбыл') { mysqli_begin_transaction($db); try { $stmt = mysqli_prepare($db, "INSERT INTO archive SELECT * FROM content WHERE id=?"); mysqli_stmt_bind_param($stmt, "i", $rid); mysqli_stmt_execute($stmt); $stmt = mysqli_prepare($db, "DELETE FROM content WHERE id=?"); mysqli_stmt_bind_param($stmt, "i", $rid); mysqli_stmt_execute($stmt); mysqli_commit($db); } catch (Exception $exception) { mysqli_rollback($db); throw $exception; } }

  • Дмитрий, $db - да, это соединение с базой данных
  • Добавил $db в

    mysqli_begin_transaction($db);             try {                 $stmt = mysqli_prepare($db, "INSERT INTO archive SELECT * FROM content WHERE id=?");                 mysqli_stmt_bind_param($stmt, "i", $rid);                 mysqli_stmt_execute($stmt);                  $stmt = mysqli_prepare($db, "DELETE FROM content WHERE id=?");

    mysqli_begin_transaction($db); try { $stmt = mysqli_prepare($db, "INSERT INTO archive SELECT * FROM content WHERE id=?"); mysqli_stmt_bind_param($stmt, "i", $rid); mysqli_stmt_execute($stmt); $stmt = mysqli_prepare($db, "DELETE FROM content WHERE id=?");

    Однако все равно ругается так же само (((

    Fatal error: Uncaught Error: Call to a member function begin_transaction() on null in H:servOSPaneldomainsprojincludeeditrow.php:60 Stack trace: #0 {main} thrown in H:servOSPaneldomainsprojincludeeditrow.php on line 60

  • Dameron, я ж просто написал весь код ifa.
    В том куске кода что вы прислали ошибки нет. Пришлите весь кусок кода.
  • 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 'Значение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; 		}  		//print "ID = $rid Name = $red_name<br /> Date = $red_date<br /> Next date = $ndate<br /> Prev = $red_prevacc<br /> Temph = $red_temph<br /> Barack = $red_sps<br /> Виправлення зроблені $statusdate"; 		//(`name`, `birth`, `sps`, `temph`, `prevacc`, `date`, `next_date`, `status`, `date_status`) 		if(isset($red_status)&&$red_status=='Выбыл') 			{ 				$mysqli->begin_transaction($db); 		        try { 		        $stmt = $mysqli->prepare($db, "INSERT INTO archive SELECT * FROM content WHERE id=?"); 		        $stmt->bind_param("i", $rid); 		        $stmt->execute();  		        $stmt = $mysqli->prepare($db, "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); }  ?>

    <?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 'Значение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; } //print "ID = $rid Name = $red_name<br /> Date = $red_date<br /> Next date = $ndate<br /> Prev = $red_prevacc<br /> Temph = $red_temph<br /> Barack = $red_sps<br /> Виправлення зроблені $statusdate"; //(`name`, `birth`, `sps`, `temph`, `prevacc`, `date`, `next_date`, `status`, `date_status`) if(isset($red_status)&&$red_status=='Выбыл') { $mysqli->begin_transaction($db); try { $stmt = $mysqli->prepare($db, "INSERT INTO archive SELECT * FROM content WHERE id=?"); $stmt->bind_param("i", $rid); $stmt->execute(); $stmt = $mysqli->prepare($db, "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,
    вот так должно быть
    <?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'];         $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;         }          //print "ID = $rid Name = $red_name<br /> Date = $red_date<br /> Next date = $ndate<br /> Prev = $red_prevacc<br /> Temph = $red_temph<br /> Barack = $red_sps<br /> Виправлення зроблені $statusdate";         //(`name`, `birth`, `sps`, `temph`, `prevacc`, `date`, `next_date`, `status`, `date_status`)         if(isset($red_status)&&$red_status=='Выбыл')         {             mysqli_begin_transaction($db);             try {                 $stmt = mysqli_prepare($db, "INSERT INTO archive SELECT * FROM content WHERE id=?");                 mysqli_stmt_bind_param($stmt, "i", $rid);                 mysqli_stmt_execute($stmt);                  $stmt = mysqli_prepare($db, "DELETE FROM content WHERE id=?");                 mysqli_stmt_bind_param($stmt, "i", $rid);                 mysqli_stmt_execute($stmt);                  mysqli_commit($db);              } catch (Exception $exception) {                 mysqli_rollback($db);                  throw $exception;             }         }     }     else     {         echo "Некорректные данные";     }     mysqli_close($db); } else {     header("Location:".$site_url); }  ?>

    <?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']; $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; } //print "ID = $rid Name = $red_name<br /> Date = $red_date<br /> Next date = $ndate<br /> Prev = $red_prevacc<br /> Temph = $red_temph<br /> Barack = $red_sps<br /> Виправлення зроблені $statusdate"; //(`name`, `birth`, `sps`, `temph`, `prevacc`, `date`, `next_date`, `status`, `date_status`) if(isset($red_status)&&$red_status=='Выбыл') { mysqli_begin_transaction($db); try { $stmt = mysqli_prepare($db, "INSERT INTO archive SELECT * FROM content WHERE id=?"); mysqli_stmt_bind_param($stmt, "i", $rid); mysqli_stmt_execute($stmt); $stmt = mysqli_prepare($db, "DELETE FROM content WHERE id=?"); mysqli_stmt_bind_param($stmt, "i", $rid); mysqli_stmt_execute($stmt); mysqli_commit($db); } catch (Exception $exception) { mysqli_rollback($db); throw $exception; } } } else { echo "Некорректные данные"; } mysqli_close($db); } else { header("Location:".$site_url); } ?>

  • Дмитрий, просто закоментированное $query6 - это собственно редактирование страницы, при усвловии если не выбран статус "выбыл"
  • Dameron, ну мы же проверяем как будет работать статус выбыл? если будет работать вернете.
  • Дмитрий, ну так то да
  • Dameron, дык работает?
  • Дмитрий, ошибок нет, но в таблицу архив не записало данные ((
  • Dameron, так не бывает. а удалило?
    после строки mysqli_commit($db);
    ставим
    echo 'INSERT INTO archive SELECT * FROM content WHERE id='.$rid.';'; echo 'DELETE FROM content WHERE id=.$rid.';';

    echo 'INSERT INTO archive SELECT * FROM content WHERE id='.$rid.';'; echo 'DELETE FROM content WHERE id=.$rid.';';

    после чего заходим в базу и пытаемся руками выполнить эти запросы и проверить работает или нет.

  • Дмитрий, видимо где то с переменной косяк(( я попытался выполнить запрос подставив id строки в phpmyadmin то, все переместило и удалило
  • Dameron, ну по этому я и предложил вывести данные - что бы узнать какой айди передается и проверить именно его
  • Дмитрий,
    Ни echo ни print ничего не выводят :((
    mysqli_commit($db); print "INSERT INTO archive SELECT * FROM content WHERE id='.$rid.';"; print "DELETE FROM content WHERE id='.$rid.';";

    mysqli_commit($db); print "INSERT INTO archive SELECT * FROM content WHERE id='.$rid.';"; print "DELETE FROM content WHERE id='.$rid.';";

    mysqli_commit($db); echo 'INSERT INTO archive SELECT * FROM content WHERE id='.$rid.';'; echo 'DELETE FROM content WHERE id=.$rid.';';

    mysqli_commit($db); echo 'INSERT INTO archive SELECT * FROM content WHERE id='.$rid.';'; echo 'DELETE FROM content WHERE id=.$rid.';';

  • Dameron, ну в том коде что вы привели синтаксическая ошибка - кавычка не закрыта.
  • Дмитрий, там где эхо ? я закрыл, результат такой же
  • Dameron, так давайте проще. телеграмм есть?
  • Есть... @d_thorn
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Максим Павлов Ответ

Для работы с объектами и переносом данных в таблицы в PHP можно воспользоваться различными методами и функциями. Вот некоторые из них:

1. Создание объекта и его методов:

class User {
    public $name;
    public $email;
 
    public function __construct($name, $email) {
        $this->name = $name;
        $this->email = $email;
    }
 
    public function getInfo() {
        return "Name: " . $this->name . ", Email: " . $this->email;
    }
}
 
$user = new User("John Doe", "john.doe@example.com");
echo $user->getInfo();

class User { public $name; public $email; public function __construct($name, $email) { $this->name = $name; $this->email = $email; } public function getInfo() { return "Name: " . $this->name . ", Email: " . $this->email; } } $user = new User("John Doe", "john.doe@example.com"); echo $user->getInfo();

2. Подключение к базе данных и вставка данных в таблицу:

$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
 
$conn = new mysqli($servername, $username, $password, $dbname);
 
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
 
$name = "John Doe";
$email = "john.doe@example.com";
 
$sql = "INSERT INTO users (name, email) VALUES ('$name', '$email')";
 
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn-&gt;error;
}
 
$conn-&gt;close();

$servername = "localhost"; $username = "username"; $password = "password"; $dbname = "myDB"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn-&gt;connect_error) { die("Connection failed: " . $conn-&gt;connect_error); } $name = "John Doe"; $email = "john.doe@example.com"; $sql = "INSERT INTO users (name, email) VALUES ('$name', '$email')"; if ($conn-&gt;query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn-&gt;error; } $conn-&gt;close();

3. Получение данных из таблицы и создание объектов:

$sql = "SELECT * FROM users";
$result = $conn-&gt;query($sql);
 
if ($result-&gt;num_rows &gt; 0) {
    while($row = $result-&gt;fetch_assoc()) {
        $user = new User($row["name"], $row["email"]);
        echo $user-&gt;getInfo() . "<br>";
    }
} else {
    echo "0 results";
}

$sql = "SELECT * FROM users"; $result = $conn-&gt;query($sql); if ($result-&gt;num_rows &gt; 0) { while($row = $result-&gt;fetch_assoc()) { $user = new User($row["name"], $row["email"]); echo $user-&gt;getInfo() . "<br>"; } } else { echo "0 results"; }

Это лишь некоторые из способов работы с объектами и переносом данных в таблицы в PHP. Конечный выбор зависит от конкретной задачи и предпочтений разработчика.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно