reklama - zainteresowany?

Head First PHP & MySQL. Edycja polska - Helion

Head First PHP & MySQL. Edycja polska
Autor: Lynn Beighley, Michael Morrison
Tytuł oryginału: Head First PHP & MySQL
Tłumaczenie: Tomasz Walczak
ISBN: 978-83-246-2113-2
stron: 800, Format: 200x230, okładka: miękka
Data wydania: 2010-03-19
Księgarnia: Helion

Cena książki: 99,00 zł

Dodaj do koszyka Head First PHP & MySQL. Edycja polska

Tagi: Bazy danych | MySQL - Programowanie | PHP - Programowanie | Programowanie

  • Odkryj tajniki tworzenia dynamicznych witryn opartych na bazach danych
  • Uniknij kompromitujących wpadek przy korzystaniu z formularzy
  • Wczytaj wszystkie kluczowe elementy składni prosto do swego mózgu
  • Zainstaluj kod PHP i MySQL
  • Sprawdź swą wiedzę na temat skryptów, wykonując dziesiątki ćwiczeń

PHP wraz z MySQL stanowią najpopularniejszy zespół, służący do szybkiego tworzenia aplikacji internetowych o różnym stopniu złożoności. Dzięki dużym możliwościom, wydajności oraz optymalnemu podejściu do wielu zagadnień tworzą prawdopodobnie najpopularniejszą platformę do wprowadzania atrakcyjnych rozwiązań. Na temat wykorzystania możliwości PHP i MySQL napisano już wiele książek, jednak ta jest wyjątkowa — należy do popularnej i przyjaznej Czytelnikowi serii Head First!

"Head First PHP & MySQL. Edycja polska" nie jest kolejnym trudnym i nudnym podręcznikiem do nauki PHP i MySQL. Autorzy wykorzystują tu innowacyjne oraz niezwykle skuteczne techniki przyswajania wiedzy szybko i bezboleśnie. Z pomocą licznych ilustracji i ciekawych skojarzeń nauczą Cię, jak stosować PHP wraz z MySQL w Twojej codziennej pracy. Dzięki temu bez najmniejszych problemów przygotujesz formularz, przetworzysz dane wprowadzone przez użytkownika, a następnie zapiszesz je w bazie MySQL. Ponadto zostaniesz wtajemniczony w szczegóły języka PHP oraz SQL. Zapoznasz się z zagrożeniami oraz dowiesz się, jak chronić swoją aplikację przed atakami z zewnątrz. To wszystko sprawi, że pewnym krokiem wejdziesz w świat profesjonalnych aplikacji internetowych!

  • Tworzenie i obsługa formularzy
  • Zastosowanie zmiennej $_POST
  • Wysyłanie wiadomości e-mail z poziomu PHP
  • Wykonywanie zapytań SQL
  • Pobieranie i wykorzystywanie danych z MySQL w PHP
  • Elementarz języka PHP
  • Przesyłanie plików
  • Bezpieczeństwo danych w PHP
  • Zastosowanie sesji oraz ciasteczek
  • Sortowanie wyników
  • Obsługa kanałów RSS
  • Zamieszczanie materiałów multimedialnych
  • Zastosowanie formatu XML
  • Instalacja i konfiguracja serwera Apache

Wykorzystaj nowoczesne metody nauki
i opanuj możliwości duetu PHP–MySQL!

Dodaj do koszyka Head First PHP & MySQL. Edycja polska

 

Osoby które kupowały "Head First PHP & MySQL. Edycja polska", wybierały także:

  • Scala for Machine Learning - Second Edition
  • QlikView for Developers
  • Oracle Business Intelligence Enterprise Edition 12c - Second Edition
  • SQL Server 2016 Developer's Guide
  • Blockchain Development with Hyperledger

Dodaj do koszyka Head First PHP & MySQL. Edycja polska

Spis treści

Head First PHP & MySQL. Edycja polska -- spis treści

Wprowadzenie

  • Dla kogo przeznaczona jest ta książka? (28)
  • Kto prawdopodobnie powinien zrezygnować z tej książki? (28)
  • Wiemy, co sobie myślisz (29)
  • Wiemy, co sobie myśli Twój mózg (29)
  • Metapoznanie: myślenie o myśleniu (31)
  • Oto, co MY zrobiliśmy (32)
  • A oto, co TY możesz zrobić, aby zmusić mózg do posłuszeństwa (33)
  • Przeczytaj koniecznie (34)
  • Zespół recenzentów technicznych (36)
  • Podziękowania (37)

