Wyrażenia regularne – wyszukaj gotowca!

 

Wyrażenia reularne - forma i odlewWyrażenia regularne (regular expressions) pozwalają na szybkie wykrycie poprawności ciągu znaków. Tak jak odlew pasuje do formy, tak dany ciąg znaków musi pasować do wzoru wyrażenia regularnego. Jest to tak wygodne i jednocześnie potężne narzędzie, że jego implementacja jest częścią niemal każdego języka programowania. Wyrażenia regularne są niezastąpione przy walidacji formularzy.

Problemem jest jednak napisanie odpowiedniego i poprawnego wzoru. Znając zasady budowy wyrażeń regularnych, nie jest to trudne. Co jednak, gdy nie chcemy tracić czasu na naukę dla jednego prostego wzoru? Z pomocą przychodzą bazy wyrażeń regularnych, takich jak regexlib.com.

Na regexlib.com możesz wyszukać wyrażenia regularne takie jak pesel, czy e-mail. Wystarczy takie przykłady wyrażeń skopiować i użyć np. przy pomocy PHP i POSIX Regex.

Jak Ci się podoba pomysł wyszukiwarki wyrażeń regularnych? Zostaw swoją opinię w komentarzu!

 
 

Wielki POST i mały GET

 

Widzieliście ostrzeżenia typu „nie odświeżaj strony, ani nie używaj przycisku wstecz przeglądarki” ? Zapewne tak, bo to dość często stosowana praktyka zapobiegania ponownemu wysłaniu danych np. poprzez formularz. Praktyka powszechna, ale metoda rozwiązania problemu żadna.

Weźmy przykład – formularz przelewu internetowego. Wypełniamy dane, klikamy przycisk Akceptuj. Dane o transakcji zostają wysłane do serwera za pomocą metody POST. Serwer odnotowuje zmiany w bazie danych. Załadowana zostaje ta sama strona z formularzem. Użytkownik klika wstecz. Przeglądarka z reguły rzuca ostrzeżeniem o powtórnym przesłaniu danych żądaniem POST. Wiadomość jest zbyt konfundująca, użytkownik nieopatrznie zgadza się na ponowne przesłanie danych. Pieniądze zostają przelane dwukrotnie.

Co zrobić by uniknąć pozwów od użytkowników takich jak powyżej? Ostrzec, że za ich działania na stronie nie odpowiadamy prawnie lub użyć przekierowania po przetworzeniu danych otrzymanych POST-em. Tylko tyle i aż tyle. Teraz przykład wypisania z listy mailingowej. Schemat działania zawarty w trzech plikach:

form.html z prostym formularzem:


<form action="form_post.php" method="post">
   <input type="text" name="email" />
   <input type="submit" value="Wyślij" />
</form>

form_post.php przetwarzający dane (operacje na bazie danych itp.)


<?php
if(isset($_POST['email'])){
   // usuń e-mail z bazy subskrybentów
}
//przekierowanie z parametrem - adresem e-mail (metoda GET!)
header('Location: form_result.php?email=' . $_POST['email']);
?>

form_result.php, czyli plik wynikowy z rezultatem operacji


<?php
if(isset($_GET['email'])){
   //pobierz dane np. imię i nazwisko z bazy danych
   $query = "SELECT name, surname FORM users WHERE email = ?";
   //podstawienie $_GET['email'] pod zmienną wiązania i zwrócenie wyniku bazy danych
   (...)
   echo "$name $surname, zostałeś poprawnie wypisany z newslettera.";
}
?>

Voila! Teraz nawet po naciśnięciu przycisku wstecz, nie ma zagrożenia, ponieważ strona rezultatu operacji była ładowana za pomocą metody GET.

Idea szerzej opisana w artykule Redirect After Post.

 
 

MYDŁO, czyli SOAP na sposób swojski

 

SOAP to protokół usług sieciowych. Prościej? Pozwala na zdefiniowanie zbioru funkcji, które możemy wykorzystywać, bądź udostępniać innym zdalnie. Wystarczy znać parametry wywołań, nazwy funkcji i zwracany obiekt.

SOAP to jak najbardziej przyszłościowa technologia, ponieważ na jednej stronie będziemy mogli wykorzystać funkcjonalność innych serwisów czy aplikacji. Potrzebujesz aktualnych kursów walut? Męczysz się z parsowaniem strony NBP? Może lepiej poszukać serwisu, który udostępnia odpowiednią funkcję?

Do rzeczy. Po pierwsze potrzebujesz włączonego rozszerzenia PHP php_soap.dll Następnie potrzebujemy klienta dla naszej usługi. Podstawowa konfiguracja pliku soap_client.php:


<?php
//Ustalenie adresu serwera:
$location = sprintf('http://%s%s/soap_server.php',
$_SERVER['HTTP_HOST'],
dirname($_SERVER['SCRIPT_NAME']));

//Utworzenie obiektu klienta SOAP
$soap = new SoapClient(null, array('location' => $location, 'uri'      => ''));

//wykorzystanie funkcji udostępnionej przez serwer
$ret = $soap->remoteToUpper('SOAP - i like it!');

echo $ret; //zwraca napis "SOAP - I LIKE IT!"
?>

Plik serwera soap_server.php, czyli właściwa implementacja usługi:


<?php
//Przekształca ciąg znaków na pisany wersalikami
function remoteToUpper($str){
return strtoupper($str);
}
//Utworzenie serwera SOAP i wyeksportowanie funkcji remoteToUpper()
$soap = new SoapServer(null, array('uri' => ''));
$soap->addFunction('remoteToUpper');

//Użycie żądania POST dla wywołania usługi
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$soap->handle();
}
else {
//Bez podanych parametrów - wypisana zostanie lista dostępnych funkcji serwera SOAP
echo "Funkcje udostępnione:\n";
foreach ($soap->getFunctions() as $func) {
echo $func . "\n";
}
}
?>

Oczywiście przykład podany powyżej jest banalny, ale SOAP umożliwia stworzenie naprawdę potężnych zbiorów funkcji i budowę rozproszonych systemów o wygodnej, bo kapsułkowej budowie.

Najczęściej udostępnione przez serwer funkcje zwracają odpowiednie dane zawarte w lokalnych bazach danych.

Jeżeli przydały Ci się te informacje, wiesz już jak napisać serwer SOAP – podziel się wrażeniami w komentarzu!