Spis treści

Laboratorium, PHP # 4

Przetwarzanie danych

Ćwiczenie 1*: Dostęp do zewnętrznych danych

  1. Przetestuj działanie skryptu couchshell.php:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml">
    <header>
    <title>CouchShell</title>
      <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <?php
    function checked($source,$value) {
      if ($source === $value) echo 'checked="checked"';
    }
     
    $uri=$_POST['uri'];
    if ($_POST['method'] === 'GET' ||
        $_POST['method'] === 'POST' ||
        $_POST['method'] === 'PUT' ||
        $_POST['method'] === 'DELETE' )
       $method=$_POST['method'];
     
    $content_type='Content-type: '.$_POST['content'];
    $post=$_POST['post'];
    ?>
    </header>
    <body>
    <h1>Input</h1>
    <p>
    <form method="POST">
      URI:<br/>
      <textarea rows="4" cols="60" name="uri"><?php echo $uri;?></textarea>
      <br/>
      Method: <input type="radio" name="method" value="GET" <?php checked($method,'GET')?>/> GET
      <input type="radio" name="method" value="POST" <?php checked($method,'POST')?>/> POST
      <input type="radio" name="method" value="PUT" <?php checked($method,'PUT')?>/> PUT
      <input type="radio" name="method" value="DELETE" <?php checked($method,'DELETE')?>/> DELETE
      <br/>
      Content type: <input type="text" name="content" size="40" value="application/json"/>
      <br/>
      POST/PUT:<br/>
      <textarea rows="4" cols="60" name="post"><?php echo stripslashes($post);?></textarea>
      <br/>
      <input type="submit"/> 
      <input type="reset"/>
    </form>
    </p>
    <h1>Output</h1>
    <h2>JSON</h2>
    <p>
    <?php
     
    if (isset($uri)){
     
     
     
      $c=curl_init($uri);
      curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($c,CURLOPT_CUSTOMREQUEST,$method);
      if ($method === 'POST' || $method === 'PUT') {
        curl_setopt($c, CURLOPT_POSTFIELDS, stripslashes($post));
        curl_setopt($c, CURLOPT_HTTPHEADER,array($content_type));
      }
      $data=curl_exec($c);
      curl_close($c);
      echo $data;
    ?>
    <h2>Decoded JSON</h2>
    <pre>
    <?php
      print_r(json_decode($data,true));
    ?>
    </pre>
    <?php
    }
    ?>
    </p>
    </body>
    </html>
  2. Korzystając z dowolnego widoku bazy CouchDB napisz w PHP program wyświetlający jako liste kolejne identyfikatory dokumentów zgormadzonych w bazie. Możesz skorzystać z wbudowanego widoku _all_docs np.: http://awing.kis.agh.edu.pl:5984/ogloszenia/_all_docs
    1. przeczytaj zasób,
    2. dokonaj konwersji JSON-tablica,
    3. wyświetl odpowiednie informacje iterując po tablicy.

Obiekty

Ćwiczenie 1: Klasy i Obiekty

Napisz klasę implementującą komunikację z bazą danych CouchDB. Do przesyłania danych wykorzystaj HTTP np.:

$h=fopen("http://awing.ia.agh.edu.pl:5984/_all_dbs", "r");
if ($h) {
  while (($bufor=fgets($h))!=false) {
    echo $bufor;
  }
  fclose($h);
}

Informacje na temat używania innych metod HTTP (POST, PUT, DELETE) można znaleźć: http://www.php.net/manual/en/context.http.php

Zamiast podejścia fopen można zastosować bibliotekę cURL np.:

<?php
  $c=curl_init('http://awing.kis.agh.edu.pl:5984');
  /* zwroc dane jako wartosc */
  curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  $dane=curl_exec($c);
  curl_close($c);
  echo $dane;
 
  $c=curl_init('http://awing.kis.agh.edu.pl:5984/moja1');
  curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($c, CURLOPT_PUT, 1);
  $dane=curl_exec($c);
  curl_close($c);
  echo $dane;
 
  $dok='{"tresc":"zawartosc dokumentu", "autor":"Wojnicki"}';
  $c=curl_init('http://awing.kis.agh.edu.pl:5984/moja1');
  curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($c, CURLOPT_POST, 1);
  curl_setopt($c, CURLOPT_HTTPHEADER,array('Content-type: application/json'));
  curl_setopt($c, CURLOPT_POSTFIELDS, $dok);
  $dane=curl_exec($c);
  curl_close($c);
  echo $dane;
 
  $c=curl_init('http://awing.kis.agh.edu.pl:5984/moja1/_all_docs');
  curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
  $dane=curl_exec($c);
  curl_close($c);
 
  /* przykład dekodowania JSON */
  $tablica=json_decode($dane,true);
  echo $tablica['total_rows'];  
?>

Klasa powinna implementować metody umożliwiające:

  1. definiowanie źródła danych (URI bazy danych),
  2. zwracanie informacji o dostępnych dokumentach,
  3. wykonywanie operacji CRUD (osobne metody: Create, Read, Update, Delete). Uwaga: zaimplementuj przynajmniej metodę umożliwijącą odczyt z bazy danych za pomocą HTTP GET.

Uwaga: dane z postaci JSON zwracanej przez CouchDB powiny być konwertowane do tablic asocjacyjnych PHP. Podpowiedź: sprawdź w dokumentacji PHP jakie są dostępne biblioteki do przetwarzania JSON: http://www.php.net/manual/en/ref.json.php

PDO

Ćwiczenie 1: Sterowniki

Sprawdź jakie sterowniki baz danych są dostępne w ramach instalacji PDO.

  1. Znajdź w dokumentacji odpowiednia metodę: http://www.php.net/manual/en/class.pdo.php
  2. Użyj w/w metody w skrypcie.
  3. Uruchom skrypt.

Ćwiczenie 2: Baza danych

Użyj PDO do wykonania poniższych operacji.

  1. Otwórz połączenie z bazą danych.
  2. Wykonaj przynajmniej jedną operacje INSERT.
  3. Wykonaj przynajmniej jedną operację SELECT zwracającą wiele wierszy.
    1. Napisz iterator, odczytujący odpowiednie wiersze.
    2. Umieść dane w tabeli HTML.