Jump to content

Recommended Posts

Posted

Boa tarde,

Sou muito novo na programação com base de dados, mas gostaria de me aventurar e criar uma ferramenta com recurso ao HTML, PHP e MySQL para poder controlar as minhas faturas.

A ideia seria ter um formulário com os dados da fatura e um botão Submeter que faria com que esses dados fossem publicados na base de dados.

Já tenho o formulário e toda a página em HTML, mas agora não sei que código usar, ou como fazer. Será que alguém me podia ajudar?

Eu tentei ainda pesquisar aqui o tema, podia já alguem o ter aberto, mas não encontrei diretamente o que queria.

Cumprimentos.

mikeysantana

Posted

Além do formulário em HTML já tens mais alguma coisa? A base de dados desenhada ou o código PHP (ou parte dele)? Estás a seguir algum tutorial?

Um tutorial para  parte de acesso à base de dados, com PDO (recomendado se não usares uma framework), https://phpdelusions.net/pdo, o site W3CSchools também tem um tutorial de PHP para quem não tem conhecimentos com a linguagem, http://www.w3schools.com/php/default.asp

É complicado ajudar sem fazer o trabalho por ti se não existirem dúvidas específicas 🙂

  • Vote 1
Posted
3 minutos atrás, Knitter disse:

Além do formulário em HTML já tens mais alguma coisa? A base de dados desenhada ou o código PHP (ou parte dele)? Estás a seguir algum tutorial?

Um tutorial para  parte de acesso à base de dados, com PDO (recomendado se não usares uma framework), https://phpdelusions.net/pdo, o site W3CSchools também tem um tutorial de PHP para quem não tem conhecimentos com a linguagem, http://www.w3schools.com/php/default.asp

É complicado ajudar sem fazer o trabalho por ti se não existirem dúvidas específicas 🙂

Olá Knitter,

Obrigado pela resposta.

Quanto à base de dados tenho os campos que quero, só ainda não está aberta. No código do formulário já atribui id's aos campos, penso que será mais fácil para depois enviar os dados para a base de dados. Por acaso, ainda não segui tutorial, porque pensei que poderia já encontrar a mesma dúvida de outra pessoa aqui!

Quanto ao PDO, não será aplicável com Twitter Bootstrap e esse tipo de frameworks?

OK, vou tentar ver se encontro algo na net depois aviso com uma dúvida específica.

Cumprimentos,

mikeysantana

Posted

Ena que confusão, começando pelo fim 🙂

3 minutos atrás, mikeysantana disse:

Será que posso utilizar este tutorial a partir de onde diz "Insert Data Into a Database From an HTML Form"?

Podes utilizar esse tutorial, e o que é explicado vai funcionar, para iniciar serve perfeitamente no entanto usa um conjunto de funções que vai originar avisos, que são consideradas inseguras e que foram substituídas pela utilização de PDO; PDO é uma forma mais actual, segura e mais prática/simples de aceder a bases de dados... basicamente mudam os nomes das funções mas o princípio é o mesmo: abrir ligação, executar comandos para obter/inserir/actualizar dados, etc.

9 minutos atrás, mikeysantana disse:

Quanto à base de dados tenho os campos que quero, só ainda não está aberta.

Não percebo bem o que é que isto quer dizer. A base de dados deverá existir no servidor de bases de dados, no teu caso MySQL, sendo que já deve ser possível inserir dados na BD usando um qualquer cliente de MySQL (programa para ligar directamente à BD e usar comandos SQL para manipular dados)... O HTML da interface gráfica, o código PHP e a base de dados são três elementos que podem existir independentes um dos outros.

12 minutos atrás, mikeysantana disse:

No código do formulário já atribui id's aos campos, penso que será mais fácil para depois enviar os dados para a base de dados.

ID não são enviados quando o formulário é submetido para o servidor, os campos devem ter nomes (tag name), podem ter ID para ajudar mas não é obrigatório. Sem "name" o teu código PHP no servidor não vai receber nada.

13 minutos atrás, mikeysantana disse:

Quanto ao PDO, não será aplicável com Twitter Bootstrap e esse tipo de frameworks?

PDO é PHP (servidor), Twitter Bootstrap é HTML+JS+CSS (cliente/browser). Um não afecta o outro. O código que executar no browser não sabe nada do que acontece no servidor, podes usar o que quiseres do lado do cliente para desenhar a interface gráfica que isso será apenas código visível ao browser. Quando falei em frameworks referia-me a frameworks de PHP para o lado servidor, que ajudam quando se desenvolvem aplicações deste tipo e que têm camadas de funções próprias, em cima do PDO... mas isso pode ficar para a segunda versão do teu programa 🙂

