Объект и перенос в таблицы?
Есть основная таблица в БД с именем `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
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для работы с объектами и переносом данных в таблицы в 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();
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->error; } $conn->close();
3. Получение данных из таблицы и создание объектов:
$sql = "SELECT * FROM users"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { $user = new User($row["name"], $row["email"]); echo $user->getInfo() . "<br>"; } } else { echo "0 results"; }
Это лишь некоторые из способов работы с объектами и переносом данных в таблицы в PHP. Конечный выбор зависит от конкретной задачи и предпочтений разработчика.