Jump to content
mikeysantana

Obrigar o código a recolher dados da Base de Dados

Recommended Posts

mikeysantana

Olá pessoal.

Estreei-me na programação com PHP e MySQL e estou a construir um pequeno programa de gestão documental que me ajude a organizar faturas, extratos bancários, notas de crédito, etc...

Neste momento já tenho toda a interface pronta. Dividi a aplicação em 3 partes: Documentos, Tipo de Documentos e Entidades Emissoras.

Já tenho o formulário pronto para adicionar as entidades emissoras. Agora, na criação do documento na aplicação gostava (numa primeira fase) de que, ao colocar o número que a base de dados atribuiu à entidade emissora (através da opção AUTO_INCREMENT do PHPMyAdmin) ele recolhesse os dados da entidade e os preenchesse de forma automática. Os campos da tabela da base de dados das entidades emissoras são: ID (não consta no formulário, é atribuído de forma automática), Nome, Morada, Telefone, E-mail e NIF. O objetivo seria então colocar apenas o ID e os outros campos que se encontram desativados para a inserção de texto, aparecessem logo com a informação correspondente. Numa rápida pesquisa à internet encontrei este código que o adaptei posteriormente:

<?php
						$usernm="user";
						$passwd="pass";
						$host="localhost";
						$database="bd";

						mysql_connect($host,$usernm,$passwd); 
						mysql_select_db($database);

						$sql = "SELECT * FROM EntidadesEmissoras WHERE ID='".$EntidadeIDDOC."'"; 
						$result = mysql_query($sql) or die (mysql_error()); 
						while ($row = mysql_fetch_array($result)){
							$NomeEntidadeEmissora=$row['NomeEntidadeEmissora'];
							$EntidadeIDDOC=$row['ID'];
							}
?>

Não sei se o problema reside na descrição das variáveis ou no código, mas para um melhor entendimento vou explicar as variáveis e colunas da base de dados:

  • EntidadeIDDOC - ID atribuído à entidade emissora;
  • NomeEntidadeEmissora - Nome atribuído à entidade emissora;
  • MoradaEntidadeEmissora - Morada da entidade emissora;
  • NIFEntidadeEmissora - Número de Identificação Fiscal da entidade emissora;
  • TelEntidadeEmissora - Contacto telefónico da entidade emissora;
  • EmailEntidadeEmissora - E-mail da entidade emissora.

No código, para experimentar coloquei o campo do nome desativado, pronto para receber o nome através da base de dados assim:

<input type="text" class="form-control" id="EntidadeNomeDOC" name="EntidadeNomeDOC" value="<?php echo $row['NomeEntidadeEmissora']; ?> " disabled>

Gostaria então de poder colocar um número que existisse na base de dados e a aplicação o preenchesse de forma automática, mas ainda não faz isso. O que se passa com o código? Há alguma coisa de errado?

Com os melhores cumprimentos,

mikeysantana

Share this post


Link to post
Share on other sites
mikeysantana
1 hora atrás, HappyHippyHippo disse:

sabes javascript (ou o que é) ?

Olá HappyHippyHippo.

Sei o que é mas nunca trabalhei com ela. Não faça mínima por onde começar com ela neste projeto.

Cumprimentos,

mikeysantana

Share this post


Link to post
Share on other sites
HappyHippyHippo

vamos ver se percebes o que esta em jogo com uma analogia.

imagina uma fábrica que faz frigoríficos. passa por uma linha de montagem, embalamento e depois vais para a loja.

um gajo vai à loja e diz quer o frigorifico, mas quer que sempre que mudes a intensidade de frio deste, querias que ele mudasse automagicamente de motor para um mais eficiente em caso de maior intensidade.

como achas que o frigorífico vai mudar de motor sempre que te apetece ? o frigorífico já está feito e embalado !!! ou pegas nele como está ou tens um tecnico de serviço plantado ao lado do teu frigorífico à espera que mudes de intensidade para mudar o motor por ti ...

onde quero chegar é que o PHP faz as cenas no servidor, cria a tua página bonitinha e manda para o browser. depois disso o servidor é como não existisse mais. se queres fazer isso, ou aprende javascript e usa ajax, ou sempre que pretendes apresentar essa informação, terás de fazer um novo pedido ao servidor (ir comprar novo frigorífico) com a informação que pretendes.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mikeysantana
56 minutos atrás, HappyHippyHippo disse:

vamos ver se percebes o que esta em jogo com uma analogia.

imagina uma fábrica que faz frigoríficos. passa por uma linha de montagem, embalamento e depois vais para a loja.

um gajo vai à loja e diz quer o frigorifico, mas quer que sempre que mudes a intensidade de frio deste, querias que ele mudasse automagicamente de motor para um mais eficiente em caso de maior intensidade.

como achas que o frigorífico vai mudar de motor sempre que te apetece ? o frigorífico já está feito e embalado !!! ou pegas nele como está ou tens um tecnico de serviço plantado ao lado do teu frigorífico à espera que mudes de intensidade para mudar o motor por ti ...

onde quero chegar é que o PHP faz as cenas no servidor, cria a tua página bonitinha e manda para o browser. depois disso o servidor é como não existisse mais. se queres fazer isso, ou aprende javascript e usa ajax, ou sempre que pretendes apresentar essa informação, terás de fazer um novo pedido ao servidor (ir comprar novo frigorífico) com a informação que pretendes.

Estive a ler este tutorial: https://www.w3schools.com/php/php_ajax_database.asp e percebi que o JavaScript é bastante parecido com o Python em termos de sintaxe. Aqui no tutorial eles usam uma tabela e assim fiquei um pouco perdido para depois fazer a comunicação dos dados. O que tenho agora é isto:

<?php
$q = intval($_GET['EntidadeIDDOC']);

$con = mysqli_connect('localhost','user','pass','bd');
if (!$con) {
    die('Não foi possível estabelecer uma comunicação: ' . mysqli_error($con));
}

mysqli_select_db($con,"[O QUE É QUE SE COLOCA AQUI?]");
$sql="SELECT * FROM EntidadesEmissoras WHERE id = '".$q."'";
$result = mysqli_query($con,$sql);

$row = mysqli_fetch_array($result)
    echo $row['NomeEntidadeEmissora'];

mysqli_close($con);
?>

Estou com dúvidas no que colocar na linha mysqli_select_db........ e também na sintaxe da antepenúltima linha. Dá-me um erro e diz "syntax error, unexpected echo (T_ECHO)". Como faço agora?

Cumprimentos,

mikeysantana

Share this post


Link to post
Share on other sites
HappyHippyHippo

não sei onde tens o ajax, mas nese código falta um ";" na linha anterior do echo


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mikeysantana
1 hora atrás, HappyHippyHippo disse:

não sei onde tens o ajax, mas nese código falta um ";" na linha anterior do echo

O AJAX está antes do header da página principal. O código é este:

<script>
function showUser(str) {
    if (str == "") {
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else { 
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("txtHint").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET","receber-entidade-emissora.php?q="+str,true);
        xmlhttp.send();
    }
}
</script>

Cumprimentos,
mikeysantana

Share this post


Link to post
Share on other sites
HappyHippyHippo

já vi vários problemas, mas vamos por passinhos pequenos.

olha para o link que tens no javascript : "receber-entidade-emissora.php?q="+str

mete isso no teu browsers (substituindo o str claro) e vê o que aparece

ao mesmo tempo, olha para o nome do parametro que o teu php esepra receber


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mikeysantana
Em 06/04/2017 às 04:00, HappyHippyHippo disse:

já vi vários problemas, mas vamos por passinhos pequenos.

olha para o link que tens no javascript : "receber-entidade-emissora.php?q="+str

mete isso no teu browsers (substituindo o str claro) e vê o que aparece

ao mesmo tempo, olha para o nome do parametro que o teu php esepra receber

Olá HappyHippyyHippo,

Tentei fazer isso mas não deu nada! Tentei mudar a abordagem para algo que torne o programa o mais simples, do ponto de vista do utilizador, logo pensei que, em vez do número, vou já colocar o campo do nome da empresa (onde o utilizador o coloca e aparecem sugestões, tal como o Google) e, assim, fazer este passo final que era o produto final que pretendia.

Pesquisei na internet e vi este tutorial, tentando seguir à risca tudo: http://www.smarttutorials.net/jquery-autocomplete-multiple-fields-using-ajax-php-mysql-example/

Neste momento tenho o formulário HTML assim:

<div class="form-group">
                  <label>Entidade Emissora</label>
                  <input type="text" class="form-control" id="EntidadeNomeDOC" name="EntidadeNomeDOC" class="ui-autocomplete-input">
                </div>
                <div class="form-group">
                  <label>Morada</label>
                  <textarea class="form-control" id="EntidadeMoradaDOC" name="EntidadeMoradaDOC" rows="3" placeholder="Introduza a morada da entidade emissora..." class="ui-autocomplete-input"></textarea>

Na página HTML, coloquei um código jQuery assim, antes de </head>:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js">
	$('#EntidadeNomeDOC').autocomplete({
	source: function( request, response ) {
  		$.ajax({
  			url : 'ajax.php',
  			dataType: "json",
			data: {
			   name_startsWith: request.term,
			   type: 'EntidadesEmissoras_table',
			   row_num : 1
			},
			 success: function( data ) {
				 response( $.map( data, function( item ) {
				 	var code = item.split("|");
					return {
						label: code[0],
						value: code[0],
						data : item
					}
				}));
			}
  		});
  	},
  	autoFocus: true,	      	
  	minLength: 0,
  	select: function( event, ui ) {
		var names = ui.item.data.split("|");						
		$('#EntidadeMoradaDOC').val(names[1]);
	}		      	
});
</script>

O ficheiro config.php assim:

<?php

define('DB_HOST', 'localhost');
define('DB_NAME', 'db');
define('DB_USERNAME','user');
define('DB_PASSWORD','pass');

$con = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
if( mysqli_connect_error()) echo "Não foi possível estabelecer uma ligação com a base de dados MySQL: " . mysqli_connect_error();

?>

E, por fim, o ficheiro ajax.php:

<?php
require_once 'config.php';
if($_POST['type'] == 'EntidadesEmissoras_table'){
	$row_num = $_POST['row_num'];
	$result = mysqli_query($con, "SELECT NomeEntidadeEmissora, MoradaEntidadeEmissora FROM EntidadesEmissoras where NomeEntidadeEmissora LIKE '".strtoupper($_POST['NomeEntidadeEmissora_startsWith'])."%'");	
	$data = array();
	while ($row = mysqli_fetch_assoc($result)) {
		$name = $row['NomeEntidadeEmissora'].'|'.$row['MoradaEntidadeEmissora'].$row_num;
		array_push($data, $name);	
	}	
	echo json_encode($data);
}
?>

Não sei como consigo incorporar este último no código. Pensa que seja isto que faça com que ele não funcione.

Tentei ser o mais claro para poderes ajudar. Depois dá uma olhadela e diz qualquer coisa! ;)

Com os melhores cumprimentos,

mikeysantana

Share this post


Link to post
Share on other sites
HappyHippyHippo

o tutorial está errrado. o verdo por defeito do método $.ajax é o GET e não o POST.

ou alteras o ajax.php para esperar a informação no $_GET, ou alteras o jquery para dizer que deverás enviar por POST (seja por argumento ou usar o $.post)

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
mikeysantana
2 horas atrás, HappyHippyHippo disse:

o tutorial está errrado. o verdo por defeito do método $.ajax é o GET e não o POST.

ou alteras o ajax.php para esperar a informação no $_GET, ou alteras o jquery para dizer que deverás enviar por POST (seja por argumento ou usar o $.post)

OK, ou seja o que estás a dizer é que o código ajax.php fica assim:

<?php
require_once 'config.php';
if($_POST['type'] == 'EntidadesEmissoras_table'){
	$row_num = $_GET['row_num'];
	$result = mysqli_query($con, "SELECT NomeEntidadeEmissora, MoradaEntidadeEmissora FROM EntidadesEmissoras where NomeEntidadeEmissora LIKE '".strtoupper($_GET['NomeEntidadeEmissora_startsWith'])."%'");	
	$data = array();
	while ($row = mysqli_fetch_assoc($result)) {
		$name = $row['NomeEntidadeEmissora'].'|'.$row['MoradaEntidadeEmissora'].$row_num;
		array_push($data, $name);	
	}	
	echo json_encode($data);
}
?>

Só não percebi a parte do jQuery!

Onde é que eu coloco o código acima para isto poder funcionar?

Ainda estou um pouco à toa!

Com os melhores cumprimentos,

mikeysantana

Edited by mikeysantana

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.