1. Ożywianie statycznych stron

  • Strony HTML są statyczne i nudne (40)
  • PHP ożywia strony WWW (41)
  • Formularz pomoże Markowi poznać całą historię (43)
  • Formularze składają się z kodu HTML (44)
  • Formularz HTML sprawia problemy (46)
  • HTML działa po stronie KLIENTA (48)
  • PHP działa po stronie SERWERA (49)
  • Skrypty PHP działają na serwerze (50)
  • Dostęp do danych z formularza w kodzie PHP (54)
  • Skrypty PHP muszą działać na serwerze! (56)
  • Przenoszenie skryptów PHP na serwer (57)
  • Serwer przekształca kod PHP na HTML (60)
  • Analiza skryptu PHP Marka (62)
  • Kilka reguł pisania kodu związanych z językiem PHP (63)
  • Ustalanie idealnych nazw dla zmiennych (64)
  • Zmienne służą do przechowywania danych w skryptach (69)
  • $_POST to specjalna zmienna na dane z formularza (71)
  • Zmienna $_POST przesyła dane z formularza do skryptu (72)
  • Tworzenie treści listu w kodzie PHP (82)
  • Nawet zwykły tekst można (trochę) sformatować (84)
  • Znaki nowego wiersza trzeba umieścić w cudzysłowach (85)
  • Zbuduj e-mail do Marka (86)
  • Zmienne przechowują fragmenty e-maila (87)
  • Wysyłanie e-maili przy użyciu PHP (88)
  • Marek zaczyna otrzymywać e-maile (91)
  • Marek zaczyna gubić e-maile (92)

2. Łączenie się z bazą MySQL

  • Formularz PHP Marka działa dobrze - aż za dobrze... (98)
  • MySQL doskonale nadaje się do przechowywania danych (99)
  • Marek potrzebuje bazy danych MySQL (100)
  • Utwórz bazę danych i tabelę MySQL (102)
  • Instrukcja INSERT w akcji (105)
  • Użyj instrukcji SELECT do pobrania danych z tabeli (108)
  • Użyj PHP do obsługi żmudnych instrukcji SQL (111)
  • PHP umożliwia przepływ danych z formularza Marka (112)
  • Połącz się z bazą danych w skrypcie PHP (114)
  • Wstawianie danych za pomocą skryptu PHP (115)
  • Użyj funkcji PHP do komunikacji z bazą danych (116)
  • Łączenie się z bazą za pomocą mysqli_connect() (118)
  • Budowanie zapytań INSERT w kodzie PHP (123)
  • Kierowanie zapytań do bazy MySQL w skryptach PHP (124)
  • Zamykanie połączenia za pomocą funkcji mysqli_close() (125)
  • Zmienna $_POST udostępnia dane z formularza (129)
  • Marek potrzebuje pomocy przy filtrowaniu danych (134)
  • Marek jest na dobrej drodze do znalezienia Kła (136)

3. Tworzenie i zapełnianie bazy danych

  • Sklep poświęcony Elvisowi otwiera podwoje (142)
  • Edward potrzebuje aplikacji (143)
  • Wizualizacja projektu aplikacji Edwarda (144)
  • Wszystko zaczyna się od tabeli (147)
  • Nawiąż kontakt z serwerem MySQL (148)
  • Tworzenie bazy danych na adresy Edwarda (149)
  • Tworzenie tabeli w bazie danych (150)
  • Musimy zdefiniować dane (151)
  • Poznaj wybrane typy danych języka MySQL (152)
  • Tworzenie tabel przy użyciu zapytań (155)
  • Wskaż bazę danych przed jej użyciem (158)
  • Instrukcja DESCRIBE opisuje strukturę tabeli (161)
  • Edward jest gotowy do zapisywania danych (163)
  • Tworzenie skryptu do dodawania adresów (164)
  • Druga strona aplikacji Edwarda (171)
  • Mechanizmy skryptu do wysyłania wiadomości (172)
  • Zacznijmy od początku - pobieranie danych (173)
  • Funkcja mysqli_fetch_array() pobiera wyniki zapytania (174)
  • Pętle WHILE (177)
  • Przechodzenie po danych za pomocą pętli while (178)
  • Otrzymałeś wiadomość od Edwarda! (183)
  • Czasem użytkownicy chcą zrezygnować (184)
  • Usuwanie danych za pomocą instrukcji DELETE (185)
  • Użyj klauzuli WHERE, aby usunąć konkretne dane (186)
  • Minimalizowanie ryzyka przypadkowych usunięć (187)
  • ZrobZeMnieElvisa.com to aplikacja internetowa (192)

