2017-01-21 9 views
1

Это таблица моей категории. В основном есть категория и подкатегория. ParentCategoryId является подкатегорией категории. Например, у меня есть три параметра ParentCategoryID 1, что означает, что это подкатегория под категорией_id 1, поэтому isSubCategory имеет значение 1, которое говорит «да», это подкатегория, а 0 означает, что это категория, поэтому parentCateogryID является нулевым для первых четырех данных, поскольку они категорииВставка данных в таблицу внешних ключей PHP

у меня уже есть функционирование Добавить категорию и теперь я хочу, чтобы иметь Добавить Подкатегория функцию, но очень смущен о том, как я буду делать мой обычный запрос PHP.

<form method="POST"> 
      <?php 
      if(isset($_POST['submit'])){ 
       include 'testdb.php'; 

       $addcategory = $_POST['categoryname']; 
       $parentcategory = $_POST['parentcategoryID']; 

       $query = mysqli_query($con, "SELECT categoryname FROM category WHERE categoryname = '.$addcategory.'"); 

       $insert = mysqli_query($con, "INSERT INTO category (`categoryname`,`ParentCategoryID`,`isSubCategory`) VALUES ('$addcategory','$parentcategory','1')"); 
       if(!$insert){ 
        echo mysqli_error($con); 
       } 
       else{ 
        echo 'Category successfully added!'; 
       } 

      } 
      ?> 

структура enter image description here

всякий раз, когда им пытаются добавить. enter image description here

должен иметь тот же идентификатор, как (смотри рис ниже) enter image description here это должно быть то же самое, так что вставленный подкатегорию показывает в Фудс таблице категорий enter image description here

+0

** ПРЕДУПРЕЖДЕНИЕ **: при использовании 'mysqli' вы должны использовать [параметризованные запросы] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и [' bind_param' ] (http://php.net/manual/en/mysqli-stmt.bind-param.php), чтобы добавить данные пользователя в ваш запрос. ** НЕ используйте ** интерполирование строк или конкатенацию для выполнения этого, потому что вы создали серьезную [SQL-инъекцию] (http://bobby-tables.com/). ** НИКОГДА не ставьте данные '$ _POST' или' $ _GET' непосредственно в запрос, это может быть очень вредно, если кто-то пытается использовать вашу ошибку. – tadman

ответ

1

Внешние ключи не самоссылающиеся в пределах одной таблицы. Если ваши подкатегории были в другой таблице (что я рекомендовал бы - вышеупомянутое решение действительно беспорядочно), то внешний ключ значительно облегчит ваши функции вставки.

В любом случае, если вы только что хотели добавить новую подкатегорию;

$addcategory = $_POST['categoryname']; 
$parentcategory = $_POST['parentcategory']; 

$insert = mysqli_query($con, 
"INSERT INTO category 
(`categoryname`, 
`ParentCategoryID`, 
`isSubCategory`) 
VALUES 
('$addcategory', 
'$parentcategory' 
'1')"); 

Кроме того, рекомендуется использовать подготовленные заявления .. или, по крайней мере, запустить mysqli_escape_string над POST PARAMS вы принимаете в .. оставив их, поскольку они позволили бы мне вставить категорию, как «; Пользователи DROP TABLE ;.

+0

Сценарий выше должен работать, поскольку он был написан с предположением, что parentcategoryid не является внешним ключом. – Eoghan

+0

Я не вижу, для чего нужны имена таблиц. Но если вам нужно обновить существующую таблицу на основе обновления идентификатора категории, вы должны использовать запрос UPDATE; http://www.w3schools.com/php/php_mysql_update.asp – Eoghan