Paw server Spécificité : - Server phone androïd, - Console de programmation du matériel phone androïd (webcam, GPS, etc.) Développement disponible (programmation) : - Beanshell (<bsh></bsh>) (type de fichier avec extension xhtml), - javascript (AJAX), - PHP (après installation plugin php), - Base de données SQL (sqlite) Procédures (Etapes à suivre): - Télécharger et installer le logiciel Paw server dans le téléphone Androïd Voir (logiciel/buildownpawserver.apk) - Télécharger et installer plugin PHP dans le téléphone Androïd Voir (logiciel/php_plugins) pour le plugin Voir (logiciel/php_demo_plugins) pour la démonstration PHP - Partager la connexion par wifi mobile - Mettre en œuvre l application web sur le server Paw Dossier racine du server pour le stockage des fichiers de mise en œuvre (xhtml, js, php, css): Stokage/Paw/html L application web est disponible à l adresse donnée par Paw server : 127.0.0.1 :8080, ou autre adresse ip pour le navigateur à distance : 192.186.1.43 :8080. Codes sources et Astuces: Exemple code beanshell : Afficher les informations caractéristiques du phone androïd. <bsh> String[] opts = "BOARD", "BRAND", "DISPLAY", "MODEL", "PRODUCT", "TIME", "TYPE", "USER", "VERSION.INCREMENTAL", "VERSION.RELEASE", "VERSION.SDK"; for(o : opts) print("<b>" + o + ":</b>" + eval("android.os.build." + o) + "<br>"); </bsh> Divers codes sources sont disponibles dans le dossier racine du server paw : Stokage/Paw/html/app Hery Haja Prod. Août 2016 PAW SERVER 1
Exemple code beanshell : Connecter la Base de données sqlite. <bsh> import android.content.context; service = server.props.get("servicecontext"); // Create database db = service.openorcreatedatabase("testdb", Context.MODE_WORLD_WRITEABLE, null); print("db location: " + service.getdatabasepath("testdb")); // Create table db.execsql("create TABLE IF NOT EXISTS information (id integer AUTO_INCREMENT PRIMARY KEY, nom varchar(100), info varchar(100))"); print("table information existe ou crée"); db.execsql("insert INTO information (nom, info) VALUES ('tafika', 'autre1')"); print("les valeurs sont insérées dans la table information "); // Lire les valeurs dans la table information selon les critères du sql. v="tafika"; c = db.rawquery("select information.nom, information.info FROM information GROUP BY information.nom, information.info HAVING (((information.nom)='" + v + "')) ORDER BY information.nom", null); firstnamecolumn = c.getcolumnindex("nom"); infocolumn = c.getcolumnindex("info"); c.movetofirst(); if (c!= null) if (c.isfirst()) int i = 0; do i++; firstname = c.getstring(firstnamecolumn); info = c.getstring(infocolumn); print(firstname + " - " + info); while(c.movetonext()); c.close(); print("pour vérification si tout se passe correctement"); </bsh> Code de suppression base de données sqlite : service.deletedatabase(«testdb ); Ce type de code est inspiré par le code Paw Server dans Stokage/Paw/html/app/codesnippets/Database.xhtml Hery Haja Prod. Août 2016 PAW SERVER 2
Voir (Codes sources/base de données /conn_sqlite.xhtml) Exemple code beanshell : Renvoyer une valeur d une zone de texte d un formulaire vers une autre page xhtml. Formulaire.xhtml <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>document sans nom</title> <form id="monform" name="form1" method="get" action="action_get.xhtml"> <p> <label>nom : <input type="text" name="nom" /> </label> </p> <p> <label> <input type="submit" name="bouton" value="envoyer" /> </label> </p> </form> action_get.xhtml <bsh> nom=parameters.get("nom"); print(nom); </bsh> </html Voir (Codes sources/ Renvoi/ BSH_simple/action_get.xhtml) Voir (Codes sources/ Renvoi/ BSH_simple/formulaire.xhtml) Hery Haja Prod. Août 2016 PAW SERVER 3
Exemple code beanshell : Récupérer une valeur instantanément d une zone de texte d un formulaire dans une page par AJAX (ajax.xhtml). Formulaire.xhtml <html xmlns="http://www.w3.org/1999/xhtml"> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>document sans nom</title> <script language="javascript"> function createrequestobject() var ro; var browser = navigator.appname; if(browser == "Microsoft Internet Explorer") ro = new ActiveXObject("Microsoft.XMLHTTP"); else ro = new XMLHttpRequest(); return ro; var http = createrequestobject(); function recuperer_nom() http.open('get', 'ajax.xhtml?nom='+document.form1.nom.value); http.onreadystatechange = handleresponse; http.send(null); function handleresponse() if(http.readystate == 4) var response = http.responsetext; var update = new Array(); if(response.indexof(' '!= -1)) update = response.split(' '); document.getelementbyid("contenu").innerhtml = update[0]; //alert(update[0]); </script> <form id="monform" name="form1" > <p> <label>nom : <input type="text" name="nom" onkeyup="recuperer_nom()"/> </label> </p> </form> <div id="contenu"></div> Hery Haja Prod. Août 2016 PAW SERVER 4
ajax.xhtml <bsh> nom=parameters.get("nom"); print(nom); </bsh> Voir (Codes sources/renvoi/bsh_ajax/ formulaire.xhtml) Voir (Codes sources/renvoi/bsh_ajax/ ajax.xhtml) Exemple code PHP pour paw server (attention vous devez taper le chemin complet du fichier PHP car paw server cache ce type de fichier dans son navigateur). php.php <bsh> <? Echo("bienvenu php") ; </bsh> Exemple code PHP : Récupérer une valeur instantanément d une zone de texte d un formulaire dans une page PHP par AJAX (ajax.php). Formulaire.php <!--doctype html --> <html lang="fr"> <body id="corps" > <script type='text/javascript'> function getxhr() var xhr = null; if(window.xmlhttprequest) // Firefox et autres xhr = new XMLHttpRequest(); else if(window.activexobject) // Internet Explorer try xhr = new ActiveXObject("Msxml2.XMLHTTP"); catch (e) xhr = new ActiveXObject("Microsoft.XMLHTTP"); else // XMLHttpRequest non supporté par le navigateur alert("votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; Hery Haja Prod. Août 2016 PAW SERVER 5
return xhr serveur est ok xhr.responsetext; function actualiser_menu() //alert("ok"); var xhr = getxhr() // On défini ce qu'on va faire quand on aura la réponse xhr.onreadystatechange = function() // On ne fait quelque chose que si on a tout reçu et que le if(xhr.readystate == 4 && xhr.status == 200) document.getelementbyid("contenu").innerhtml= //document.getelementbyid("titre").innerhtml= ""; xhr.open("post","ajax.php?menu="+document.form1.menu.value,true); xhr.send(null); </script> <form id="monform" name="form1"> <p> <label>nom : <input name="menu" type="text" onkeyup="actualiser_menu()"> </label> </p> </form> <div id="contenu"> </div> Ajax.php php $menu=$_get['menu']; echo($menu); Voir (Codes sources/renvoi/ php_ajax/ formulaire.xhtml) Voir (Codes sources/renvoi/ php_ajax/ ajax.xhtml) Hery Haja Prod. Août 2016 PAW SERVER 6
Exemple code PHP : Cookie et login page web. connecter.php (Formulaire de login) <!--doctype html --> // REINITIALISER COOKIE setcookie("user"); unset($_cookie['user']); <html lang="fr"> <body id="corps" > <a href=page_privee.php>essayer d'acceder page privee.</a> <br> <script type='text/javascript'> function getxhr() var xhr = null; if(window.xmlhttprequest) // Firefox et autres xhr = new XMLHttpRequest(); else if(window.activexobject) // Internet Explorer try xhr = new ActiveXObject("Msxml2.XMLHTTP"); catch (e) xhr = new ActiveXObject("Microsoft.XMLHTTP"); else // XMLHttpRequest non supporté par le navigateur alert("votre navigateur ne supporte pas les objets XMLHTTPRequest..."); xhr = false; return xhr function envoyer_cookie() //alert("ok"); var xhr = getxhr() // On défini ce qu'on va faire quand on aura la réponse xhr.onreadystatechange = function() // On ne fait quelque chose que si on a tout reçu et que le serveur est ok if(xhr.readystate == 4 && xhr.status == 200) document.getelementbyid("contenu").innerhtml= xhr.responsetext; //document.getelementbyid("titre").innerhtml= ""; xhr.open("post","envcookie.php?user="+document.form1.user.value,true); xhr.send(null); Hery Haja Prod. Août 2016 PAW SERVER 7
</script> <div align="center"><form id="monform" name="form1" style="background-color:#cccccc"> <p> <label>mot de passe : <input name="user" type="password"> <input name="connecter" type="button" value="connecter" onclick="envoyer_cookie()"> </form> </div> <div id="contenu" align="center"> </div> envcookie.php (Ajax pour réception valeur mot de passe ) $user=$_get['user']; //echo($user); if ($user=="tafika") /// ON PEUT COLLECTER LES VALEURS DANS UNE BASE DE DONNEES $unan=365*24*60*60; setcookie("user", $user, time()+$unan); // 86400 = 1 day // AFFECTATION DE VALEUR COOKIE echo('<a href=page_privee.php style="color:#006600">actuelement la Page privee est disponible</a>'); // RESULTATS else echo('<b style="color:#ff0000">mot de passe invalide</b>'); // RESULTATS </HTML> page_privee.php (Page protégée mais accessible si la valeur cookie est exacte.) if (isset($_cookie['user']) and!empty($_cookie['user']) ) ok(); else no(); function ok() Hery Haja Prod. Août 2016 PAW SERVER 8
echo "Bienvenu ".$_COOKIE['user']; function no() header("location: connecter.php"); <br> <hr/> <div style="background-color:#cccccc" align="center"><a href=supcookie.php style="background:#ffff00">deconnexion</a></div> <hr/> Mettre ici le contenu de la page privee. supcookie.php (Remise à zéro la valeur cookie ou déconnexion de la page privée) if(isset($_cookie['user'])) setcookie("user"); unset($_cookie['user']); header("location:connecter.php"); Voir (Codes sources/cookie/ php_ajax/connecter.php) Voir (Codes sources/cookie/ php_ajax/envcookie.php) Voir (Codes sources/cookie/ php_ajax/page_privee.php) Voir (Codes sources/cookie/ php_ajax/supcookie.php) NB : RESPECTER BIEN LA BALISE <? (phone androïd pris en charge Paw server) AU LIEU DE <?php?php> (PC pris en charge wampserver) POUR CONTROLER L ERREUR DU PROGRAMME Même principe pour le cas de SESSION. Voir (Codes sources/session/login.php) Voir (Codes sources/cookie/pageprivee.php) Voir (Codes sources/cookie/suppsession.php) Hery Haja Prod. Août 2016 PAW SERVER 9
Exemple code PDO_PHP pour manipuler une base de données SQLITE dans PAW SERVER? // tester la disponibilité de sqlite. foreach (PDO::getAvailableDrivers() as $pro_driver) echo 'disponible: '.$pro_driver. ' '; try // Créer une base de donnée SQLite $db_handle = new PDO('sqlite:member.sqlite'); // Quelques options $db_handle->setattribute(pdo::attr_errmode, PDO::ERRMODE_EXCEPTION); catch (Exception $e) die('erreur : '.$e->getmessage()); // creer table $results = $db_handle->exec("create TABLE if not exists matable (ID INTEGER PRIMARY KEY, champ1 INTEGER, champ2 TEXT);"); /// inserer donnees //Requete SQL d'insertion $sql = 'INSERT INTO matable (champ1,champ2) values(:var1,:var2)'; $stmt = $db_handle ->prepare($sql); //Paramètre PDO $P = array('var1' => 'hery', 'var2' => 'haja'); //Executer la requete $stmt->execute($p); $stmt->closecursor(); //afficher donnees try $connexion=new PDO('sqlite:member.sqlite'); catch(pdoexception $e) printf("échec de la connexion : %s\n", $e->getmessage()); exit(); $sql="select * FROM matable"; if(!$connexion->query($sql)) echo "Pb d'accès au CARNET"; else foreach ($connexion->query($sql) as $row) echo $row['id']." ". $row['champ1']." sy ". $row['champ2']."<br/>\n"; Hery Haja Prod. Août 2016 PAW SERVER 10
Voir (Codes sources/base de données/ conn_sqlite_pdo_php.php) Autre logiciel disponible pour créer un server androïd PHP MYSQL : - TELECHARGER LOGICIEL ANDROPHP Voir Dossier «Logiciel/AndroPHP_1.2.0.apk» Après installation les fichiers racines www et phpinfo.php et phpmyadmin sont disponible Affichage optimal : Responsive. Entrez dans head : <meta name= «viewport» content= «width=device-width,initial-scale=1.0»> ---------------- Hery Haja Prod. Août 2016 PAW SERVER 11