4. Realistyczne i praktyczne aplikacje

  • Niektórzy klienci Edwarda są zirytowani (196)
  • Zabezpiecz Edwarda przed nim samym (199)
  • Sprawdzaj poprawność danych z formularza (200)
  • Walidacja w skrypcie sendemail.php (201)
  • Kod podejmuje decyzje dzięki instrukcji IF (202)
  • Sprawdzanie warunku (203)
  • Instrukcja IF sprawdza nie tylko równość (204)
  • Walidacja w skrypcie sendemail.php (207)
  • Funkcje PHP do sprawdzania zawartości zmiennych (208)
  • Sprawdzanie wielu warunków przy użyciu I oraz LUB (215)
  • Użytkownicy formularza potrzebują informacji zwrotnych (219)
  • Wygodne otwieranie i zamykanie bloków PHP (229)
  • Użyj flagi, aby uniknąć powielania kodu (230)
  • Napisz kod formularza jeden raz (231)
  • Formularz autoreferencyjny (235)
  • Wskaż skrypt w atrybucie action (236)
  • Sprawdzanie, czy użytkownik przesłał formularz (238)
  • Niektórzy użytkownicy nadal są niezadowoleni (242)
  • Wiersze tabeli powinny mieć niepowtarzalne identyfikatory (244)
  • Klucze główne wymuszają niepowtarzalność (246)
  • Od pól wyboru do identyfikatorów klientów (251)
  • Przechodzenie po elementach tablicy za pomocą foreach (252)

5. Używanie danych przechowywanych w plikach

  • Wirtualni gitarzyści lubią współzawodnictwo (260)
  • Rysunki to dowód prawdziwości wyniku (261)
  • Aplikacja musi przechowywać rysunki (262)
  • Planowanie przesyłania plików w aplikacji Gitarowe wojny (267)
  • Trzeba zmodyfikować bazę rekordów za pomocą instrukcji ALTER (268)
  • Jak pobrać rysunek od użytkownika? (272)
  • Wstaw rysunki (nazwy plików) do bazy danych (274)
  • Określanie nazwy przesłanego pliku (275)
  • Gdzie znajdują się przesłane pliki? (280)
  • Utwórz miejsce na przesłane pliki graficzne (284)
  • Współużytkowane dane trzeba współdzielić (290)
  • Dołączanie danych współużytkowanych przez skrypty (291)
  • Traktuj instrukcję require_once jak polecenie "wstaw" (292)
  • W przypadku rekordowych wyników najważniejszy jest porządek (294)
  • Wyróżnianie najlepszego gitarowego wojownika (297)
  • Sformatuj najlepszy wynik za pomocą kodu HTML i CSS (298)
  • Przepuszczamy tylko małe rysunki (303)
  • Walidacja pliku zwiększa niezawodność aplikacji (304)
  • Projektowanie strony administracyjnej (308)
  • Generowanie odsyłaczy do usuwania wyników na stronie administracyjnej (311)
  • Skrypty mogą komunikować się ze sobą (312)
  • O żądaniach GET i POST (314)
  • GET, POST i usuwanie wyników (316)
  • Znajdowanie usuwanych wyników (319)
  • Kontrolowanie liczby usuwanych wierszy za pomocą klauzuli LIMIT (320)

