IA PHP Python
Criando um chatbot – Parte 1

Neste artigo iremos dar inicio a criação de um chatbot. Ele estará sendo hospedado em um raspberry pi.

Utilizando PHP, AngularJS e Python.

Este artigo é uma continuação do artigo anterior, que pode servir de referência:

http://maurinsoft.com.br/index.php/2022/05/27/integrando-python-com-php/

Eu apresentarei uma introdução hoje ao Angularjs e o PHP, onde apenas depois mostrarei a parte do Python e do IA propriamente dito.

Este estudo faz parte do estudo da minha Pós graduação na UNINOVE.

Primeiramente iremos escrever o javascript ctlr_test.js



		angular.module("App",[]);
		angular.module("App").controller("TesteCtrl", function ($scope,$http) {
			$scope.app = "Teste Chatbot";
			$scope.texto = "";
			$scope.pergunta = "";
			$scope.msg = "Dúvidas entre em contato com marcelomaurinmartins@gmail.com";
			$scope.resposta = "Sem resposta";
			$scope.url = "http://maurinsoft.com.br/python/runpy.php?pergunta?"+$scope.pergunta;

			$scope.IncluiResposta = function() {
			   $scope.texto = $scope.texto . $scope.resposta;
			}
			$scope.displayResposta = function() {
				$http.get("http://maurinsoft.com.br/python/runpy.php?pergunta="+$scope.pergunta)
				.success(function(data)
				{
					//console.log(data);
					$scope.data = data.rs[0];
					$scope.resposta = data.rs[0].resposta;
					$scope.texto = $scope.texto + "Pergunta:"+$scope.pergunta+'\n';
					$scope.texto = $scope.texto + "Resposta:"+$scope.resposta+'\n';
					$scope.msg = "Resposta obtida!";
				})
				.error(function(erro)
				{
					//console.log(erro);
					$scope.msg = "Pesquisa retornou vazia";
					$scope.data = null;
				})
			}
		});

Nele chamamos a função IncluiResposta , que envia a resposta para o web service(ws), que recebe a resposta e devolve para o browser.

Ao enviar a solicitação, a mesma é processada pelo ws, que devolve um json, na figura abaixo, vemos a execução direta do json, simulando a pergunta do browser.

Depois iremos criar o index.php , que monta uma interface para ser mostrada na tela.

<!DOCTYPE HTML>
	<HTML  ng-app="App" LANG="PT-BR">
	<head>
		<meta charset="UTF-8"/>
		<meta name="description" content="Maurinsoft"/>
		<meta name="viewport" content="width=device-width, initial-scale=1"/>
		<title>Teste de Chatbot</title>

		<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>

		<!-- jQuery library -->
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>



		<link rel="stylesheet" href="../../libs/bootstrap/css/bootstrap.css"/>
		<link rel="stylesheet" href="../../libs/bootstrap/css/bootstrap-theme.min.css"/>
		<link rel="stylesheet" href="style.css"/>
		<script src="https://code.angularjs.org/1.6.4/angular.js"></script>
		<script src="js/ctlr_test.js"></script>

	</head>
	<body ng-controller="TesteCtrl">
		<video autoplay loop poster="img/logo.jpg" class="bg_video">
			<source src="video/fundo.webm" type="video/webm">
			<source src="video/fundo.mp4" type="video/mp4">
		</video>
		<div class="container">
			<!--Caixa titulo -->
			<div class="row  borda_container">
				<div class="col-xs-2 ">
					<img src="img/logo.png" alt="Tutorial de CSS" title="Logo do CSS"  width="100" height="100"/>
				</div>
				<div class="col-xs-10 Logo ">
					<h1 class="titulo">{{app}}</h1>
				</div>
			</div>
			<div class="row separacao">
			</div>

			<!--Login -->
			<div class="row">

			</div>

			<!--Menu Item-->
			<div class="row">
					<div class="col-xs-12 menu">
						<div class="row">
						  <h4 class="menu_titulo">Conversa</h4>
						</div>

						<div class="row container col-xs-12">
						   <textarea type="text"  style=" top:500px;height:200px;width:600px; left:470px; overflow:hidden;" class="col-md-10" >{{texto}}</textarea>
						</div>
						<div class="info_help">
					   	 <div class="row col-md-12">
						    <h4>Perguta</h4>
						 </div>
						 <div class="row container">
						    <div class="col-md-8">
						      <input type="text" value="{{pergunta}}" ng-model="pergunta" name="Pergunta">
						    </div>
						    <div class="col-md-2">
						     <input type="submit" value="Enviar" ng-click="displayResposta()">
						    </div>
						 </div>
						</div>
					</div>
			</div>
		</div>
		<div class="row rodape_container">
			  <div class="row">
			  <center>{{msg}}</center>
			  </div>

		</div>
		<script type="text/javascript" src="../../libs/bootstrap/js/bootstrap.js"></script>
	</body>
	</html>

