Witam,
pisze strone w PHP/MySQL, cos a'la domowa biblioteka ebookow. Jest to moja pierwsza strona w tej technologii. Mam dwa problemy, zktorymi nie moge sobie poradzic.
1. Mam formularz edycji dla ksiazki, mam w nim pole "wydawnictwo" oraz "jezyk", sa to klucze obce tych tabel przechowujace odpowiednio nazwe wydawnictwa oraz nazwe jezyka. W skrypcie wczytuje do "selectow" (wydawnictwo i jezyk) rekordy z tabel i ustawiam je tak, aby pokazywaly ten rekord, ktory jest zapisany w tabeli.
Dla wydawnictwa wszystko jest ok, rekody wczytuja sie do selecta i wyswietlany jest rekord jaki zapisany jest w bazie danych dla danej ksiazki, natomiast dla jezyka pobierane sa rekordy z bazy, ale nie jest wyswietlany ten jezyk jaki zostal przypisany do danej ksiazki.
Systuacja podana na obrazku
Link do obrazkaSprobowalem usunac fragment kodu, gdzie pobierane sa z bazy i wyswietlane w "select" wydawnictwa (linie 83-103) i wowczas jezyk wyswietli mi sie poprawnie.
Tutaj skrypt php:
<?php
require_once('conn.php');
//pobranie wydawnictw z tabeli wydawnictwo
$wydawnictwa = "SELECT * FROM wydawnictwo";
{
//pobranie dla kazdego id wydawnictwa jego nazwy
$wydawnictwo[$rowWydawnictwo['wydawnictwoId']] = $rowWydawnictwo['nazwa'];
}
//pobranie jezykow z tabeli jezyk
$jezyki = "SELECT * FROM jezyk";
{
//pobranie dla kazdego id jezyka jego nazwy
$jezyk[$rowJezyk['jezykId']] = $rowJezyk['nazwa'];
}
if($_GET['action'] == "edytuj")
{
$ksiazka = "SELECT * FROM ksiazka WHERE ksiazkaId = '".$_GET['id']."'";
?>
<!-- ---------------------------------- wyswietlenie formularza edycji --------------------------------->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta http-equiv="Creation-date" content="2009-09-14T13:00:53Z">
<meta http-equiv="Content-Language" content="pl">
<meta name="Author" content="Kedzior">
<link href="css/css.css" rel="stylesheet" type="text/css" />
<title>Spis języków</title>
</head>
<body>
<form action="php/commit.php?action=
<?php echo $_GET['action'];?>&type=ksiazka&id=
<?php echo $_GET['id']?>" method="post">
<!-- To jest miejsce na treść dokumentu -->
<table border="1" width="100%" align="center">
<tr>
<td class="table_tytul">Id</td>
<td class="table_opis">
<?php echo $row['ksiazkaId'];?></td>
</tr>
<tr>
<td class="table_tytul">Tytuł</td>
<td class="table_opis">
<input type="text" name="tytul" value="
<?php echo $row['tytul'];?>">
</td>
</tr>
<tr>
<td class="table_tytul">Rok wydania</td>
<td class="table_opis">
<select name="rok"><option value="
<?php echo $row['rokWydania'];?>">
<?php echo $row['rokWydania'];?></option>
<?php
for($year=date("Y"); $year>=1960; $year--) {
?>
<option value="
<?php echo $year;?>">
<?php echo $year;?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td class="table_tytul">Ścieżka do pliku
<td class="table_opis">
<input type="file" name="sciezka" value="
<?php echo $row['sciezkaDoPliku'];?>">
</td>
</tr>
<tr>
<td class="table_tytul">Wydawnictwo</td>
<td class="table_opis">
<select name="wydawnictwo">
<option value="
<?php echo $row['wydawnictwoId'];?>" selected>
<?php echo $wydawnictwo[$row['wydawnictwoId']];?> </option>
<?php
$wydawcy = "SELECT * FROM wydawnictwo";
{
?>
<option value = "
<?php echo $row['wydawnictwoId'];?>">
<?php echo $row['nazwa'];?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td class = "table_tytul">Język</td>
<td class = "table_opis">
<select name="jezyk">
<option value="
<?php echo $row['jezykId'];?>" selected>
<?php echo $jezyk[$row['jezykId']];?> </option>
<?php
$wersjeJezykowe = "SELECT * FROM jezyk";
{
?>
<option value = "
<?php echo $row['jezykId'];?>">
<?php echo $row['nazwa'];?></option>
<?php
}
?>
</select>
</td>
</tr>
<tr>
<td class="table_tytul" colspan="2">
<center>
<input type="submit" name="submit" value="Edytuj"> 
<input type="reset" value="Resetuj">
</center>
</td>
</tr>
</table>
</form>
</body>
</html>
<!-- ------------------------------------------------------------------------------------------->
<?php
}
2. Kaskadowe usowanie rekordow w MySQL.
Przyklad na podstawie mojej bazy danych:
Pierwsza tabela autor( PK autorId, imie, nazwisko)
Druga tabela ksiazka (PK ksiazkaId, tytul,...)
Trzecia tabela ksiazka_autor (PK autorId, PK ksiazkaId)
przykladowe dane (podam same "id"),
autor
1
2
3
ksiazka
4
7
8
ksiazka_autor
4 - 1
4 - 3
7 - 1
8 - 2
8 - 3
I teraz usuwam dla przykladu z tabeli autor, np autora o id=1 i autora o id=3. W tabeli ksiazka_autor uaktualniam te dane wstawiajac w miejsce "id" usuwanego autora wartosc NULL, ale wtedy MySQL podaje mi informacje, ze to pole nie moze byc NULL, probowalem takze wstawic wartosc '0' w miejsce usuwanego "id", ale gdy pojawily sie dwa takie same rekordy w bazie danych MySQL poinformowal mnie, ze w tabeli znajduja sie zduplikowane rekordy. W jednym i w drugim przypadku rekordy nie zostaly usuniete.
Skrypt jakiego uzywam do usuniecia autora:
$autor = "UPDATE ksiazka_autor
SET autorId = NULL
WHERE autorId = '".$_GET['id']."'";
Prosze o pomoc w rozwiazaniu tych dwoch problemow.