BAZA WIEDZY
KURSY
Bazy danych w PHP
Kurs AdvancedAJAX
Kurs ASP
Kurs ASP.NET
Kurs C++
Kurs CSS
Kurs HTML
Kurs HTML drugi
Kurs JavaScript
Kurs MySQL
Kurs PHP
Kurs RSS
Kurs XHTML
Obiekty DOM
MANUALE
CSS1 - W3C
DOM - w budowie
PHP 2005
PHP 2006
Wyrażenia regularne
SHOUTBOX
STAT
Online: 23 | UU: 433
[PHP/MYSQL] Operacje na formularzach z wykorzystaniem bazy MySQL
20 marzec 2007

Poniżej przedstawiony został przykład wykorzystywania bazy danych mysql do zapisywania i odczytywania danych pobranych z formularza.
Skrypt składa się z kilku elementów:

  • zainicjowanie kilku zmiennych
  • połączenie z bazą
  • umieszczenie w bazie nowego wiersza
  • pobranie danych z bazy
  • wyświetlenie danych na stronie
  • wykorzystanie formularzy
Kod: mysql

CREATE TABLE `tabela_testowa` (
`nazwa_kolumny` VARCHAR( 20 ) NOT NULL
)

W powyższym przykładzie stworzona została nowa tabela o nazwie "tabela_testowa" z kolumną o nazwie "nazwa_kolumny" typu VARCHAR, długości 20 znaków…

Poniżej zawartość przykładowego pliku index.php do zbierania, umieszczania i wyświetlania informacji.

Kod: php

<?php

// informacje na temat bazy
  $host = ‘localhost’// nazwa lub numer IP hosta
  $user = ‘username’// nazwa użytkownika
  $password = ‘password’; // hasło do bazy
  $dbName = ‘databasename’// nazwa bazy danych
// te dane zależne są od Twojej bazy i muszą zostać podane
// przykładowo może to wyglądać w następujący sposób
  $host = ‘0.0.0.0′
  $user = ‘janek’;
  $password = ‘jakies_haslo’;
  $dbName = ‘moja_baza’;
 
// połączenie i wybór bazy danych
  $polacz = mysql_connect($host, $user, $password) or die(mysql_error());
  $db = mysql_select_db($dbName, $polacz) or die(mysql_error());
?>

Polecienie mysql_connect() z argumentami zapisanymi w zmiennych $host, $user, $password. Przypisujemy do zmiennej $polacz. W przypadku braku połączenia wyświetlony zostanie błąd. Do zmiennej $db przypisujemy funkcję mysql_select_db(), która wybiera naszą bazę i wykonuje połączenie zapisane w zmiennej $połacz. Gdy połączenie jest nieudane polecenie  die(mysql_error()) wyrzuca błąd.

Kod: php

<?php

// wprowadzanie nowego wpisu po wciśnięciu przycisku submit
   if (isset($_POST[‘jakies_pole’]) && trim($_POST[‘jakies_pole’]) != ) {
      $jakies_pole = $_POST[‘jakies_pole’];
// wstawianie wartości pobranej metodą POST do tabeli w naszej bazie
      $sql = "INSERT into tabela_testowa (nazwa_kolumny) VALUES (’$jakies_pole’)";
      $rezultat = mysql_query($sql, $polacz) or die(mysql_error());
    } // koniec pobierania wartości pola o nazwie "jakies_pole"
?>

Ten kawałek sprawdza czy pobrana została metodą "POST" wartość pola o nazwie "jakies_pole" i czy wartość ta po zastosowaniu filtru "trim" jest różna od niczego. Jeżeli oba powyższe warunki są spełnione do zmiennej $jakies_pole przypisujemy wartość pola o nazwie "jakies_pole". Nie do końca rozumiesz co znaczy wartość pola o nazwie "jakies_pole" - taka wartość kryje się w formularzu w polu <input name="jakies_pole" />. Formularz jednak przeanalizujemy w dalszej części kodu.  Do zmiennej $sql przypisujemy treść polecenia mysql. Po naszemu brzmi to tak: umieść w tabeli "tabela_testowa" w kolumnie "nazwa_kolumny" wartości: wartość odebrana od zmiennej $jakies_pole. Natępnie do zmiennej $rezultat przypisywana jest wartość zapytania mysql_query(). Funkcja mysql_query() jako argumenty pobiera zmienną $sql i $polacz. Jęsli połączenie się nie uda następuje błąd.

Kod: php

<?php
// pobierabie wartości z tabeli "tabela_testowa"
   $sql = "SELECT nazwa_kolumny FROM tabela_testowa";
   $rezultat = mysql_query($sql, $polacz) or die(mysql_error());
   
