PHP + MySQL część II
o MySQL raz jeszcze Zapytania do bazy SELECT – do wyświetlania i wyszukiwania rekordów w wybranej tabeli INSERT – do wstawiania nowych rekordów do bazy UPDATE – do poprawy danych w istniejącym już rekordzie DELETE – do usuwania rekordów
Łączenie się z bazą MySQL z PHP Musimy znać: Host serwera Użytkownika Hasło Nazwę bazy danych localhost root informer informer
Łączenie się z bazą MySQL z PHP mysql_connect(“localhost”,”root”,”informer”); mysql_select_db(“informer”); mysql_connect($mysql_serwer,$mysql_user,$mysql_haslo); mysql_select_db($mysql_baza);
Podstawowe funkcje w PHP do MySQL'a mysql_connect mysql_pconnect mysql_close mysql_query mysql_fetch_array mysql_num_rows mysql_real_escape_string
Przykładowe zapytanie z poziomu PHP $wynik=mysql_query(“SELECT * FROM `studenci`;”); echo(“Jest “.mysql_num_rows($wynik).” studentów w bazie.”); SELECT COUNT(*) FROM `studenci`;
mysql_fetch_array + while $wynik=mysql_query(“SELECT * FROM `studenci`;”); echo(“<p>Lista studentów z bazy:</p><ul>”); while($student = mysql_fetch_array($wynik)){ echo(“<li>”.$student['imie'].” “.$student['nazwisko'].”</li>”); } echo(“</ul>”);
Księga gości Formularz HTML Przetworzenie danych z POST Tabela MySQL Do przechowywania wpisów
SELECT do wypisywania wpisów INSERT INTO do wpisywania Księga gości SELECT do wypisywania wpisów INSERT INTO do wpisywania Wszystko ok? Nie do końca...
XSS (Cross-site scripting) Flood Księga gości - błędy XSS (Cross-site scripting) Flood
System logowania + MySQL START Wyświetl formularz logowania Zalogowany? TAK NIE NIE POST? TAK Uwierzytelnienie NIEPOPRAWNE POPRAWNE Wyświetl stronę dla zalogowanych Wyświetl komunikat o niepoprawnych danych
System logowania + MySQL SELECT `admin` FROM `uzytkownicy` WHERE `login`='...' AND `haslo`='...'; if(mysql_num_rows($wynik)!=0) to OK! $_SESSION['zalogowany']=true; Czy administrator? Wszystko ok? Nie do końca...
Hacking systemu logowania Login: ' OR 1='1 SELECT `admin` FROM `uzytkownicy` WHERE `login`='' OR 1='1' AND `haslo`='' OR 1='1'; Atak MySQL injection
Zabezpieczenie przed MySQL injection mysql_real_escape_string intval sprintf
Przykład bezpiecznego zapytania $imie=mysql_real_escape_string($_POST['imie']); $nazwisko=mysql_real_escape_string($_POST['nazwisko']); $sql=sprintf(“SELECT * FROM `studenci` WHERE `imie`='%s' AND `nazwisko`='%s';”, $imie, $nazwisko); $wynik = mysql_query($sql);
Hashowanie haseł PASSWORD() w MySQL md5()
dzialy (`id`, `tytul`, `tresc`) ustawienia (`opcja`, `wartosc`) CMS Tabele: dzialy (`id`, `tytul`, `tresc`) ustawienia (`opcja`, `wartosc`) uzytkownicy (`login`, `haslo`, `admin`) news (`id`, `tytul`, `tresc`, `kto`, `kiedy`)
Zabezpieczenie naszej pracy TrueBug PHP Obfuscator & Encoder