Chamada do lado do WS

No webservice, o python é chamado, que realiza toda a analise da pergunta.

Fonte do runpy.php, que é o web service.

<?php
    /*phpinfo();*/
	/*Registra webservice para processamento de jobs*/
	ini_set('display_errors', 'ON');
	error_reporting(E_ALL);

	header('Content-Type: application/json');  // <-- header declaration

	include "/var/www/html/ws/connectdb.php";

	//header('Cache-Control: no-cache, must-revalidate');




$data = json_decode(file_get_contents("php://input"));

if($data){
		$pergunta = $dbhandle->real_escape_string($data->pergunta);
} else {
		$pergunta = $dbhandle->real_escape_string($_GET['pergunta']);
}


$json =  '{"rs":[';
if($pergunta){
  $command = escapeshellcmd('/var/www/html/python/nlp.py "'.$pergunta.'" > /var/log/proclog.log');
  $resposta = shell_exec($command);
  $resposta = str_replace (array("\r\n", "\n", "\r"), ' ', $resposta);

  if($resposta){
     $json = $json  . '{';
     $json = $json  .  '"pergunta":"'.$pergunta.'",';
     $json = $json  .  '"resposta":'.$resposta;
     $json = $json  .  '}';
  } else {
	 $json = $json  . '{';
	 $json = $json  .  '"pergunta":"'.$pergunta.'",';
     $json = $json  .  '"resposta":"'.'sem resposta'.'"';
	 $json = $json  .  '}';
  }
} else {
	$json = $json  . '{';
	$json = $json  .  '"pergunta":"'.$pergunta.'",';
    $json = $json  .  '"resposta":"'.'sem resposta'.'"';
	$json = $json  .  '}';
}
$json = $json  .  ']}';

echo $json


?>

O armazenamento das solicitações, podem ser gravadas pelo webservice, que permite gravar as respostas, para aprimoramento posterior.

Fonte do nlp.py, que gera a analise em python.

#!/usr/bin/env python3

#import pandas as pd
import sys
import numpy as np
import math
import time
import re
import random


pergunta = f'"{sys.argv[1]}"'

resposta = "Desculpe, não achei uma resposta válida"

#Iniciando o processo de analise de dados



#Devolvendo o modelo para o ws
resposta= "\"%s\""%(resposta)
print(resposta)

Neste exemplo simples porem integral, podemos notar o processo completo de desenvolvimento de chatbot, sem a implementação da parte do python, que abordaremos nos próximos tópicos.

URL do projeto

http://maurinsoft.com.br/index.php/2022/06/30/chatbot-no-wordpress/

IA PHP Python
Integrando Python com PHP

Neste artigo abordarei como rodar rotinas em python integrado com PHP.

Para exemplificar este projeto, estarei criando uma pagina PHP, conforme se segue:

<?php
    /*phpinfo();*/
	/*Registra webservice para processamento de jobs*/
	ini_set('display_errors', 'ON');
	error_reporting(E_ALL);

	include "/var/www/html/ws/connectdb.php";

	//header('Cache-Control: no-cache, must-revalidate');


$data = json_decode(file_get_contents("php://input"));


$data = json_decode(file_get_contents("php://input"));
if($data){
		$pergunta = $dbhandle->real_escape_string($data->pergunta);
} else {
		$pergunta = $dbhandle->real_escape_string($_GET['pergunta']);
}



if($pergunta){
  $command = escapeshellcmd('/var/www/html/python/nlp.py "'.$pergunta.'" > /var/log/proclog.log');
  $resposta = shell_exec($command);

  if($resposta){
  echo '{"rs":[';
  echo '{';
  echo '"pergunta":'.$pergunta.',';
  echo '"resposta":'.$resposta;
  echo '}]}';
  } else {
    echo "sem resposta";
  }
} else {
	echo "sem pergunta";
}


?>

Neste programa chamamos o comando shell_exec para executar o comando python.

Ao chamar o programa python, devemos chamar, conforme apresentado.

#!/usr/bin/env python3

#import pandas as pd
import sys


pergunta = f'"{sys.argv[1]}"'

resposta= '"ok"'
print(resposta)

O detalhe que é importante é o comando /usr/bin/env chamando o python, que é destinado a transformar em um script python.

Para finalizar segue o link do url de teste:

http://maurinsoft.com.br/python/runpy.php?pergunta=teste2

O resultado é um JSON, conforme apresentado:

{"rs":[{"pergunta":teste2,"resposta":"ok" }]}

Instalando pacotes

Para adicionar pacotes basta rodar como administrador o comando:

pip3 install numpy

Exemplo de instalação do numpy

Mysql PHP Programação Python
Mysql com C/Lazarus/Python/PHP/R – Parte 4

Neste penultimo artigo, mostrarei como ler JSON com mysql.

Para não me repetir, pois já apresentei isso anteriormente, no artigo abaixo:

http://maurinsoft.com.br/index.php/2019/03/09/usar-o-mysql-com-python/
Usando mysql diretamente com python.

Resolvi fazer diferente.

No artigo de PHP, mostrei um web service, que consumi com AngularJS/BootStrap:

http://maurinsoft.com.br/index.php/2022/02/04/mysql-com-c-lazarus-python-php-r-parte-3/

Agora neste artigo, vou consumir tambem o web service.

GIT do Projeto

https://github.com/marcelomaurin/PythonJS

Exemplo do Código

Client WebService

Neste exemplo, consumimos o web service, onde recebemos o JSON.

import requests
import codecs
import json

api_url = "http://maurinsoft.com.br/exemplos/phpmysql/ws/Pessoa.php"
response = requests.get(api_url)
response.headers['content-type']
#response.encoding
#response.text
#print(response.text)
#response.text.encode('utf-8-sig','ignore')
#print(response);
info = ""
if(response.text!={}):
    dados = codecs.decode(response.text.encode(),'utf-8-sig')
    js = json.loads(dados)
    print(js)
    #print(js.count())

Usando PANDAS

Neste segundo exemplo, podemos verificar uma ligeira diferença, pois estamos convertendo os dados para Pandas. ankara escort çankaya escort ankara escort çankaya escort escort ankara çankaya escort escort bayan çankaya istanbul rus escort eryaman escort escort bayan ankara ankara escort kızılay escort istanbul escort ankara escort ankara rus escort escort çankaya ankara escort bayan istanbul rus Escort atasehir Escort beylikduzu Escort Ankara Escort malatya Escort kuşadası Escort gaziantep Escort izmir Escort

from urllib.request import urlopen
import json
import pandas as pd

response = urlopen("http://maurinsoft.com.br/exemplos/phpmysql/ws/Pessoa.php")
json_data = response.read().decode('utf-8-sig', 'replace')

d = json.loads(json_data)
df = pd.json_normalize(d[0])

print(df)

Espero ter auxiliado os amigos, neste interessante artigo.