// wyświetlanie rezultatu na ekranie
   while ($lista = mysql_fetch_array($rezultat)) {
      echo $lista[‘nazwa_kolumny’]. "<br />";
   } // koniec while
?>

Najpierw do zmiennej $sql przypisywane jest zapytanie mysql: wybierz wartości z kolumny "nazwa_kolumny" z tabeli "tabela_testowa". Następnie do zmiennej $rezultat przypisywana jest wartość zapytania mysql_query(). Funkcja mysql_query() jako argumenty pobiera zmienną $sql i $polacz lub wyrzuca błąd w przypadku nieudanego połączenia. Następnie pętla while "mówi" - dopóki zmienna tablicowa $lista będzie wypełniana wartościami z kolumny "nazwa_kolumny" wyświetlaj na ekranie poszczególne wartości tej kolumny.

Kod: php

<?php     
// wyświetlenie formularza do wprowadzania danych
  echo <<<FORMULARZ
<br /> Dodaj wpis: <br />
<form action = "index.php" method = "post">
   <input type = "text" name = "jakies_pole" maxlength="20" size = "10">
   <input type = "submit" value = "Dodaj wpis">
</form>
FORMULARZ;
?>

To formularz z polem o nazwie "jakies_pole" i przyciskiem submit którego kliknięcie powoduje przeładowanie pliku index.php i wykonanie wszystkich instrukcji zapisanych w tym pliku. Mimo, że formularz znajduje się na końcu kodu, to właśnie od niego zaczyna się cała akcja. Po wciśnięciu przycisku submit następuje przeładowanie pliku index.php. Pole o nazwie "jakies_pole" przechowuje wówczas wartość, która równa jest temu co w to pole wpisaliśmy przed wysłaniem formularza. Żeby odebrać tę wartość przeładowany plik index.php pobiera metodą POST wartość pola "jakies_pole". Przypisuje tę wartość do zmiennej. Wartość zmiennej umieszcza poleceniem INSERT INTO w bazie. Następnie zapytanie SELECT pobiera tą wartość do zmiennej. Mając tę zmienną poleciem echo możemy ją wyświetlić.

W powyższym przykładzie w jednym pliku umieszczony został cały cykl od wpisania wartości w formularz do wyświetlenia ich z powrotem na ekranie. W praktyce polecenia rozdzielane są na wiele plików. W jednych zbieramy informacje z formularzy (np. formularze zamówień) i umieszczamy je w bazie. W innych wykorzystując te dane prezentujemy je w postaci np. tabeli zamówień. 

Zrozumienie i opanowanie sztuki wykorzystywania baz danych i formularzy daje bardzo wiele możliwości. Większość, jeżeli nie wszystkie nowoczesne strony internetowe opieają się na takich mechanizmach.

Poniżej zamieszczam cały kod do wykorzystania na stronie.

Kod: mysql

   
CREATE TABLE `tabela_testowa` (
`nazwa_kolumny` VARCHAR( 20 ) NOT NULL
)

Kod: php

 
<?php

// informacje na temat bazy
  $host = ‘localhost’;
  $user = ‘username’;
  $password = ‘password’;
  $dbName = ‘databasename’;

// polaczenie i wybór bazy danych
  $polacz = mysql_connect($host, $user, $password) or die(mysql_error());
  $db = mysql_select_db($dbName, $polacz) or die(mysql_error());

// wprowadzanie do bazy nowego wpisu po wciśnięciu przycisku submit
   if (isset($_POST[‘jakies_pole’]) && trim($_POST[‘jakies_pole’]) != ) {
      $jakies_pole = $_POST[‘jakies_pole’];
      $sql = "INSERT into tabela_testowa (nazwa_kolumny) VALUES (’$jakies_pole’)";
      $rezultat = mysql_query($sql, $polacz) or die(mysql_error());
    }

// pobierabie wartości z tabeli "tabela_testowa"
   $sql = "SELECT nazwa_kolumny FROM tabela_testowa";
   $rezultat = mysql_query($sql, $polacz) or die(mysql_error());
   while ($lista = mysql_fetch_array($rezultat)) {
      echo $lista[‘nazwa_kolumny’]. "<br />";
   }
 

// formularz 
echo <<<FORMULARZ
<br /> Dodaj wpis: <br />
<form action = "index.php" method = "post">
   <input type = "text" name = "jakies_pole" maxlength="20" size = "10">
   <input type = "submit" value = "Dodaj wpis">
</form>
FORMULARZ;
?>

