MNote2 Mysql Postgres
MNote 2.15

Na versão 2.15, realizamos uma série de ajustes no MQuery.pas, onde refinamos o código das tabelas, e incluímos o nome do database, abaixo das demais informações.

Alinhamento das tabelas

Houve poucas mudanças visuais no código, porem muitas mudanças internas.

Implementação do código de registro.

Foram criados as versões para Plataformas windows, linux e ARM Linux nesta release.

Lazarus MNote2 Mysql pacotes POSTGRES
Versão 2.13 Linux e Windows

Nesta Versão 2.13, foram corrigidos diversos bugs, incluindo tambem uma versão Linux 64bits.

Versão Linux 64bits – Rodando Ubuntu

Todas as compatibilidades da versão 2.13 do windows, agora estão no Linux Ubuntu.

Baixe agora mesmo o pacote:

https://github.com/marcelomaurin/MNote2/blob/master/bin/mnote2-2.13_amd64.deb

Consulte a documentação do projeto:

http://maurinsoft.com.br/index.php/projetos-open-source/projeto-mnote2/

Vídeos

Assista o vídeo do projeto no Linux Ubuntu 64 bits.

Vídeo em Ubuntu 64 bits
Versão em Windows 10

Delphi Lazarus MNote2 Mysql pacotes Programação Yocto Project
Exemplo de Pacote debian – Parte 1

O objetivo deste artigo é demonstrar o uso prático de pacotes do linux.

