У меня возникли проблемы с архивированием ряда данных. Пользователь вводит текст - имя_сервера - который хранится в базе данных под столбцом "Имя сервера". После нажатия кнопки SQL должен вставить эти данные в новую таблицу - archive_servers - и затем удалить ее из исходной таблицы, однако она удалит только данные и не добавит их в новую таблицу. Ниже мое подключение PHP к моей базе данных, проверкам соединений, операторам SQL для вставки, выбора и удаления и html для формы для ввода.
<?php
$message = '';
$db = new mysqli('localhost', 'root', '', 'isad235');
if($db->connect_error)
{
$message = $db->connect_error;
}
else
{
$message = 'CONNECTION OK';
$sql = "INSERT 'archive_servers' SELECT * FROM 'servers' WHERE 'ServerName' = '".$_POST['name']."';";
echo $sql;
$sql = "DELETE FROM 'servers' WHERE 'ServerName' = '".$_POST['name']."';";
echo $sql;
$result = $db->query($sql);
if ($db->error)
{
echo $message = $db->error;
}
}
?>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="post"/>
Server Name: <input type="text" name="name"/>
<input type="submit" name="submit" value="Archive"/>
</form>
</body>
</html>
Я тестировал соединение, и все в порядке, у меня есть echo'd $ _POST и он возвращает слово "Array".
Я, вероятно, пропустил что-то очень глупое, как персонаж, которого не должно было быть, или какой-то другой небольшой синтаксической ошибки. Я использую NetBeans, и он не дает мне никаких ошибок при запуске проекта. Любая помощь будет очень высоко ценится.
$sql = "INSERT 'archive_servers' SELECT * FROM 'servers' WHERE 'ServerName' = '".$_POST['name']."';";
echo $sql;
$sql_delete = "DELETE FROM 'servers' WHERE 'ServerName' = '".$_POST['name']."';";
echo $sql_delete;
$result = $db->query($sql_delete);
if ($db->error)
{
echo $message = $db->error;
}
С помощью этой части кода вы выполняете запрос только один раз.
Вы должны выполнить SQL два раза (для вставки и удаления).
Это сделает для вас работу:
$sql_insert = "INSERT 'archive_servers' SELECT * FROM 'servers' WHERE 'ServerName' = '".$_POST['name']."';";
echo $sql_insert;
$insert_result = $db->query($sql_insert);
if ($db->error)
{
echo $message = $db->error;
}
$sql_delete = "DELETE FROM 'servers' WHERE 'ServerName' = '".$_POST['name']."';";
echo $sql_delete;
$delete_result = $db->query($sql);
if ($db->error)
{
echo $message = $db->error;
}
if ($insert_result && $delete_result) {
echo 'Everything ok';
}
else {
echo 'Error occured!';
}
Вы не выполняете часть INSERT. Я также рекомендовал бы проверить, что вставка прошла успешно, прежде чем удалять строку либо с помощью запроса (медленнее, но безопаснее), либо просто проверить успех.
$sql = "INSERT 'archive_servers' SELECT * FROM 'servers' WHERE 'ServerName' = '".$_POST['name']."';";
echo $sql;
$result = $db->query($sql);
$sql = "DELETE FROM 'servers' WHERE 'ServerName' = '".$_POST['name']."';";
echo $sql;
$result = $db->query($sql);
Ваша первая ошибка: $ sql = "INSERT INTO archive_servers
SELECT * FROM servers
WHERE ServerName
= '". $ _ POST [' name ']. "';";