6. Zabezpieczanie aplikacji

  • Dzień, w którym umarła muzyka (330)
  • Gdzie się podziały wyniki? (331)
  • Zabezpieczenia przed dzikimi hordami (333)
  • Zabezpieczanie strony administracyjnej Gitarowych wojen (334)
  • Uwierzytelnianie HTTP wymaga nagłówków (336)
  • Kontrolowanie nagłówków za pomocą PHP (339)
  • Uwierzytelnianie za pomocą nagłówków (340)
  • Tworzenie skryptu do obsługi uwierzytelniania (348)
  • Gitarowe wojny. Część II: Atak klonów rekordów (352)
  • Odejmowanie przez dodawanie (353)
  • Bezpieczeństwo wymaga interwencji człowieka (354)
  • Planowanie obsługi moderowania w Gitarowych wojnach (355)
  • Użyj instrukcji ALTER, aby zrobić miejsce na zatwierdzanie wyników (356)
  • Niezatwierdzone wyniki nie są potrzebne (361)
  • Oszustwo za milion punktów (364)
  • Czy jest tu moderator? (365)
  • Jak Ela to zrobiła? (367)
  • Oszukiwanie bazy MySQL za pomocą komentarzy (368)
  • Do formularza do dodawania wyników wstrzyknięto kod SQL (369)
  • Chroń dane przed wstrzyknięciem kodu SQL (370)
  • Bezpieczniejsza instrukcja INSERT (z parametrami) (371)
  • Walidacji formularza nigdy za wiele (373)
  • Wstrzymać ogień! (375)

7. Tworzenie spersonalizowanych aplikacji sieciowych

  • Podobno przeciwieństwa się przyciągają (380)
  • Niedopasowanie opiera się na prywatnych danych (381)
  • Witryna Niedopasowani potrzebuje loginów (382)
  • Przygotowanie bazy do zapisywania loginów (385)
  • Tworzenie interfejsu logowania (387)
  • Szyfrowanie haseł za pomocą funkcji SHA() (388)
  • Porównywanie haseł (389)
  • Uwierzytelnianie użytkowników za pomocą HTTP (392)
  • Logowanie się użytkowników za pomocą uwierzytelniania HTTP (395)
  • Formularz do rejestracji nowych użytkowników (399)
  • Co zawierają pliki cookie? (409)
  • Zastosuj ciasteczka w kodzie PHP (410)
  • Modyfikowanie przebiegu logowania (413)
  • Logowanie oparte na plikach cookie (414)
  • Wylogowanie to efekt usunięcia plików cookie (419)
  • Sesje nie są zależne od klienta (423)
  • Śledzenie danych sesji (425)
  • Usprawnij aplikację Niedopasowani za pomocą sesji (426)
  • Wylogowywanie przy użyciu sesji (427)
  • Dokończ wprowadzanie sesji (432)
  • Użytkownicy nie czują się mile witani (438)
  • Sesje nie żyją długo... (440)
  • ...ale pliki cookie mogą trwać wiecznie! (441)
  • Sesje + pliki cookie = większa trwałość logowania (443)

7 1/2. Eliminowanie powtórzeń w kodzie

  • Aplikacja Niedopasowani w kawałkach (455)
  • Przebudowywanie aplikacji Niedopasowani przy użyciu szablonu (456)
  • Przebudowa aplikacji Niedopasowani z wykorzystaniem szablonów (458)
  • Zupełnie nowa i dużo lepiej uporządkowana aplikacja Niedopasowani (460)

8. Kontroluj dane - kontroluj swój świat

  • Idealnie niedopasowani (462)
  • Aplikacja Niedopasowani opiera się na danych (463)
  • Utwórz model bazy danych za pomocą schematu (465)
  • Łączenie kilku tabel (470)
  • Klucze zewnętrzne w praktyce (471)
  • Jeden wiersz pasuje do jednego wiersza (472)
  • Jeden wiersz łączy się z wieloma (473)
  • Wiersze w relacji wiele do wielu (474)
  • Tworzenie kwestionariusza na potrzeby aplikacji Niedopasowani (479)
  • Zapisywanie odpowiedzi w bazie danych (480)
  • Możemy sterować formularzem za pomocą danych (484)
  • Generowanie formularza z kwestionariuszem w aplikacji Niedopasowani (490)
  • Droga do normalności (496)
  • W czasie normalizacji myśl w kategoriach atomów (497)
  • Trzy kroki do znormalizowanej bazy danych (499)
  • Modyfikowanie bazy aplikacji Niedopasowani (503)
  • Czy baza aplikacji Niedopasowani jest naprawdę znormalizowana? (504)
  • Zapytanie w zapytaniu wewnątrz zapytania... (506)
  • Złączmy tabele (507)
  • Łączenie za pomocą kropek (508)
  • To jeszcze nie wszystkie możliwości złączeń wewnętrznych (509)
  • Pseudonimy tabel i kolumn (511)
  • Pomoc ze strony złączeń (512)
  • Pięć kroków do udanego niedopasowania (519)
  • Porównywanie osób pod kątem niedopasowania (521)
  • Potrzebujemy pętli FOR (522)

