VoiceXML Italian User Group

Home page  VoiceXML Links  VoiceXML Tutorial  News dai Working Groups Voice Browser e Multimodal Interaction del World Wide Web Consortium  Articoli  Accessibilita' del web mediante la voce

Libri Voice & Speech technologies  La nostra Newsletter  Il nostro Forum  Contatti  Gli eventi a cui lo User Group ha partecipato o partecipera'  Parlano (speriamo bene:-)) di noi...



TUTORIAL VOICEXML e PHP

Lezione 2. Leggere i dati da un database.    Christian Lacetera    

<!-- INIZIO LEZIONE --!>
Nell'esempio precedente abbiamo mostrato com'è semplice integrare il codice del PHP con il VoiceXML.
L'uso di un linguaggio server side quale il PHP sembrerebbe pero' non essere giustificato, perchè nelle applicazioni vocali disponiamo già del JavaScript che ci permette di interagire all'interno del documento.
JavaScript non ci permette pero' di leggere o scrivere da un database. Questo il motivo per cui si utilizza un linguaggio di scripting quale il PHP in grado di generare pagine dinamiche, una modalità questa ben conosciuta da molti webmaster.


login.php

<?php
header("Content-type: application/voicexml+xml");
$connection = mysql_connect("localhost", "utenza", "password");
mysql_select_db("database");
$result = mysql_query("SELECT username,name FROM VIUG_USERS WHERE pin = '" . $_POST["pin"]
. "'");
if (mysql_num_rows($result) > 0) {
 $rs = mysql_fetch_assoc($result);
 $auth="yes";
} else{
$auth="no";
}
?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
<var auth="'<?php =$auth;?>'">
<form id="main">
  <if cond="auth='yes'">
   <goto src="#login">
  <else/>
   <goto src='#nologin'>
  </if>
</form> 
<form id="login">
 <block>
   <prompt>
      Benvenuto <?php =rs['name']: ?> ora puoi accedere alla tua pagina personale
   </prompt>
   <goto src="personal.php">
 </block>
</form>
<form id="login">
 <block>
   <prompt>
      Mi dispiace il codice inserito non è valido
   </prompt>
   <goto src="index.php">
 </block>
</form>
</vxml>




Come l'esempio della prima Lezione (index.php) defininiamo i content type appropriato e scriviamo l'intestazione per il documento XML.

Dopo aver fatto tutto ciò, possiamo, attraverso le funzioni intergrate del PHP, leggere i dati da un database in questo caso MySQL e memorizzarle dentro delle variabili.

In questo esempio si è scelto di gestire all'interno dello stesso documento sia l'autenticazione andata a buon fine che quella errata, in modo di mostrare la possibilità di integrazione tra logica del codice e VoiceXML, nulla vietava ad un utente più smaliziato di utilizzare un header http per il redirezionamento in base alla situazione:


<?php
$connection = mysql_connect("localhost", "utenza", "password");
mysql_select_db("database");
$result = mysql_query("SELECT username,name FROM VIUG_USERS WHERE pin = '" . $_POST["pin"]
. "'");
if (mysql_num_rows($result) > 0) {
header('Location: login_ok.php'); 
} else{
header('Location: login_ko.php'); 
}
?>


Questo perchè l'interprete VoiceXML si comporta come un browser e segue le specifiche per le richieste HTTP.

Tornando all'esempio, si vede che viene definita una variabile chiamata "auth" nel documento VoiceXML e attraverso il tag <if> viene scelto quale form eseguire.

Spesso in situazioni reali è consigliabile usare uno stesso documento per gestire le diverse situazioni, e utilizzare delle chiamate a subdocumenti per analizzare le risposte.

Cio' e' possibile attraverso il tag <submit> che permette di eseguire un post ad un subdocumento e di ritornare in maniera automatica al form di partenza senza doverlo ricaricare.
<!-- FINE LEZIONE --!>


Torna alla LEZIONE 1     /     Vai alla LEZIONE 3