@SLPlit

Добавление и редактирование категорий товара создает конфликт почему?

Создаю сайт магазина. Остановился на категориях товара.База подключена и работает в phpmyadmin 7.
При добавлении добавлении товара в категории если стоит редактирование перед добавлением в коде то товар не добавляется в базу данных, а если поменять местами то товар будет добавляться но при редактировании изменив названия или родителя создается новый экземпляр с сохранением старого. Как автоматически удалять старый экземпляр товара или настроить так если не редактируется товар то добавлять как новый? ВОТ место конфликта.
if(isset($_GET['ok']))//редактирования  или добавление 
{
	if($_GET['id'])
	{
		$sql="UPDATE category SET name='$_GET[name]',id_parent='$_GET[id_parent]', num='$_GET[num]' WHERE id='$_GET[id]'";
	}else 
	{
	$sql="INSERT INTO category(name, id_parent, num) VALUES ('$_GET[name]', '$_GET[id_parent]', '$_GET[num]')";
	}
	mysqli_query($link,$sql);
	header("location:category.php");
}

На всякий случай.
ВОт весь код страницы проблема ниже.
<?php
require("../config.php");
//обеспечение безопасности админки
if(!isset($_SESSION['admin']))
{
	//выкидываем на главную и выводим доступ запрещен
	header("location:../index.php");
	die('Доступ запрещен!'); //exit();
}
//кнопка есть реализуем обработчик формы
if(isset($_GET['ok']))//добавление или редактирования
{
	if($_GET['id'])
	{
		$sql="UPDATE category SET name='$_GET[name]',id_parent='$_GET[id_parent]', num='$_GET[num]' WHERE id='$_GET[id]'";
	}else 
	{
	$sql="INSERT INTO category(name, id_parent, num) VALUES ('$_GET[name]', '$_GET[id_parent]', '$_GET[num]')";
	}
	mysqli_query($link,$sql);
	header("location:category.php");
}
//удаление категории
if(isset($_GET['del']))
{
	$sql="DELETE FROM category WHERE id=$_GET[del]";
	mysqli_query($link,$sql);
	$sql="DELETE FROM category WHERE id_parent=$_GET[del]";
	mysqli_query($link,$sql);
	header("location:category.php");
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Админка</title>
</head>

<body>
<a href="index.php">Заказы</a>
<a href="category.php">Категории</a>
<a href="catalog.php">Товары</a>
<a href="../index.php?quit=ok">Выход</a>
<hr>
<h1>Категории</h1>
	<?php
	//редактирование
	if(isset($_GET['edit']))
	{
		$sql="SELECT * FROM category WHERE id=$_GET[edit]";
		$rez = mysqli_query($link,$sql);
		$kategory = mysqli_fetch_assoc($rez); 
	}
	?>
<form>
		Порядок: <input type="number" min="1" name="num" value="<?php echo $kategory['num']; ?>" >
		Название: <input type="text" name="name" value="<?php echo $kategory['name']; ?>">
		Родитель: <select name="id_parent">
		<option value="0">&nbsp;</option>
		<?php
		//выше создали форму 
		//выводи  без родителя =0
		//берем категории для родителей из базы данных
		$sql="SELECT * FROM category WHERE id_parent=0";
		$rez=mysqli_query($link,$sql);
		//цикл в котором формируется массив категории
		while ($cat = mysqli_fetch_assoc($rez))
		{
			if($cat[id]==$kategory[id_parent]) $sl="selected"; else $sl="";
			echo "<option value='$cat[id]' $sl>$cat[name]</option>";
		}
		?>
		</select>
	    <input type="hidden" name="id" value="<?php echo $kategory['id']; 
		?>">
		<input type="submit" name="ok" value="Сохранить">
</form>
	<hr>
	<ul>
		<?php
		/*выводим внизу список раз категории есть*/
		//если дерево с уровнем вложенеости больше 2 - католог->бытовая техника->холодильники->холодильники 1камерные
		//то используют метод рекурсии
		$sql= "SELECT * FROM category WHERE id_parent=0 ORDER BY num";
		$rez=mysqli_query($link,$sql);
		while ($cat = mysqli_fetch_assoc($rez))
		{
			//делаем ссылки на удаление и редактирование
			//onclick - вызывает диалоговое окно для подтверждения удаления
			echo "<li>$cat[name]  <a href='?del=$cat[id]' onclick='return confirm(\"Вы точно хотите удалить эту категорию?\");'>удалить/</a>  <a href='?edit=$cat[id]'>ред.</a></li>";
			$sql2= "SELECT * FROM category WHERE id_parent=$cat[id] ORDER BY num";
			//делаем вложенный список
		    $rez2=mysqli_query($link,$sql2);
			echo '<ul>';
		    while ($cat2 = mysqli_fetch_assoc($rez2))
		      {//делаем ссылки на удаление и редактирование
			     echo "<li>$cat2[name]  <a href='?del=$cat2[id]' onclick='return confirm(\"Вы точно хотите удалить эту категорию?\");'>удалить/</a>  <a href='?edit=$cat2[id]'>ред.</a></li>";
		      }
			echo '</ul>';
		}
		?>
	</ul>
</body>
</html>
  • Вопрос задан
  • 227 просмотров
Решения вопроса 1
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Делается это по другому
switch($_GET['action') {
    case 'add':
        $sql = 'insert...';
        break;
    case 'delete':
        $sql = 'delete....';
        break;
    case 'edit':
        $sql = 'update...';
        break;
}
mysqli_query($sql);

Так же почитать за подготовленные запросы ну и фильтровать данные, те же ид
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sslion
@sslion
Начнём с такого понятия как "целостность данных".
Допустим у тебя есть товар, по нему были какие-то операции/продажи, но вот ты его решил удалить... Лажа получается...
Обычно такие данные не удаляют, потому что они могут участвовать в разной аналитике и их удаление повлияет на конечные итоговые суммы, и история продаж будет неверна.
"Удаление" товара происходит установкой некоего флага, допустим "deleted_at" (дата удаления).
Если тебе физически нужно удалить запись из таблицы (например во время тестирования и отладки приложения), то тебе нужно прописать связи между таблицами для каскадного удаления/обновления связанных данных.
В общем эта тема довольно обширна.

А что касается именно твоего вопроса, то запихивать в один скрипт создание/удаление/изменение записи - это дурной тон, из-за которого возникает множество ошибок (собственно как у тебя и есть)...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы