PHP i połączenie z bazą danych

PHP i połączenie z bazą danych

Integracja PHP z PgSQL

W poniższych ćwiczeniach będą wykorzystywane tabele z bazy Kwiaciarnia, które powinny być wcześniej utworzone w indywidualnej bazie użytkownika, przy pomocy podanego skryptu SQL.

Wykorzystywana baza danych to kwiaciarnia:

Uwaga, pobrane pliki można zdekompresować przez: gzip -d plik.gz lub aplikację okienkową.

Gdyby była potrzeba przekonwertowania kodowania znaków:
iconv -f ISO-8859-2 -t UTF-8 kwiaciarnia2dane.sql > kwiaciarnia2dane-utf.sql

Komunikacja z PgSQL

Wczytać dane do bazy:

  • Połączenie z PostgreSQL z linii poleceń: psql -d baza -U student
  • Następnie:
    • lista baz: \l
    • lista tabel: \dt
    • wczytanie plików: \i
      • \i kwiaciarnia2.sql
      • \i kwiaciarnia2dane.sql
    • wyjście: \q

Uwaga odnośnie hasła:

  • Upewnij się, że pamiętasz hasło do swojej bazy danych → być może jest ono takie samo jak do konta na serwerze.
  • Jeżeli zmieniałeś hasło do konta na serwerze i nie pamiętasz hasła do bazy danych to spróbuj wykonać następujące kroki:
    1. Uruchom program psql wpisując jego nazwę w terminalu i podając nazwę bazy danych i nazwę użytkownika:
      psql dbname username
    2. Najczęściej dbname i username są takie same jak login na serwerze.
  • Jeżeli program nie poprosił o hasło, spróbuj wykonać następujące czynności, wpisując je jako polecenia programu:
    \conninfo
  • Jeżeli program zwróci coś w stylu
    You are connected to database "kk" as user "kk" via socket in "/var/run/postgresql" at port "5432".

    to możesz zmienić swoje hasło wpisując

    \password

    i podając nowe.

Ćwiczenie

  • Przy pomocy poniższego programu proszę sprawdzić czy jest połączenie z bazą.
  • Proszę przy pomocy tego uniwersalnego formularza zadać jakieś zapytanie o dane w bazie danych.
uniwersalny.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
	<html><head>
	<title>To jest formularz w PHP do czytania z PqSQL</title>
	</head><body>
 
    <h1>Prosze wprowadzic parametry bazy i zapytania</h1>
    <p><center>
    <form method="post" action="<?= $_SERVER['PHP_SELF'] ?>">
	uzytkownik:	
	<input type="text" name="suser" size="10" value="<?= $suser ?>">&nbsp;
	serwer:	
	<input type="text" name="sserver" size="15" value="localhost"><br>
	baza:
	<input type="text" name="sdbase" size="10" value="<?= $sdbase ?>">&nbsp;
	haslo:
	<input type="password" name="spass" size="10" value="<?= $spass ?>">&nbsp;
 
	<br>zapytanie:	
	<br><textarea name="squery" rows="1" cols="60" wrap="physical">
        SELECT version();</textarea><br>
	<br><input type="submit" value="ZAPYTAJ">
	</center></p>
 
	<?php
 
if (isset($_POST['squery'])) {
      if (!isset($_POST['suser']) ) {
	      echo "<hr><h1>Brak poprzedniego zapytania</h1>";
	      echo "<hr><a href=\"index.php\">
		               Powrot do strony glownej</a>";
	      exit;
      }    
 
    $sserver = $_POST['sserver'];
    $suser = $_POST['suser'];
    $sdbase = $_POST['sdbase'];
    $spass = $_POST['spass'];
 
    if (!isset($_POST['sdbase']) ) {    
        $db = "host=$sserver port=5432 user=$suser";
    }
    else {
        $db = "host=$sserver port=5432 user=$suser dbname=$sdbase";
    }
 
    $conn = pg_connect ("$db"." password=$spass");
    if (!$conn) {
	    echo "<hr>An error occured! <br/>\$db: ($db)\n";
	    echo pg_last_error($conn);
	    exit;
    }
 
    $today = date ("G:i:s, j-n-Y");
    echo "<hr><h1><b>Wynik zapytania z $today</h1>";
    echo "<h2>Baza: \"<i>$db</i>\"</h2>";
 
    $query = $_POST['squery'];
    $result = pg_query ($conn, "$query");
    if (!$result) {
	    echo "An error occured.\n";
	    echo pg_result_error($result);
	    exit;
    }
    echo "<h2>Zapytanie: \"<i>$query</i>\"</h2>";
 
    echo "<h3>Wynik zapytania w tabeli z nazwami i typami pol</h3>";
    echo "<p><table><tbody>";
 
    $fie = pg_num_fields($result);
    echo "<tr><td><b>Rekord</b>";
    for ($i=0; $i < $fie; $i++) {
	    $r = pg_field_name ($result,$i);
	    $t = pg_field_type ($result,$i);
	    echo "<td> <b>$r</b> (<i>$t</i>)";
    }
    $num = pg_num_rows($result);
    for ($i=0; $i < $num; $i++) {
	    echo "<tr><td>$i";
	    $r = pg_fetch_row($result, $i);
	        for ($j=0; $j < count($r); $j++) {
		                echo "<td> $r[$j]";
		}
	    echo "</tr>";
    }
    echo "</tbody></table><hr>";
 
    pg_free_result($result);
    pg_close($conn);
    echo "<hr><a href=\"index.php\">
	         Powrot do strony glownej</a>";
}
?>
</body></html>

Czytanie danych z bazy

  • Proszę uzupełnić poniższy program o dane do połączenia z bazą, po czym uruchomić, by wyświetlić zawartość tabeli Klienci.
  • Proszę przeanalizować, ew. sprawdzić w manualu jakie są dostępne funkcje wspomagające przetwarzanie danych pobranych z bazy.
spis_klientow.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
	<html><head>
	<meta charset="UTF-8">
	<title>To jestskrypt w PHP do czytania z PqSQL</title>
	</head><body>
 
	<?php
 
$pass=''; # tu wstawic haslo
$uname=''; # tu wstawic nazwe uzytkownika
$dbname=''; # tu wstawic nazwe bazy
 
if (!isset($pass)) {
    echo "<br><b>Ustaw lokalnie haslo w pliku PHP!</b>";
    exit;
}
$db = "host=127.0.0.1 user=$uname dbname=$dbname";
$conn = pg_connect ("$db"." password=$pass");
if (!$conn) {
    echo "<hr>An error occured!, (\$db=$db)\n";
	    echo pg_result_error($conn);
	    exit;
    }
 
$today = date ("G:i:s, j-n-Y");
echo "<hr><h1><b>Wynik zapytania z $today</h1>\n";
echo "<h2>Baza: \"<i>$db</i>\"</h2>\n";
 
$query = "select * from klienci;";
$result = pg_query ($conn, "$query");
if (!$result) {
    echo "An error occured.\n";
    echo pg_result_error($result);
    exit;
}
echo "<h2>Zapytanie: \"<i>$query</i>\"</h2>\n";
 
echo "<h3>Lista klientów</h3>\n\n";
echo "<table><tbody>\n";
 
$fie = pg_num_fields($result);
echo "<tr><td><b>Rekord</b>\n";
for ($i=0; $i < $fie; $i++) {
    $r = pg_field_name ($result,$i);
    $t = pg_field_type ($result,$i);
    echo "<td> <b>$r</b> (<i>$t</i>)</b>";
}
$num = pg_num_rows($result);
for ($i=0; $i < $num; $i++) {
    echo "<tr><td>$i";
	    $r = pg_fetch_row($result, $i);
	        for ($j=0; $j < count($r); $j++) {
		                echo "<td> $r[$j]";
		}
	    echo "</tr>\n";
}
echo "</tbody></table>\n";
 
pg_free_result($result);
pg_close($conn);
?>

Modyfikacja danych

  • W programie wyświetlającym dane klientów, proszę zmienić zapytanie tak by wyświetlać jedynie id klienta, imię i nazwisko oraz adres e-mail.
  • W tabeli proszę dodać kolumnę, w której będzie link do strony:
    zamowienia.php?idklienta=$idklienta
    gdzie $idklienta zostanie zastąpione odpowiednim id klienta w każdym wierszu.
  • Proszę skopiować stronę spis_klientow.php i nazwać ją zamowienia.php, a następnie tak ją zmodyfikować, aby dla odpowiedniego id klienta przesłanego metodą GET (po kliknięciu linka z parametrem) wyświetlane były szczegóły zamówień tylko tego klienta.
  • Następnie proszę dodać formularz z możliwością dodania nowego zamówienia dla tego klienta.
php_i_polaczenie_z_baza_danych_2017.txt · ostatnio zmienione: 2017/04/08 12:54 przez krzysiek