Posted
Agora, Knitter disse:

Podes utilizar esse tutorial, e o que é explicado vai funcionar, para iniciar serve perfeitamente no entanto usa um conjunto de funções que vai originar avisos, que são consideradas inseguras e que foram substituídas pela utilização de PDO; PDO é uma forma mais actual, segura e mais prática/simples de aceder a bases de dados... basicamente mudam os nomes das funções mas o princípio é o mesmo: abrir ligação, executar comandos para obter/inserir/actualizar dados, etc.

Pelo que vi, o tutorial indicado usa a extensão mysqli, que, tanto quanto sei, é segura e não origina avisos (a extensão mysql é que foi descontinuada).  A utilização do PDO terá ainda assim algumas vantagens (e.g., maior nível de abstracção), mas o mysqli não é necessariamente uma má opção.

Posted (edited)
5 minutos atrás, Rui Carlos disse:

Pelo que vi, o tutorial indicado usa a extensão mysqli, que, tanto quanto sei, é segura e não origina avisos (a extensão mysql é que foi descontinuada).  A utilização do PDO terá ainda assim algumas vantagens (e.g., maior nível de abstracção), mas o mysqli não é necessariamente uma má opção.

Falha minha, o Rui tem toda a razão, é o que dá olhar só por alto enquanto se fazem outras coisas. E ainda bem que ele corrigiu, porque não ia olhar para o link outra vez e estava a dar informação errada.

Edited by Knitter
Posted

Tentei fazer uma pesquisa pelo PDO e fiquei com este código. Deverá ficar assim?

A opção Setor é uma caixa de opções, posso deixar assim como está?

Estava a pensar adicionar um ID automático para prevenir informação duplicada, terei de o fazer ou a base de dados já o faz automaticamente? Seria como no Excel, cada linha tem um número associado.

<?php
if(isset($_POST["submit"])){
$hostname='localhost';
$username='utilizador';
$password='pass';

try {
$dbh = new PDO("mysql:host=$hostname;dbname=factgest",$username,$password);

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // <== add this line
$sql = "INSERT INTO comerciantes (nif, comerciante, setor)
VALUES ('".$_POST["nif"]."','".$_POST["comerciante"]."','".$_POST["setor"]."')";
if ($dbh->query($sql)) {
echo "<script type= 'text/javascript'>alert('Novo comerciante introduzido com sucesso!');</script>";
}
else{
echo "<script type= 'text/javascript'>alert('O comerciante não foi introduzido. Tenta novamente.');</script>";
}

$dbh = null;
}
catch(PDOException $e)
{
echo $e->getMessage();
}

}
?>
Posted

Não programo PHP regularmente, e nunca usei PDO, mas pelo menos a execução da query não me parece estar a ser feita de forma recomendável.  Por diversos motivos, convém usares prepared statements para executares as queries, em vez de executares a query directamente com os parâmetros.

Tens mais informação sobre a utilização de prepared statements aqui.

Posted

Como o Rui disse, usa prepared statements.

A tabela precisa de uma chave primária que identifique de forma única cada registo, pode ser o NIF, se o valor nunca se repetir nessa tabela ou podes adicionar um campo AUTO_INCREMENT; É um campo inteiro cujo valor começa em zero e que vai sendo incrementado automaticamente cada vez que inseres um registo novo, a BD trata de fazer isso.

  • Vote 1
Posted
28 minutos atrás, Rui Carlos disse:

Não programo PHP regularmente, e nunca usei PDO, mas pelo menos a execução da query não me parece estar a ser feita de forma recomendável.  Por diversos motivos, convém usares prepared statements para executares as queries, em vez de executares a query directamente com os parâmetros.

Tens mais informação sobre a utilização de prepared statements aqui.

20 minutos atrás, Knitter disse:

Como o Rui disse, usa prepared statements.

 

Como referi, não tenho qualquer conhecimento de bases de dados e nunca tinha trabalhado com elas com o auxílio de PHP.

O código que adaptei do tutorial seria para usar antes de fechar a tag </body> dentro da página do formulário.

Já li a página do código dos prepared statements mas não consegui perceber onde o posso colocar no meu código...

Fico a aguardar uma resposta sobre isto.

Posted (edited)
32 minutos atrás, Knitter disse:

A tabela precisa de uma chave primária que identifique de forma única cada registo, pode ser o NIF, se o valor nunca se repetir nessa tabela ou podes adicionar um campo AUTO_INCREMENT; É um campo inteiro cujo valor começa em zero e que vai sendo incrementado automaticamente cada vez que inseres um registo novo, a BD trata de fazer isso.

Esse campo seria uma outra coluna na base de dados?

Pelo que li apenas seria necessário aquando a criação da tabela no MySQL, depois já não será necessário colocar nenhuma informação no código, penso eu.

Se estiver errado avisa-me por favor.

Cumprimentos,

mikeysantana

Edited by mikeysantana
Posted

Boa tarde pessoal,

Acho que já cheguei a um código com os prepared statements.

A minha dúvida é se os dados que se encontram em "// insert a row" e "// insert another row". É essa a minha confusão. Porque é que vêm preenchidos se vai depender dos dados que colocar no formulário?! Já encontrei dois tutoriais assim...

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // prepare sql and bind parameters
    $stmt = $conn->prepare("INSERT INTO comerciantes (nif, comerciante, setor) 
    VALUES (:nif, :comerciante, :setor)");
    $stmt->bindParam(':nif', $nif);
    $stmt->bindParam(':comerciante', $comerciante);
    $stmt->bindParam(':setor', $setor);

    // insert a row
    $firstname = "John";
    $lastname = "Doe";
    $email = "john@example.com";
    $stmt->execute();

    // insert another row
    $firstname = "Mary";
    $lastname = "Moe";
    $email = "mary@example.com";
    $stmt->execute();

    // insert another row
    $firstname = "Julie";
    $lastname = "Dooley";
    $email = "julie@example.com";
    $stmt->execute();

    echo "Novo comerciante introduzido com sucesso!";
    }
catch(PDOException $e)
    {
    echo "O comerciante não foi introduzido. Tente novamente." . $e->getMessage();
    }
$conn = null;
?>

Fico a aguardar uma resposta.

Cumprimentos,

mikeysantana

Posted
15 horas atrás, Rui Carlos disse:

No exemplo que tens, não há formulário, daí as variáveis serem inicializadas com constantes.  Numa aplicação a sério, os valores das variáveis serão definidos de outra forma (no teu caso, seriam definidos a partir dos dados recebidos do formulário).

Olá Rui,

Obrigado pela resposta.

Para ficar ativo com as variáveis apenas preciso de substituir por isto certo?

// insert a row
    $nif = ":nif";
    $comerciante = ":comerciante";
    $setor = ":setor";
    $stmt->execute();

Quanto ao campo AUTO_INCREMENT, é só adicionar quando adicionamos os outros campos certo? Depois disso não precisamos de escrever nada no código PHP para que ele atribua o número à linha da BD pois não?

Fico a aguardar uma resposta.

Cumprimentos,

mikeysantana

Posted
Em 26/08/2016 às 20:38, Rui Carlos disse:

O que devias ter era mais algo como:


<?php
//...
$nif = $_POST["nif"];
$comerciante = $_POST["comerciante"];
//...

Olá Carlos,

Funcionou! Obrigado! 🙂

Só mais duas perguntinhas:

- No formulário das faturas tenho um campo que permite receber ficheiros PDF para as faturas. Como faço para fazer o upload dos ficheiros para uma paste, em vez da base de dados, como os outros campos? Eu vi este tutorial: http://www.w3schools.com/php/php_file_upload.asp Parece simples, até quase uma questão de copiar e colar, mas posso juntar ao mesmo código que recolhe a informação do formulário para a base de dados?

- Quando estamos a receber informação do formulário de um campo caixa "dropdown", o código é o mesmo como se fosse uma caixa de texto normal? É que verifiquei o que foi publicado na BD e apenas está o NIF, os campos Comerciante e Setor estão com "0". O que faço quanto a isso?

Cumprimentos,

mikeysantana

Posted

Bom dia,

Podes usar o código de upload em PHP que tens disponível. Por uma questão de organização seria bom se ele fosse executado no final das operações com a base de dados.

Cordiais cumprimentos,

Apocsantos

"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Posted
Em 8/30/2016 às 16:44, mikeysantana disse:

- Quando estamos a receber informação do formulário de um campo caixa "dropdown", o código é o mesmo como se fosse uma caixa de texto normal? É que verifiquei o que foi publicado na BD e apenas está o NIF, os campos Comerciante e Setor estão com "0". O que faço quanto a isso?

Como é que tens o HTML do dropdown?

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.