PHP e VoiceXML (Parte II)
Pagina 2 di 5
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/img/guide/53/img/guide/53/img/guide/53/img/guide/53/img/guide/53/img/guide/53/>
<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.