9. Funkcje niestandardowe i do obsługi łańcuchów znaków

  • Trudno jest znaleźć dobrą ryzykowną pracę (534)
  • Wyszukiwanie nie daje możliwości popełnienia błędu (536)
  • Dzięki słowu kluczowemu LIKE zapytania SQL mogą być elastyczne (537)
  • Podziel łańcuch znaków na pojedyncze słowa (542)
  • Funkcja implode() tworzy łańcuch znaków przy użyciu podłańcuchów (545)
  • Wstępne przetwarzanie szukanego łańcucha znaków (551)
  • Zastępowanie niepotrzebnych znaków w szukanym tekście (552)
  • Potrzebujemy poprawnych szukanych łańcuchów (556)
  • Kopiowanie niepustych elementów do nowej tablicy (557)
  • Czasem potrzebny jest tylko fragment łańcucha (560)
  • Pobieranie podłańcuchów z obu stron tekstu (561)
  • Można posortować wyniki w kilku zapytaniach (564)
  • Funkcje umożliwiają wielokrotne wykorzystanie kodu (568)
  • Zbuduj zapytanie za pomocą niestandardowej funkcji (569)
  • SWITCH obsługuje więcej decyzji niż IF (574)
  • Sortowanie w funkcji build_query() (577)
  • Możemy podzielić wyniki na strony (580)
  • Pobieranie tylko potrzebnych wierszy dzięki klauzuli LIMIT (581)
  • Zarządzanie odnośnikami związanymi z klauzulą LIMIT (582)
  • Kontrolowanie danych potrzebnych do obsługi stronicowania (583)
  • Konfigurowanie zmiennych używanych do stronicowania (584)
  • Poprawianie zapytania, które pobiera stronicowane wyniki (585)
  • Generowanie odnośników do nawigacji po stronach (586)
  • Tworzenie kompletnego skryptu do wyszukiwania ofert (589)
  • Kompletny skrypt do wyszukiwania ofert - ciąg dalszy (590)

10. Wyrażenia regularne

  • Użytkownicy serwisu Ryzykowne prace mogą zamieszczać w nim życiorysy (594)
  • Określ, jaki format powinny mieć dane (598)
  • Utwórz wzorzec numerów telefonów (601)
  • Dopasuj dane do wzorca za pomocą wyrażeń regularnych (602)
  • Tworzenie wzorców za pomocą metaznaków (604)
  • Dopracuj wzorce za pomocą klas znaków (611)
  • Wyszukiwanie wzorców za pomocą funkcji preg_match() (616)
  • Ustandaryzuj numery telefonów (623)
  • Usuwanie niepożądanych znaków (624)
  • Dopasowywanie adresów e-mail może być trudne (628)
  • Przyrostki domen są wszędzie (630)
  • Użyj języka PHP do walidacji domeny (631)
  • Walidacja adresów e-mail - łączenie wszystkich elementów (632)

11. Wizualizowanie danych i inne zagadnienia

  • Powrót Gitarowych wojen: narodziny maszyn (638)
  • Żaden formularz na dane wejściowe nie jest bezpieczny (639)
  • Musimy oddzielić ludzi od maszyn (640)
  • Możemy pokonać automatyzację automatyzacją (643)
  • Generowanie tekstu hasła w teście CAPTCHA (645)
  • Generowanie rysunku z testem CAPTCHA (646)
  • Funkcje graficzne biblioteki GD (648)
  • Wyświetlanie tekstu za pomocą innych czcionek (652)
  • Generowanie losowych rysunków z testami CAPTCHA (655)
  • Przywracanie normalności w Gitarowych wojnach (657)
  • Dodawanie testu CAPTCHA do skryptu do dodawania wyników (659)
  • Pięć wymiarów niedopasowania (662)
  • Diagramy niedopasowania (663)
  • Zapisywanie danych na potrzeby wykresu (664)
  • Od jednej tablicy do drugiej (668)
  • Tworzenie tablicy niedopasowanych tematów (670)
  • Plan tworzenia wykresu (671)
  • Analizowanie kategorii (672)
  • Określanie liczby kategorii (673)
  • Podstawy rysowania wykresów (676)
  • Rysowanie i wyświetlanie rysunku z wykresem słupkowym (679)
  • Osobne rysunki z wykresami dla wszystkich (682)
  • Użytkownicy serwisu Niedopasowani polubili wykresy (685)

