Zapis ID pola z jednej tabeli do drugiej tabeli

0

Cześć,
temat może nie trafiony ale nic innego nie przyszło mi do głowy. W razie czego proszę o poprawę.

  1. Mam tabelę o nazwie: category. W niej 2 pola - id oraz category_name

  2. Mam tabelę o nazwie: forum. W niej 4 pola - id, id_category, category_forum, description

<form action="pa.php" method="post">
	<span class="pogrub">Tworzenie nowej kategorii i forum</span><br/>
	<label>Nazwa kategorii:</label><br/>
		<input type="text" name="category_name" /><br/>
	<label>Nazwa pierwszego forum:</label><br/>
		<input type="text" name="topic_forum" />	<br/>
	<label>Opis pierwszego forum:</label><br/>
		<input type="text" name="description" />	<br/>	
	<input type="submit" class="submit" name="tworzenie_kategorii"value="Dodaj" /> <br/>				
</form>
					
					
<?php
	error_reporting(E_ALL);
	ini_set('display_errors', 1);
	$category_name = isset($_POST['category_name']) ? $_POST['category_name'] : false;
	$topic_forum = isset($_POST['topic_forum']) ? $_POST['topic_forum'] : false;
	$description = isset($_POST['description']) ? $_POST['description'] : false;


	try{
	    $db = new PDO('mysql:host=localhost;dbname=portal', 'root', '',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
	}catch (PDOException $e){
	    print "Błąd połączenia z bazą danych!: " . $e->getMessage() . "<br/>";
	    die();
	}

	$CategoryID = $db->prepare("SELECT `id` FROM `category` WHERE `category_name` = :topic_forum");
	$CategoryID->bindValue(":topic_forum", $topic_forum, PDO::PARAM_STR);
	if(!$CategoryID->execute()){
		throw new Exception("Wystąpił błąd.!");
	}else{
		$data_CategoryID = $CategoryID->fetch();
		$CategoryID = $data_CategoryID['id'];	
	}		


	if (isset($_POST['tworzenie_kategorii']) )
    {

		$CreateCategory = $db->prepare("INSERT INTO `category` (`category_name`) VALUES(:category_name)" );
		$CreateCategory->bindValue(":category_name", $category_name, PDO::PARAM_STR);
		if(!$CreateCategory->execute()){
			throw new Exception("Wystąpił błąd.!");
		}


		$CreateForum = $db->prepare("INSERT INTO `forum` (`id_category`, `topic_forum`, `description`) VALUES(:id_category, :topic_forum, :description)" );
		$CreateForum->bindValue(":id_category", $data_CategoryID['id'], PDO::PARAM_INT);	
		$CreateForum->bindValue(":topic_forum", $topic_forum, PDO::PARAM_STR);
		$CreateForum->bindValue(":description", $description, PDO::PARAM_STR);
		if(!$CreateForum->execute()){
			throw new Exception("Wystąpił błąd.!");
		} 
		


		echo "<script language='javascript'>alert('Kategoria oraz forum zostały dodane!');</script>";
		var_dump($CreateCategory);	
		var_dump($CreateForum);	
    	
    }
    else
    {
    		
    }
    
?>

Co chcę zrobić? Chcę zapisać poprzez formularz dostępny w skrypcie dane:
-Do tabeli category zapisać wartość pobraną do zmiennej $category_name(to się wykonuje)
-Do tabeli forum zapisać wartość zmiennej $topic_forum oraz $description(to się wykonuje)
-Do tabeli tej co wyżej(w tym samym zapytaniu), czyli forum zapisać wartość pobranego ID z tabeli category i zapisanie go w tabeli o nazwie forum w polu category_id

Chcę w ten sposób powiązać kategorię forum z danym działem forumowym. Wie ktoś jak to naprawić? Całość w zasadzie oscyluje wokół kodu pobierania, który w zasadzie jest ok, lecz nie zapisuje do tabeli danych. Co robię źle?

0

Robisz trochę zamieszania (pomijam, że kod jest małoczytelnie sformatowany). Najpierw wczytujesz id z category, a dopiero pozniej tworzysz nowy rekord, czyli jeśli nie mialeś w category nic o tej nazwie, to jak chcesz pobrac id takowego? A jak stworzysz, to też nie masz nigdzie pobierania wartości id tak stworzonego rekordu. Więc tu masz conajmniej 2 błędy - sformatuj lepiej kod, będzie czytelniej nie będzietrzeba zgadywać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1