Artigos relacionados

    Blog C/C++ Dicas PHP Python Sem categoria
    Validação de JSON ONLINE

    Uma boa dica para quem esta montando seus JSONS, é que existem alguns sites que validam seu JSON.

    Um bom exemplo disso é o site:

    https://jsonformatter.curiousconcept.com/#

    Ele permite validar erros de JSON. ankara escort çankaya escort ankara escort çankaya escort escort ankara çankaya escort escort bayan çankaya istanbul rus escort eryaman escort escort bayan ankara ankara escort kızılay escort istanbul escort ankara escort ankara rus escort escort çankaya ankara escort bayan istanbul rus Escort atasehir Escort beylikduzu Escort Ankara Escort malatya Escort kuşadası Escort gaziantep Escort izmir Escort

    Blog Mysql PHP Programação
    Mysql com C/Lazarus/Python/PHP/R – Parte 3

    Seguindo com nossos artigos, irei incluir agora uma aplicação em PHP, consumindo Mysql.

    Este artigo é o terceiro, sobre esse tema, onde irei abordar o uso do mysql em diversas linguagens.

    Neste artigo especifíco abordarei o uso no PHP.

    GITHUB

    Iremos criar em nosso projeto:

    https://github.com/marcelomaurin/mysql-vs-todos

    Será criado uma pasta chamada PHP, esta pasta, conterá o material necessário para rodar a aplicação.

    Pré requisitos

    Instale os seguintes pacotes em sua máquina Ubuntu

    apt install apache2

    Instale os pacotes

    apt install php libapache2-mod-php php7.4-mysql php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-intl -y

    apt install python3-certbot-apache

    Pronto instalação realizada com sucesso, conforme a contraprova.

    PHP recem instalado

    Criação dos códigos

    Criação da Página Principal

    Usaremos como interface o boot strap, para gerar uma interface bonita e simples de usar.

    Usaremos o modelo MVC (Model , View , Control), que divide a página em 3 partes.

    Abordarei o projeto em detalhes parte a parte.

    Sempre lembrando que os fontes encontram-se no git.

    Para visualização de como ficará no PHP, podemos acessar o link:

    http://maurinsoft.com.br/exemplos/phpmysql/

    Atribuíndo a conexão

    A conexão de todos os scripts são definidos pelo código connectdb.php, conforme fragmento abaixo:

    <?php
    	define("HOSTNAME","localhost");
    	define("USERNAME","php");
     	define("PASSWORD","123456");
    	define("DATABASE","testedb");
    ?>
    
    $dbhandle = new mysqli(HOSTNAME, USERNAME, PASSWORD, DATABASE) or die("Erro ao conectar no banco de dados");

    Nele definimos as definições de conexão que podemos chamar nos demais programas.

    Web Service do PHP

    Acesso a base de Pessoas, eu criei um web service bem simples.

    Meu web service possui 4 serviços:

    • dPessoa.php – Apaga um registro
    • iPessoa.php – Inclui um registro de pessoa
    • sPessoa.php – Pesquisa um conjunto de pessoas
    • uPessoa.php – Atualiza o cadastro de uma pessoa.

    O Serviço pode ser visto no caminho:

    http://maurinsoft.com.br/exemplos/phpmysql/ws/

    Todos os web services são baseados em GET para obter os parametros, segue o código do sPessoa.php:

    <?php<?php
        /*phpinfo();*/
    	/*Registra webservice para processamento de jobs*/
    	ini_set('display_errors', 'Off');
    	error_reporting(E_ALL);
    
    	include "connectdb.php";
    
    	//header('Cache-Control: no-cache, must-revalidate');
    	//$data = var_dump(json_decode(file_get_contents("php://input")));
    	$data = json_decode(file_get_contents("php://input"));
    	if($data){
    		$idpessoa = $dbhandle->real_escape_string($data->idpessoa);
    		$nome = $dbhandle->real_escape_string($data->nome);
    		$profissao = $dbhandle->real_escape_string($data->profissao);
    		$sexo = $dbhandle->real_escape_string($data->sexo);
    		$dtnasc = $dbhandle->real_escape_string($data->dtnasc);
    	} else {
    		$idpessoa = $dbhandle->real_escape_string($_GET['idpessoa']);
    		$nome = $dbhandle->real_escape_string($_GET['nome']);
    		$profissao = $dbhandle->real_escape_string($data->profissao);
    		$sexo = $dbhandle->real_escape_string($data->sexo);
    		$dtnasc = $dbhandle->real_escape_string($data->dtnasc);
    	}
    
    
    	$query = "select * from pessoas";
    	$sqlwhere = "";
    	if(!empty($idpessoa)){
    		$sqlwhere = " where (idpessoa = ".$idpessoa.");";
    	}
    	if(!empty($nome)){
    		if($sqlwhere){
    			$sqlwhere = $sqlwhere." and (nome like '%".$nome."%');";
    		} else {
    			$sqlwhere = " where (nome like '%".$nome."%');";
    		}
    	}
    	if(!empty($profissao)){
    		if($sqlwhere){
    			$sqlwhere = $sqlwhere." and (profissao like '%".$profissao."%');";
    		} else {
    			$sqlwhere = " where (profissao like '%".$profissao."%');";
    		}
    	}
    	if(!empty($sexo)){
    		if($sqlwhere){
    			$sqlwhere = $sqlwhere." and (sexo = '".$sexo."');";
    		} else {
    			$sqlwhere = " where (sexo = '".$sexo."');";
    		}
    	}
    	if(!empty($dtnasc)){
    		if($sqlwhere){
    			$sqlwhere = $sqlwhere." and (dtnasc = '".$dtnasc."');";
    		} else {
    			$sqlwhere = " where (dtnasc = '".$dtnasc."');";
    		}
    	}
    	$query = $query . $sqlwhere;
    
    	//echo $query."<br/>";
    
    	$rs = $dbhandle->query($query);
    
    	//print json_encode($rs);
    
    	$cont = 0;
    
    	echo '{"rs":[';
    	$row=$rs->fetch_assoc();
    	if($row){
    		do
    		{
    			if($cont!=0)
    			{
    				echo ',';
    			}
    			echo '{';
    			echo '"idpessoa":"'.$row['idPessoa'].'",';
    			echo '"nome":"'.$row['nome'].'",';
    			echo '"profissao":"'.$row['profissao'].'",';
    			echo '"dtnasc":"'.$row['dtnasc'].'",';
    			echo '"sexo":"'.$row['sexo'].'"';
    			echo '}';
    			$cont ++;
    		} while($row=$rs->fetch_assoc());
    	}
    	echo ']}';
    	if ($cont>0)
    	{
    		echo($strJSON);
    	}
    
    
    ?>
    

    Neste fragmento, temos um web service muito simplificado.

    Onde criamos uma conexão com o banco de dados,

    No proximo passo, capturamos os parametros, que podem ser 4:

    • idpessoa – codigo do registro que será pesquisado
    • nome – nome da pessoa que será pesquisada
    • profissão – profissao da pessoa que será pesquisada
    • sexo – Sexo da pessoa que será pesquisada

    Os parametros passados, podem ou não retornar um unico registro.

    Por fim o json é montado, convertendo o conjunto de itens encontrados em uma expressão json.

    Para testar o web service, é necessário rodar conforme o link.

    Exemplo de JSON criado

    Visualização

    Select

    http://maurinsoft.com.br/exemplos/phpmysql/ws/sPessoa.php?idpessoa=1

    Insert

    http://maurinsoft.com.br/exemplos/phpmysql/ws/iPessoa.php?nome=Marcelo&dtnasc=2021-01-01&profissao=Analista&sexo=M

    Delete

    http://maurinsoft.com.br/exemplos/phpmysql/ws/dPessoa.php?nome=Marcelo

    Update

    http://maurinsoft.com.br/exemplos/phpmysql/ws/uPessoa.php?pesnome=Marcelo&nome=Marcella&profissao=Tecnica Informatica&sexo=F&dtnasc=2002-01-16

    Front End

    O index.php – e o front end, ele é responsável pela troca de informações entre o browser e os demais componentes.

    Link do front end:

    http://maurinsoft.com.br/exemplos/phpmysql/index.php

    Segue o formulario:

    No Front End, desenvolvido no modelo MVC, criamos 3 elementos.

    O index.php, que mostrará as informações encontradas.

    
    <?php
      //Controla o Debug no projeto
      ini_set('display_errors', 'On');
    
      include "sessao.php";
      include "config.php";
      include "funcs.php";
    ?>
    
    <html>
    	<header>
    		<title>Cadastro de Pessoas</title>
    		<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script>
    		<!-- Latest compiled and minified CSS -->
    		<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    
    		<!-- jQuery library -->
    		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    
    		<!-- Latest compiled JavaScript -->
    		<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    
    	</header>
    	<body>
    
    
    		<div ng-app="Pessoas" ng-controller="cntrl" >
    			<div class="container-fluid bg-1 text-rigth">
    				<form>
    					<?  Pesquisar Itens ?>
    					<div class="jumbotron">
    							<h1>Cadastro de Pessoas</h1>
    							<p>Modelo de aplicação MVC, conforme <a href="http://maurinsoft.com.br/index.php/2022/02/04/mysql-com-c-lazarus-python-php-r-parte-3/">Artigo publicado.</a></p>
    							<p>Para maiores informações <a href="mailto:marcelomaurinmartins@gmail.com">marcelomaurinmartins@gmail.com</a></p>
    					</div>
    					<div class="row">
    						<div class="col-sm-1">idPessoa:</div>
    						<div class="col-sm-2"><input class="form-control" placeholder="idPessoa (opcional)" type="text" ng-model="pidpessoa" name="pidpessoa"></div>
    					</div>
    					<div class="separador">
    					</div>
    					<div class="row">
    						<div class="col-sm-1">Nome:</div>
    						<div class="col-sm-4"><input class="form-control" placeholder="nome (opcional)" type="text" ng-model="pnome" name="pnome"></div>
    					</div>
    					<div class="separador">
    					</div>
    
    					<div class="row">
    						<div class="col-sm-1">Profissão:</div>
    						<div class="col-sm-4"><input class="form-control" placeholder="profissao (opcional)" type="text" ng-model="pprofissao" name="pprofissao"></div>
    					</div>
    					<div class="separador">
    					</div>
    					<div class="row">
    					    <div class="col-sm-1">Dt. Nascimento:</div>
    						<div class="col-sm-4"><input class="form-control" placeholder="dt Nascimento (yyyy-mm-dd) (opcional)" type="text" ng-model="pdtnasc" name="pdtnasc"></div>
    					</div>
    					<div class="separador">
    					<div class="row">
    					    <div class="col-sm-1">Sexo:</div>
    						<div class="col-sm-4"><input class="form-control" placeholder="Genero sexual (M/F) (opcional)" type="text" ng-model="psexo" name="psexo"></div>
    					</div>
    					<div class="separador">
    					</div>
    					<div class="row">
    						<div class="col-sm-1"></div>
    						<div class="col-sm-4"></div>
    						<div class="col-sm-1"> <input type="button" class="btn btn-primary"  value="Pesquisar" ng-click="displayPessoa(pidpessoa,pnome,pprofissao,psexo,pdtnasc)" > </div>
    						<div class="col-sm-1">  </div>
    						<div class="col-sm-1"> <input type="button" class="btn btn-primary"  value="Novo Item" ng-click="newPessoa(pidpessoa)" > </div>
    
    					</div>
    
    
    					<? Retorno de mensagem de erro ?>
    					<div class="info">
    						<div class="control-label">Alerta:</div>
    						<div class="info">{{msg}}</div>
    					</div>
    				</form>
    			</div>
    			<? layout da tabela de resposta ?>
    			<div class="container-fluid bg-1 text-rigth">
    
    				<? **Cadastrar itens** ?>
    				<div id="cadastro" ng-style="disableInsert" >
    					<div class="row">
    						<div class="col-sm-12"> <h3>Operação Insert registro </h3></div>
    					</div>
    					<div class="row">
    						<div class="col-sm-1 control-label"> Nome: </div>
    						<div class="col-sm-4"> <input  class="form-control" placeholder=" Nome da pessoa" type="text" ng-model="nome" name="nome"> </div>
    					</div>
    					<div class="row">
    						<div class="col-sm-1 control-label"> Profissão</div>
    						<div class="col-sm-4"> <input class="form-control"  placeholder=" Profissão da pessoa" type="text" ng-model="profissao" name="profissao"></div>
    					</div>
    					<div class="row">
    						<div class="col-sm-1 control-label"> Dt. Nascimento</div>
    						<div class="col-sm-4"> <input class="form-control"  placeholder=" Dt nascimento (YYYY-mm-dd)" type="text" ng-model="dtnasc" name="dtnasc"></div>
    					</div>
    					<div class="row">
    						<div class="col-sm-1 control-label">Sexo</div>
    						<div class="col-sm-4"> <input class="form-control"  placeholder=" Sexo de Nascimento (M/F)" type="text" ng-model="sexo" name="sexo"></div>
    					</div>
    					<div class="row">
    						<div class="col-sm-4"></div>
    						<div class="col-sm-1 control-label">  </div>
    						<div> <input type="button" class="btn btn-primary" value="submit" ng-click="insertPessoa()" > </div>
    					</div>
    				</div>
    			</div>
    
    			<div class="container-fluid bg-1 text-rigth">
    
    				<? *** Update *** ?>
    				<div id="edicao" ng-style="disableUpdate" class="container-fluid bg-1 text-rigth">
    					<div class="row">
    						<div class="col-sm-12"> <h3>Operacao de Edicao</h3></div>
    					</div>
    					<div class="row">
    						<div class="col-sm-1 control-label"> idPessoa:</div><div> {{edidpessoa}}</div>
    					</div>
    					<div class="row">
    						<div class="col-sm-1 control-label"> Nome</div>
    						<div class="col-sm-4"> <input class="form-control"  type="text" ng-model="ednome" name="ednome"></div>
    					</div>
    					<div class="row">
    						<div class="col-sm-1 control-label"> Profissão</div>
    						<div class="col-sm-4"> <input class="form-control"  type="text" ng-model="edprofissao" name="edprofissao"></div>
    					</div>
    					<div class="row">
    						<div class="col-sm-1 control-label"> Dt. Nascimento</div>
    						<div class="col-sm-4"> <input class="form-control"  type="text" ng-model="eddtnasc" name="eddtnasc"></div>
    					</div>
    					<div class="row">
    						<div class="col-sm-1 control-label">Sexo</div>
    						<div class="col-sm-4"> <input class="form-control"  type="text" ng-model="edsexo" name="edsexo"></div>
    					</div>
    					<div class="row">
    						<div class="col-sm-4"></div>
    						<div class="col-sm-1"> <button class="btn btn-primary" ng-click="updatePessoa(edidpessoa,ednome, edprofissao, eddtnasc, edsexo)">Atualizar</button></div>
    					</div>
    				</div>
    			</div>
    
    			<div class="container-fluid bg-1 text-rigth">
    				<div class="row">
    				<hr>
    				</div>
    			</div>
    
    			<? ** Tela de Resultado **?>
    			<div class="container-fluid bg-1 text-rigth">
    				<table class="table table-striped">
    					<thead>
    						<tr>
    							<th>IdPessoa</th>
    							<th>Nome</th>
    							<th>Profissão</th>
    							<th>Dt. Nascimento</th>
    							<th>Sexo</th>
    
    						<tr>
    					</thead>
    					<tbody>
    						<tr ng-repeat="dados in data.rs">
    							<td>{{dados.idpessoa}}</td>
    							<td>{{dados.nome}}</td>
    							<td>{{dados.profissao}}</td>
    							<td>{{dados.dtnasc}}</td>
    							<td>{{dados.sexo}}</td>
    							<td><button class="btn btn-primary" ng-click="deletePessoa(dados.idpessoa);">Delete</button></td>
    							<td><button class="btn btn-primary" ng-click="HabilitaEdicao(dados);">Edit</button></td>
    						</tr>
    					</tbody>
    				</table>
    
    
    			</div>
    
    
    
    			<? *** Controler *** ?>
    			<script>
    				var app = angular.module('Pessoas',[]);
    				app.controller('cntrl', function($scope,$http)
    				{
    				    $scope.disableUpdate = {'display': 'none'}; //Atribui Edicao invisivel
    					$scope.disableInsert = {'display': 'none'}; //Atribui Edicao invisivel
    
    					//Mostra  os Jobs
    					$scope.insertPessoa=function()
    					{
    						$http.post("/exemplos/phpmysql/ws/iPessoa.php",{'nome':$scope.nome,'profissao':$scope.profissao,'dtnasc':$scope.dtnasc,'sexo':$scope.sexo})
    						.success(function()
    						{
    							$scope.msg = "nome foi cadastrado com sucesso";
    							$scope.displayPessoa();
    						})
    					}
    
    					$scope.displayPessoa=function(pidpessoa,pnome,pprofissao,psexo,pdtnasc)
    					{
    					    $scope.disableUpdate = {'display': 'none'}; //Atribui Edicao invisivel
    						$scope.disableInsert = {'display': 'none'}; //Atribui Edicao invisivel
    
    						if (typeof pidpessoa == "undefined")
    						{
    							pidpessoa = "";
    						}
    						if (typeof pnome == "undefined")
    						{
    							pnome = "";
    						}
    						if (typeof psexo == "undefined")
    						{
    							psexo = "";
    						}
    						if (typeof pprofissao == "undefined")
    						{
    							pprofissao = "";
    						}
    						if (typeof pdtnasc == "undefined")
    						{
    							pdtnasc = "";
    						}
    
    						var params = {"idpessoa": pidpessoa, "nome": pnome, "profissao": pprofissao, "sexo": psexo, "dtnasc": pdtnasc };
    						var config = {params: params};
    
    
    						$http.get("/exemplos/phpmysql/ws/sPessoa.php",config)
    						.success(function(data)
    						{
    							$scope.data = data;
    							$scope.msg = "Tela Atualizada!";
    						})
    						.error(function()
    						{
    							$scope.msg = "Pesquisa retornou vazia";
    							$scope.data = null;
    						})
    					}
    
    					$scope.deletePessoa=function(idpessoa)
    					{
    						$http.post("/exemplos/phpmysql/ws/dPessoa.php",{'idpessoa':idpessoa})
    						.success(function()
    						{
    							$scope.displayPessoa();
    							$scope.msg = "Registro excluido!";
    						})
    					}
    
    					//Mostra  os Jobs
    					$scope.newPessoa=function()
    					{
    						$scope.disableInsert = {'display': 'block'};
    						$scope.disableUpdate = {'display': 'none'};
    						$scope.edidpessoa = "";
    						$scope.ednome = "";
    
    					}
    
    					$scope.HabilitaEdicao=function(dado)
    					{
    						$scope.disableUpdate = {'display': 'block'};
    						$scope.edidpessoa = dado.idpessoa;
    						$scope.ednome = dado.nome;
    					}
    
    
    					$scope.updatePessoa=function(edidpessoa, ednome, edprofissao, eddtnasc, edsexo)
    					{
    						$http.post("/exemplos/phpmysql/ws/uPessoa.php",{'pesidpessoa':edidpessoa,'nome':ednome,'profissao':edprofissao,'dtnasc':eddtnasc,'sexo':edsexo})
    						.success(function()
    						{
    							$scope.displayPessoa();
    							$scope.msg = "Registro excluido!";
    
    							$scope.disableUpdate = {'display': 'none'};
    							$scope.displayPessoa();
    						})
    					}
    
    				});
    			</script>
    
    
    		</div>
    	</body>
    </html>

    Podemos notar que todo o serviço pesado é realizado pelo web service, ficando a responsábilidade apenas do controler de consumir as informações passadas.

    Não entrarei no detalhe técnico do PHP, nem em detalhes sobre o modelo MVC.

    Deixarei tal atividade para um post em momento oportuno.

    Conclusão

    O PHP é uma linguagem robusta e intuitiva, permitindo escrita elegante de um código limpo e eficiente.

    Eu no entanto, não me considero um programador excepcional em PHP, apenas quebro o galho, criando algumas páginas e cumprindo um papel menor.

    O PHP é muito mais que apresentado aqui, porem sei que isso será suficiente para dar um norte para muitos.

    Espero ter ajudado, e caso tenham gostado do artigo, mandem um email para mim.

    ,

    Referências

    https://www.cloudbooklet.com/how-to-install-lamp-apache-mysql-php-in-ubuntu-20-04/

    https://getbootstrap.com/docs/5.1/examples/navbar-static/

    Artigos Relacionados

      Banco de dados C/C++ Delphi Lazarus Mysql PHP Python R
      Mysql com C/Lazarus/Python/PHP/R – Parte 1

      Neste super tutorial, iremos abordar a Conexão do Mysql com estas 5 linguagens.

      Na primeira parte do tutorial, iremos abordado o Mysql própriamente dita, onde faço a instalação e configuração.

      Nos próximos posts abordarei cada linguagem individualmente.

      Mysql

      Mysql é um banco fornecido pela Oracle, muito utilizado em aplicações embarcadas e web.

      De forma geral é um banco sólido, com uma ampla gama de aplicações, e seguro.

      Instalação no Linux / Ubuntu

      A instalação do servidor mysql é muito simples.

      apt install mysql-server

      Instalação do mysql server em Linux

      A instalação do Mysql é muito simples, e instala os principais componentes.

      Instalação do Mysql

      Vídeo de demonstração

      Instalação do Mysql

      Criando um banco de dados

      Agora, iremos criar um projeto de banco de dados bem simples.

      A idéia é basicamente permitir CRUD nos demais artigos. Para quem não conhece o CRUD, é a abreviação (Create, Read, Update, Delete).

      Para nos ajudar, irei criar um git, do projeto.

      Ambiente de desenvolvimento

      A instalação do ambiente de desenvolvimento precisa ser feito através da lib:

       apt-get install libmysqlclient-dev 

      A lib acima, instala os headers e .so para integração com C e outras linguagens, como Lazarus.

      A medida que avancemos nos demais artigos, irei incluindo aqui, as bibliotecas para as demais linguagens tambem. Então fique atento.

      GIT

      https://github.com/marcelomaurin/mysql-vs-todos

      SCRIPTS

      Agora iremos criar o Nosso Makefile para carregar os scripts:

      Arquivo Makefile

      # Script de criacao do banco de dados
      # Autor Marcelo Maurin Martins
      # Daa: 31/01/2022
      #
      
      
      APP=mysql
      
      all:  database Tabelas
      database:
      	$(APP)  < database.sql
      Tabelas:
      	$(APP) < pessoas.sql
      

      Em seguida iremos criar o script de criação da base de dados, database.sql:

      #Cria um banco de dados em Mysql
      #Autor: Marcelo Maurin Martins
      #31/01/2022
      
      
      create database IF NOT EXISTS `testedb`;

      E por fim nossa tabela pessoas.sql

      #Cria a tabela de pessoas
      #Autor: Marcelo Maurin Martins
      #31/01/2022
      
      use testedb;
      
      create table if not exists pessoas
      (
         idPessoa INT(6) unsigned auto_increment primary key,
         nome varchar(30) not null,
         dtnasc date,
         profissao varchar(20),
         sexo char(1),
         dtchg timestamp default current_timestamp on update current_timestamp,
         dtcad timestamp default current_timestamp
      );
      

      Executando Scripts

      Entre na pasta scripts, para que possamos criar nossas estruturas de banco.

      Digite o comando:

      make

      executa a criação do banco

      A figura abaixo mostra sua execução

      Exemplo do script do banco de dados

      Por fim mais um vídeozinho

      Procedimento de instalação dos scripts

      Permissões

      Ao montar o segundo artigo lembrei que para melhorar este artigo, o ideal seria criar uma conta especifica para cada aplicação. Desta forma criei um scripts novo chamado GRANTS.SQL

      Desta forma, existe essa ultima etapa. Que precisamos, que será criar um usuário para acesso a aplicação:

      Criando o usuario:

      CREATE USER 'seu_usuario'@'localhost' IDENTIFIED BY 'suasenha';

      Dando permissão:

      GRANT ALL PRIVILEGES ON * . * TO 'seu_usuario'@'localhost';

      Finalizando

      FLUSH PRIVILEGES;

      Este procedimento será validado, quando digitarmos

      mysql -h localhost -u gcc -p

      Conectando em banco de dados

      Pois se as permissões não estiverem corretas o usuario não conecta.

      Sempre que avançarmos em uma etapa, um novo usuário será criado, neste script.

      Então não estranhem se eventualmente os scripts sofrerem modificação no git.

      Cenas do próximos capítulos

      Agora que preparamos a cama, iremos começar a codificar nela. No próximo artigo iremos criar um crud em C para cadastrar pessoas.

      Até a próxima.

      Referências

      https://stackoverflow.com/questions/838978/how-to-check-if-mysql-database-exists

      https://stackoverflow.com/questions/11739014/how-to-generate-a-create-table-script-for-an-existing-table-in-phpmyadmin

      https://stackoverflow.com/questions/6239131/how-to-grant-remote-access-permissions-to-mysql-server-for-user

      https://linuxize.com/post/how-to-create-mysql-user-accounts-and-grant-privileges/

      Artigos Relacionados

        PHP
        Programação PHP Integrada ao R

        O Desenvolvimento e analise de dados não é tarefa fácil.

        Integrar o R com outras linguagens é o segredo para analisar grande volume de dados em tempo real, gerando vetores e gráficos.

        Um exemplo deste é a Webapi que criei para linguagem PHP:

        http://maurinsoft.com.br:8090/ws/graphic.php

        Esta web api, gera um arquivo de imagem com um gráfico.

        Ao chamar o URL, é chamado em tempo de execução um script em R, que gera a imagem e armazena em um repositório.

        É possível criar diversos scripts com o mesmo URL, basta indicar nos parametros o script em R que deverá ser rodado.

        No caso do default.R, lê as informações processadas do sensor de chuva, que aponta quando ocorre precipitação de chuva em minha casa.

        Valore altos de 900 até 1024, indicam tempo seco.

        A imagem é armazenada neste endereço.

        Neste exemplo, o R processou o seguinte comando SQL

        select

        devvalue, dtupdate

        from logdevpar

        where

        devparname=’dev3′

        and iddevice=’2′

        and (dtupdate>=( DATE_SUB(CONCAT(CURDATE(), ‘ 00:00:00’), INTERVAL 1 DAY) ))

        order by dtupdate

        limit 100

        maurinsoft.com.br