Autor: Adam Suchowski

Dodaj komentarz









Komentarze
22 odpowiedzi
michal_w
1 kwiecień 2011, godz. 6:48

Gratulacje za artykuł prosto, jasno, przystępnie, kompleksowo i to o co mi chodziło. Dla autora stawiam piwo!

EryKrak
5 grudzień 2010, godz. 8:17

Jak do bazy danych w PostNuke dodać dodatkowy złożony z wielu pól formularz rejestracyjny, który byłby przetwarzany w obrębie mojego panelu administracyjnego (nowy modem)? Jak byś mi mógł pomóc zapłacę.

Miku
14 lipiec 2010, godz. 4:16

Miku
14 lipiec 2010, godz. 4:15

ups jak tu dodać tago “" ??

Miku
14 lipiec 2010, godz. 4:15

trochę poskakałem po stronach i….
trochę prościej jak dla mnie
Nazwa użytkownika:

Imię i nazwisko:

Miku
13 lipiec 2010, godz. 9:00

Bez obsługi sesji nie polecam tego sposobu ;P chyba wicie dlaczego ;)

jonio
4 maj 2010, godz. 12:45

chce wyswietlic email np wp jak?

ee
25 kwiecień 2010, godz. 4:24

eeee

28 luty 2010, godz. 1:31

Oczywiście na SQL Injection podatne…

ANOINIM!!!!!xDxDxD
27 luty 2010, godz. 8:25

Tego szukalem!

Darek
3 luty 2009, godz. 2:59

Chyba bardziej już nie można było tego zamotać … tragedia gościu …

jasiek83
18 kwiecień 2008, godz. 5:18

w mojej bazie w tabeli pracownicy jest kolumna imie… i jak próbuję dostosować powyższy skrypt do swoich potrzeb to mi wywala błędy:
Notice: Use of undefined constant ‘jakies_pole’ - assumed ‘‘jakies_pole’’ in e:\programy\easyphp1-8\www\2.php on line 22

Notice: Use of undefined constant ‘imie’ - assumed ‘‘imie’’ in e:\programy\easyphp1-8\www\2.php on line 32

Notice: Undefined index: ‘imie’ in e:\programy\easyphp1-8\www\2.php on line 32

Anonim
30 listopad 2007, godz. 2:51

myśle że najlepiej sprawdzić czy dane takie już zostały wprowadzone albo użyć header(…location = …) do przeniesienia na inną stronę.

Agusia
29 listopad 2007, godz. 4:26

ok, wszystko działa, jest ok … Ale mam pytanie…

Gdy odświeżam stronkę to mimo tego, że pole tekstowe jest puste wpisują się do bazy ostatnio wpisane dane ! Jak temu zapobiec???

adamt
16 listopad 2007, godz. 8:38

musisz przeanalizować miejsca wszędzie tam gdzie jest słowo ‘jakieś_pole’. Jak już to zrobisz zobaczysz jak łatwo można dodać dodatkowe pole:)

bartek
16 listopad 2007, godz. 12:24

właśnie udało mi się to zrobić i działa poprawnie, ale chciałbym to trochę zmodyfikować, tzn. dodać więcej pól w formularzu do wypełnienia i wyświetlanie zrobić na zasadzie tabeli :) takie zgłoszenie na zawody, imię nazwisko, imię partnerki, nazwisko, kategoria do wyboru może być check box i miasto z klubem razem i to ma mi się wyświetlić w tabeli, trzeba pamiętać, że jest dużo kategorii, bardzo bym chciał to jakoś zrobić i proszę o pomoc.

Anonim
6 listopad 2007, godz. 9:57

kurcze formularz sam zmienia znaki ale mam nadzieje ze się domyślacie o który znak mi chodzi

Anonim
6 listopad 2007, godz. 9:56

zamiast
$host = ‘localhost’;
należy wpisać
$host = ‘localhost’;
i wszędzie tam gdzie są znaki ‘ ’ zmienić na ‘

Anonim
30 lipiec 2007, godz. 4:01

jgjgh

adam
6 kwiecień 2007, godz. 2:40

No właśnie zapraszamy serdecznie :)

adamt
5 kwiecień 2007, godz. 11:06

cs mosh

W razie pytań proszę o rejestrację na forum i utworzenie nowego tematu

Postaramy się pomóc w przypadku jakichkolwiek problemów

5 kwiecień 2007, godz. 12:35

super…
ale przydałoby sie troszkę więcej info …

 
 
Copyright © 2006-2011 egrafik.pl | Kontakt | Reklama | Projekty domów
jocker