Escrevi alguns artigos, sobre o desenvolvimento de pacotes.

    Inclusive já desenvolvi o MNOTE2, que é um bloco de notas simplificado. Sendo que este projeto, o MNote2, já possui um pacote em seu código.

    O MNote 2 pode ser visto no meu git:

    https://github.com/marcelomaurin/MNote2

    Neste artigo, e nos demais, irei continuar o trabalho apresentado no MNote2, gerando um pacote para um projeto em Lazarus, este projeto consiste em um sistema Cliente/Server, que consome um banco de dados Mysql.

    Este artigo tem relação tambem sobre outro conjunto de artigos:

      A instalação deste tipo de aplicação demanda certo trabalho, que irei abordar durante o ciclo de posts, aqui apresentados.

      Ao fim dos artigoa, pretendo se houver tempo, desenvolver uma imagem iso, usando yocto project, consumindo este pacote. E por fim criando um instalador completo com uma imagem de CD para distribuição. 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

      Para apresentar o trabalho completo, estarei incluindo tudo no git:

      GIT do Exemplo

      https://github.com/marcelomaurin/cliPessoa

      Este é um conjunto de posts, que irei apresentar.

      Serão vários, e por um período longo. Espero que gostem.

      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 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

          Blog C/C++ Mysql Programação Shell Script
          Mysql com C/Lazarus/Python/PHP/R – Parte 2

          Neste segundo artigo iremos abordar como realizar um crud simples em C usando banco de dados Mysql como referência.

          No artigo anterior, tratamos de criar o banco de dados.

          http://maurinsoft.com.br/index.php/2022/01/31/mysql-com-c-lazarus-python-php-r-parte-1

          Agora iremos tratar de algumas definições do nosso projeto:

          Para facilitar o CRUD, iremos dividir em pequenos aplicativos, alias, essa divisão deixa muito didática e fácil de entender.

          • insPessoa.c – Inclui uma pessoa na tabela de pessoas
          • SelPessoa.c – Lista a relação de pessoas
          • UpdPessoa.c – Atualiza os dados de uma pessoa da tabela de pessoa
          • remPessoa.c – Remove uma pessoa da tabela de pessoas

          Com isso, finalizamos o crud e teremos alcançado nosso objetivo neste artigo.

          Dependências

          Iremos incluir aqui as dependências necessárias para seguir com este programa.

          Primeiro pedimos para seguir o primeiro tutorial, pois sem a instalação do mysql fica dificil implementar.

          Em seguida a instalação do ncurses, conforme o link abaixo:

          http://maurinsoft.com.br/index.php/2022/01/31/instalando-ncurses/

          GIT do Projeto

          Estaremos modificando o git incluindo a pasta gcc, nela incluiremos todos os fontes do projeto.

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

          Inclusão dos fontes dos projetos em C

          Começa o Jogo!

          Primeiro iremos criar o Makefile

          
          CC=gcc
          SOURCE_INS=insPessoa.c
          SOURCE_SEL=selPessoa.c
          SOURCE_DEL=delPessoa.c
          SOURCE_UPD=updPessoa.c
          
          LIBS= -lmysql -lncurses
          
          TARGET_INS=insPessoas
          TARGET_SEL=selPessoas
          TARGET_DEL=delPessoas
          TARGET_UPD=updPessoas
          
          
          all: clean compile install
          
          clean:
          	rm *.o
          
          compile:
          	$(CC) $(SOURCE_INS) -o $(TARGET_INS)
          	$(CC) $(SOURCE_SEL) -o $(TARGET_SEL)
          	$(CC) $(SOURCE_DEL) -o $(TARGET_DEL)
          	$(CC) $(SOURCE_UPD) -o $(TARGET_UPD)
          
          
          install:
          	cp $(TARGET_INS) /usr/local/bin/
          	cp $(TARGET_SEL) /usr/local/bin/
          	cp $(TARGET_DEL) /usr/local/bin/
          	cp $(TARGET_UPD) /usr/local/bin/

          Ao chamar o make, iremos compilar todos os fontes incluindo eles na pasta /usr/local/bin, que permite executar em qualquer local que quisermos.

          Explicação do programa

          Este programa irei apresentar na integra, comentando os pontos principais.

          #include <stdio.h>
          #include <stdlib.h>
          #include <string.h>
          #include <mysql.h>
          
          #define USER "gcc"
          #define HOST "localhost"
          #define DATABASE "testedb"
          #define PASS "123456"
          
          
          #define SUCCESS 0
          #define ERROR 1
          
          MYSQL *mycon;
          //char PASS[20];
          int res;
          
          int conecta(void){
          	mycon = mysql_init(NULL);
          	/*
          	mysql_real_connect(MYSQL *mysql,
                             const char *host,
                             const char *user,
                             const char *passwd,
                             const char *db,
                             unsigned int port,
                             const char *unix_socket,
                             unsigned long client_flag)
          				  */
              //mysql_options(mycon, MYSQL_READ_DEFAULT_FILE, (void *)"./my.cnf");
          	res = mysql_real_connect(
          				  mycon,
          				  HOST,
          				  USER,
          				  PASS,
          				  DATABASE,
          				  3306,
          				  NULL,
          				  0);
          	if(res!=NULL)
          	{
          		printf("Sucesso na conexão com servidor\n");
          		return SUCCESS;
          	}
          	else {
          		printf("Falha na conexao! Erro:%s\n",mysql_error(mycon));
          		return ERROR;
          	}
          }
          
          //Estrutura de cadastro de pessoas
          typedef struct PESSOAS {
            int idpessoa;
            char nome[30];
            char dtnasc[20];
            char profissao[20];
            char sexo;
          } PESSOAS;
          
          
          
          void desconecta(void){
             mysql_close(mycon);
             mysql_library_end();
             printf("Desconectado\n");
          }
          
          int Select( PESSOAS *pes){
            char sql[500];
            memset(sql,'\0',sizeof(sql));
            sprintf(sql,"select * from pessoas where nome like '%%%s%%'",
                 pes->nome
          	 );
            printf("SQL:%s\n\n",sql);
            //mysql_prepare(
            res = mysql_query(mycon,sql);
            if(!res) {
          	  printf("Pesquisa com sucesso!\n");
          	  MYSQL_RES *result = mysql_store_result(mycon);
          
                if (!result) {
                  printf("Couldn't get results set: %s\n", mysql_error(mycon));
                } else {
                  MYSQL_ROW row;
                  int i;
                  unsigned int num_fields = mysql_num_fields(result);
          
                  while ((row = mysql_fetch_row(result))) {
                    for (i = 0; i < num_fields; i++) {
                      printf("%s, ", row[i]);
                    }
                    putchar('\n');
                  }
          
                  mysql_free_result(result);
          	  }
          
            }  else {
          	  printf("Falha na pesquisa Error:%s\n",mysql_error(mycon));
            }
          }
          
          void captura_dados(PESSOAS *pes){
          	printf("Digite as informações que deseja pesquisar\n");
          	printf("==========================================\n");
          	printf("\nNome:");
          	scanf("%s",pes->nome);
          	printf("\n\n");
          }
          
          void Wellcome(void){
             printf("Software selPessoa\n");
             printf("Criado por Marcelo Maurin Martins\n");
             printf("Maurinsoft.com.br\n");
             //printf("Senha do banco:");
             //scanf("%s",PASS);
          }
          
          //funcao principal
          void main(int argc, char *argv[]){
             Wellcome();
             PESSOAS pessoa;
             /*Testa conexao*/
             if (conecta()==SUCCESS) {
                captura_dados(&pessoa);
                Select(&pessoa);
                desconecta();
             }
          }
          

          A primeira parte importante é a inclusão da lib, que permite compilar os comandos do mysql

          #include <mysql.h>

          Include da lib do mysql

          O outro ponto importante é a declaração mycon.

          MYSQL *mycon;

          variavel de conexão do mysq

          A mycon, é um handle do mysql. Que permite identificar a comunicação do banco aberta no comando mysql_init.

          mycon = mysql_init(NULL);

          inicia a comunicação com o mysql

          Atribuindo acesso ao banco.

          O comando mysql_real_connect atribui usuário e senha a conexão. Bem como estabelecendo um caminho entre o servidor correto.

          res = mysql_real_connect(
                        mycon,
                        HOST,
                        USER,
                        PASS,
                        DATABASE,
                        3306,
                        NULL,
                        0);

          São os principais parametros, HOST (o ip do servidor), user (usuário do banco), PASS(senha do banco), DATABASE (banco de dados), PORTA (default 3306).

          mysql_query

          O mysql_query permite rodar os comandos, tanto select, como update, delete e insert, ele é o mais importante comando.

          Para não falar em vídeozinho

          Segue a apresentação dos programas rodando.

          Referências

          https://dev.mysql.com/doc/c-api/8.0/en/

          https://zetcode.com/db/mysqlc/

          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

              Banco de dados Blog Mysql Postgres POSTGRES
              Procedimento de compilação do Postgres no ARM Linux

              Instalar os seguintes pacotes

              • instalar o bison , apt install bison
              • instalar o flex, apt install flex
              • instalar o readline, apt install libreadline-dev
              • instalar o git, apt install git

              Caso o libreadline-dev não esteja presente, instale a lib manualmente:

              baixe o git clone https://github.com/JuliaLang/readline.git

              entre na pasta readline, e rode os seguintes comandos

              •   > ./configure 
              •   > make
              •   > make install

              Baixando o projeto no github

              Baixe no git o repositorio do pdv, digitando git clone https://github.com/postgres/postgres.git

              Entre na pasta e compile o comando:

              • ./configure
              • make
              • make install

              O processo deve demorar vários minutos.

              Vídeo que demonstro o processo de instalação

              Parametrizando Postgres

              Agora na console crie o usuario postgres.

              adduser postgres

              Crie uma pasta onde serão armazenados os dados do postgres

              mkdir /usr/local/pgsql/data

              Atribua a pasta como dono o usuário que criamos:

              chown -R postgres:postgres /usr/local/pgsql/

              Entre como usuario postgres:

              su – postgres

              Inicializando banco apontando para a pasta do banco

              Agora digite o seguinte comando:

              /usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

              Ele cria o banco postgres, apontando a pasta onde o banco deve ser armazenada.

              Rodando o servidor

              Agora na etapa final, precisaremos rodar o servidor postgres, digitando o seguinte comando:

              /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data &

              Por fim criar a base de dados que queremos começar a trabalhar:

              /usr/local/pgsql/bin/createdb maurinsoftdb

              Pronto seu postgres esta rodando!

              Veja tambem

                maurinsoft.com.br