12. Rozpowszechnianie danych i usługi sieciowe

  • Marek musi poinformować świat o zaginięciu Kła (688)
  • Przesyłanie danych o porwaniach do użytkowników (689)
  • RSS pozwala przesyłać zawartość witryny do użytkowników (690)
  • RSS to w rzeczywistości XML (691)
  • Z bazy danych do czytnika kanałów RSS (696)
  • Wizualizowanie kodu RSS (699)
  • Dynamiczne generowanie kanału RSS (702)
  • Odnośnik do kanału RSS (706)
  • Jeden film jest wart miliona słów (708)
  • Pobieranie materiałów od innych (710)
  • Rozpowszechnianie filmów z YouTube (711)
  • Przesyłanie żądania danych o filmach do serwisu YouTube (712)
  • Marek jest gotów do utworzenia żądania REST (716)
  • YouTube komunikuje się w języku XML (720)
  • Analiza kodu XML odpowiedzi z serwisu YouTube (724)
  • Wizualizowanie danych XML z opisem filmów (725)
  • Dostęp do danych XML za pomocą obiektów (726)
  • Od elementów XML do obiektów PHP (727)
  • Pobieranie danych XML za pomocą obiektów (728)
  • Nie zapominaj o przestrzeniach nazw! (729)
  • Obserwatorzy zauważyli Kła (731)
  • Rozmieść wyświetlane filmy (732)
  • Formatowanie danych o filmach w celu ich wyświetlenia (733)

A Dziesięć najważniejszych tematów (których nie poruszyliśmy)

  • Numer 1. Dopasowywanie kodu do języka PHP 4 i funkcji mysql (744)
  • Numer 2. Uprawnienia użytkowników w MySQL (746)
  • Numer 3. Zgłaszanie błędów w MySQL (748)
  • Numer 4. Obsługa wyjątków w kodzie PHP (749)
  • Numer 5. Obiektowy język PHP (751)
  • Numer 6. Zabezpieczanie aplikacji PHP (753)
  • Numer 7. Zabezpieczanie aplikacji przed atakami XSS (755)
  • Numer 8. Pierwszeństwo operatorów (757)
  • Numer 9. Czym różni się język PHP 5 od PHP 6? (758)
  • Numer 10. Wykorzystanie kodu PHP innych osób (760)

B Konfigurowanie środowiska programistycznego

  • Utwórz środowisko do programowania w języku PHP (762)
  • Sprawdź dostępne komponenty (762)
  • Czy masz serwer WWW? (763)
  • Czy masz PHP? W której wersji? (763)
  • Czy masz zainstalowany serwer MySQL? Którą wersję? (764)
  • Zacznij od serwera WWW (765)
  • Instalowanie serwera Apache - zakończenie (766)
  • Instalowanie PHP (766)
  • Etapy instalowania PHP (767)
  • Etapy instalowania PHP - zakończenie (768)
  • Instalowanie MySQL (768)
  • Etapy instalowania serwera MySQL w systemie Windows (769)
  • Włączanie PHP w systemie Mac OS X (772)
  • Etapy instalowania MySQL w systemie Mac OS X (772)
  • Przenoszenie kodu ze środowiska produkcyjnego do publicznie dostępnej witryny (774)
  • Zrób zrzut danych (i tabel) (775)
  • Przygotowania do użycia zrzutu danych (775)
  • Przenoszenie zrzuconych danych na serwer publiczny (776)
  • Łączenie się z serwerem publicznym (777)

C Rozszerzanie PHP

  • Rozszerzanie języka PHP (780)
  • A w komputerach Mac... (783)

Skorowidz (785)

Dodaj do koszyka Head First PHP & MySQL. Edycja polska

Code, Publish & WebDesing by CATALIST.com.pl



(c) 2005-2024 CATALIST agencja interaktywna, znaki firmowe należą do wydawnictwa Helion S.A.