[PHP][MySQL] Jak stworzyć prostą bazę i zarządzać nią przez WWW - dodawać rekordy, edytować dane, kasować/uaktualniać wpisy, sortować wyniki, wyszukiwać?
Chcesz stworzyć prosty system do zarządzania rekordami w bazie danych. Ma on tworzyć bazę i tabelę, umożliwić zmianę wpisów, uaktualnianie danych, kasowanie rekordów, a na stronie WWW zwykły użytkownik powinien mieć możliwość przeglądania bazy danych, sortowania wyników, wyszukiwania w bazie.
Przykładowa baza z uczniami będzie prosta, ale jej założenia są takie same, jak w profesjonalnych systemach do zarządzania zawartością baz danych przez strony WWW.
Wykorzystując opisany tutaj przykład możesz z powodzeniem tworzyć bardziej rozbudowane struktury, jak np. system newsów, płatności, księgi gości, własny blog, katalogi stron WWW czy spisy oprogramowania lub pracowników.
Stwórzmy bazę danych o nazwie baza1, a w niej tabelę o nazwie uczniowie. Niech zawiera 6 pól - id (identyfikator) typu INT, imie i nazwisko typu znakowego CHAR (po 100 znaków wystarczy) i dataur (data urodzenia) typu DATE.
Zakładamy bazę
Poniższy kod uruchom tylko raz. Założy on bazę danych i stworzy tabelę, gdzie będą przechowywane rekordy określonego typu. Najlepiej umieść go w pliku zaloz.php. Oczywiście nic się nie stanie gdy uruchomisz go kilka razy - i tak zadziała tylko raz, ponieważ wielokrotne zakładanie tych samych pól nie będzie możliwe.
<?
$baza = mysql_connect("localhost", "user", "password");
if ($baza) {
//utworzenie bazy danych
$wynik = mysql_query("CREATE DATABASE baza1",$baza);
if ($wynik) echo "Baza została stworzona";
//utworzenie tableli
$wynik = mysql_select_db("baza1",$baza);
if ($wynik) {
$wynik = mysql_query("CREATE TABLE uczniowie (
id INT NOT NULL PRIMARY KEY,
imie CHAR(100) NOT NULL,
nazwisko CHAR(100) NOT NULL,
dataur DATE NOT NULL
)", $baza);
if ($wynik) echo "Tabela została stworzona";
}
mysql_close($baza);
}
?>
Dodajemy i uaktualniamy rekordy
To najbardziej pracochłonna część skryptu. Pobranie danych jest czynnością złożoną. Trzeba je chociażby wyczyścić ze zbędnych spacji za pomocą funkcji trim(), następnie trzeba wyeliminować ukośniki poprzedzające znaki specjalne, a te znaki zamienić na tzw. encje, czego dokonują funkcje stripslashes() i htmlspecialchars().
Następnie trzeba sprawdzić czy dane są poprawne, co w naszym przykładzie zrealizowałem wykorzystując wyrażenia regularne. Za pomocą eregi() sprawdzam więc czy id zawiera same liczby, czy w imieniu i nazwisku nie ma cyfr, oraz czy data jest w miarę poprawnie wpisana.
Do zarządzania bazą danych stworzyłem trzy formularze. Jeden służy do edytowania i wprowadzania danych, a dwa pozostałe umożliwiają kasowanie lub edycję rekordu o podanum numerze id.
Jeżeli kasujemy rekord, to oprócz skasowania go w bazie danych, warto dla bezpieczeństwa pokazać go w oknie edycji, aby można było go przywrócić gdy okaże się, że jednak nie powinien zostać skasowany. Tego problemu nie ma z poprawianiem rekordu, ponieważ cały czas jest on obecny w bazie.
Na końcu skryptu dodałem jeszcze banalną procedurę pokazywania, które rekordy są już w bazie danych. Będzie to pomocne przy wprowadzaniu rekordów, zanim nabierzesz wprawy w posługowaniu się skryptem lub przy modyfikacji działania programu.
Poniższy kod umieść w pliku admin.php. Aby nikt nie miał do niego dostępu umieść go w katalogu wymagającym podania hasła. Przykłady stosowania haseł znajdziesz w innych poradach.
<?
$nhost="localhost";
$nbaza="baza1";
$nuser="user";
$npassword="password";
$skasuj = trim($_GET["skasuj"]);
$popraw = trim($_GET["popraw"]);
$id = trim($_GET["id"]);
$imie = trim($_GET["imie"]);
$nazwisko = trim($_GET["nazwisko"]);
$data = trim($_GET["data"]);
if ((($skasuj<>"")or($popraw<>""))and($id=="")) {
// ### pobranie rekordu z tabeli oraz kasowanie
if ($popraw<>"") $nr=$popraw; else $nr=$skasuj;
$baza = mysql_connect($nhost, $nuser, $npassword);
if ($baza) {
$wynik = mysql_select_db($nbaza,$baza);
if ($wynik) {
$wynik = mysql_query("SELECT * FROM uczniowie WHERE id=$nr", $baza);
if (($wynik)and(mysql_num_rows($wynik)>0)) {
if ($skasuj<>"") {
mysql_query("DELETE FROM uczniowie WHERE id=$skasuj", $baza);
echo "<b>Rekord skasowany:</b>";
}
$pole=mysql_fetch_array($wynik);
$id = $pole["id"];
$imie = $pole["imie"];
$nazwisko = $pole["nazwisko"];
$data = $pole["dataur"];
}
}
mysql_close($baza);
}
} else if ($id<>"") {
// ### dopisanie lub uaktualnienie tabeli
if (!eregi("^[0-9]+$",$id)) echo "<br><b>błąd w polu ID:</b>";
else if (!eregi("^[^0-9]+$",$imie)) echo "<br><b>błąd w polu imię</b>";
else if (!eregi("^[^0-9]+$",$nazwisko))
echo "<br><b>błąd w polu nazwisko</b>";
else if (!eregi(
"^(19|20)[0-9][0-9]-([0][1-9]|[1][0-2])-([0-2][1-9]|10|20|30|31)$",
$data)) echo "<br><b>błąd w polu data</b>";
else {
$baza = mysql_connect($nhost, $nuser, $npassword);
if ($baza) {
$wynik = mysql_select_db($nbaza,$baza);
if ($wynik) {
if ($popraw=="") {
$wynik = mysql_query("
INSERT INTO uczniowie VALUES($id,'$imie','$nazwisko','$data')
", $baza);
if ($wynik) {
echo "<br><b>Rekord został dodany</b>";
$id=""; $imie=""; $nazwisko=""; $data="";
}
} else {
$wynik = mysql_query("
UPDATE uczniowie SET id=$id, imie='$imie',
nazwisko='$nazwisko', dataur='$data' where id=$popraw
", $baza);
if ($wynik) {
echo "<br><b>Rekord został uaktualniony</b>"; $popraw="";
$id=""; $imie=""; $nazwisko=""; $data="";
}
}
}
mysql_close($baza);
}
}
}
// ### napis na guziku formularza
if ($popraw<>"") $guzik="Uaktualnij";
else if ($skasuj<>"") $guzik="Przywróć";
else { $guzik="Dodaj"; };
// ### formularze
$fimie = htmlspecialchars(stripslashes($imie));
$fnazwisko = htmlspecialchars(stripslashes($nazwisko));
$formularze = <<<KONIEC
<table border=0><tr><td valign=top>
<form action="admin.php" method="get">
<input type="hidden" name="popraw" value="$popraw">
<table><tr>
<td valign=top>ID:</td>
<td><input type="text" name="id" value="$id"></td>
</tr><tr>
<td valign=top>imię:</td>
<td><input type="text" name="imie" value="$fimie"></td>
</tr><tr>
<td valign=top>nazwisko:</td>
<td><input type="text" name="nazwisko" value="$fnazwisko"></td>
</tr><tr>
<td valign=top>dataur (rrrr-mm-dd):</td>
<td><input type="text" name="data" value="$data"></td>
</tr><tr>
<td> </td>
<td><input type="submit" value=" $guzik "></td>
</tr></table>
</form>
</td><td valign=top>
<form action="admin.php" method="get">
<table bgcolor=#ccccff><tr>
<td valign=top>ID:</td>
<td><input type="text" name="popraw"></td>
</tr><tr>
<td> </td>
<td><input type="submit" value=" uaktualnij "></td>
</tr></table>
</form>
<form action="admin.php" method="get">
<table bgcolor=#ffcccc><tr>
<td valign=top>ID:</td>
<td><input type="text" name="skasuj"></td>
</tr><tr>
<td> </td>
<td><input type="submit" value=" skasuj "></td>
</tr></table>
</form>
</td></tr></table>
KONIEC;
echo $formularze;
// ### pomocniczy fragment, wypisuje dane z bazy na ekran
echo "<hr>";
$baza = mysql_connect($nhost, $nuser, $npassword);
mysql_select_db($nbaza,$baza);
$wynik = mysql_query("SELECT * FROM uczniowie",$baza);
mysql_close($baza);
$wierszy = mysql_num_rows($wynik);
$pol = mysql_num_fields($wynik);
echo "<table cellpadding=0 cellspacing=5><tr>
<td><b>id</b></td><td><b>imię</b></td><td><b>nazwisko</b></td>
<td><b>data</b></td></tr>";
for ($i=0;$i<$wierszy;$i++) {
$wiersz = mysql_fetch_row($wynik);
echo "<tr>";
for ($j=0;$j<$pol;$j++) echo "<td>".$wiersz[$j]."</td>";
echo "</tr>";
}
echo "</table>";
?>
Przeglądanie, sortowanie, wyszukiwanie
Ta część będzie dostępna dla każdego użytkownika. Będą oni mogli przeglądać bazę posortowaną według dowolnego pola lub wyszukiwać w niej rekordy spełniające określone kryteria. Wyszukiwanie nie jest specjalnie skomplikowane, a w osobnych poradach możesz o nim poczytać szczegółowo.
Prosty formularz pozwala wpisywać słowa i wybierać kolumnę, która będzie przeszukiwana. Można też ustalić jak będą sortowane wyniki - rosnąco lub malejąco. Umieść skrypt na stronie index.php:
<form action="index.php" method="get">
<input type="text" name="x">
<select name="p">
<option>id</option>
<option value="1">imię</option>
<option value="2">nazwisko</option>
<option value="3">data urodzenia</option>
</select>
<select name="o">
<option>rosnąco</option>
<option value="1">malejąco</option>
</select>
<input type="submit" value=" szukaj ">
</form>
<?
$p=trim($_GET["p"]);
$o=trim($_GET["o"]);
$x=trim($_GET["x"]);
$pole="id";
if ($p=="1") $pole="imie";
if ($p=="2") $pole="nazwisko";
if ($p=="3") $pole="dataur";
$order="asc";
if ($o=="1") $order="desc";
$szukaj="";
if ($x<>"") $szukaj="where $pole LIKE \"%$x%\"";
$baza=mysql_connect("localhost", "user", "password");
mysql_select_db("baza1",$baza);
$wynik=mysql_query(
"SELECT * FROM uczniowie $szukaj order by $pole $order",$baza);
mysql_close($baza);
$wierszy = mysql_num_rows($wynik);
$pol = mysql_num_fields($wynik);
echo "<table cellpadding=0 cellspacing=5><tr>
<td><b>id</b></td><td><b>imię</b></td><td><b>nazwisko</b></td>
<td><b>data</b></td></tr>";
for ($i=0;$i<$wierszy;$i++) {
$wiersz = mysql_fetch_row($wynik);
echo "<tr>";
for ($j=0;$j<$pol;$j++) echo "<td>".$wiersz[$j]."</td>";
echo "</tr>";
}
echo "</table>";
?>
OK. To już w zasadzie wszystko, co jest niezbędne aby można było sprawnie zarządzać bazą zawierającą proste dane o uczniach lub pracownikach. W prosty sposób możesz dodać kolejne pola, zmodyfikować działanie skryptu lub przebudować go według indywidualnych potrzeb.