mikeysantana Posted August 23, 2016 at 03:48 PM Report #598278 Posted August 23, 2016 at 03:48 PM 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
Knitter Posted August 23, 2016 at 04:01 PM Report #598279 Posted August 23, 2016 at 04:01 PM 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 🙂 1 Report
mikeysantana Posted August 23, 2016 at 04:09 PM Author Report #598280 Posted August 23, 2016 at 04:09 PM 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
mikeysantana Posted August 23, 2016 at 04:12 PM Author Report #598281 Posted August 23, 2016 at 04:12 PM Será que posso utilizar este tutorial a partir de onde diz "Insert Data Into a Database From an HTML Form"? O link é http://www.tutorialrepublic.com/php-tutorial/php-mysql-insert-query.php Cumprimentos, mikeysantana
Knitter Posted August 23, 2016 at 04:25 PM Report #598282 Posted August 23, 2016 at 04:25 PM 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 🙂
Rui Carlos Posted August 23, 2016 at 04:32 PM Report #598283 Posted August 23, 2016 at 04:32 PM 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. Rui Carlos Gonçalves
Knitter Posted August 23, 2016 at 04:37 PM Report #598284 Posted August 23, 2016 at 04:37 PM (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 August 23, 2016 at 04:38 PM by Knitter
mikeysantana Posted August 23, 2016 at 04:48 PM Author Report #598286 Posted August 23, 2016 at 04:48 PM 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(); } } ?>
Rui Carlos Posted August 23, 2016 at 07:22 PM Report #598293 Posted August 23, 2016 at 07:22 PM 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. Rui Carlos Gonçalves
Knitter Posted August 23, 2016 at 07:31 PM Report #598295 Posted August 23, 2016 at 07:31 PM 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. 1 Report
mikeysantana Posted August 23, 2016 at 08:02 PM Author Report #598297 Posted August 23, 2016 at 08:02 PM 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.
mikeysantana Posted August 23, 2016 at 08:03 PM Author Report #598298 Posted August 23, 2016 at 08:03 PM (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 August 23, 2016 at 08:05 PM by mikeysantana
mikeysantana Posted August 24, 2016 at 03:47 PM Author Report #598318 Posted August 24, 2016 at 03:47 PM 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
Rui Carlos Posted August 24, 2016 at 10:10 PM Report #598329 Posted August 24, 2016 at 10:10 PM 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). 1 Report Rui Carlos Gonçalves
mikeysantana Posted August 25, 2016 at 02:07 PM Author Report #598345 Posted August 25, 2016 at 02:07 PM 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
Rui Carlos Posted August 26, 2016 at 07:38 PM Report #598405 Posted August 26, 2016 at 07:38 PM O que devias ter era mais algo como: <?php //... $nif = $_POST["nif"]; $comerciante = $_POST["comerciante"]; //... Rui Carlos Gonçalves
mikeysantana Posted August 30, 2016 at 03:44 PM Author Report #598508 Posted August 30, 2016 at 03:44 PM 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
mikeysantana Posted September 3, 2016 at 09:46 AM Author Report #598605 Posted September 3, 2016 at 09:46 AM Agradecia uma resposta de alguém! 😕
apocsantos Posted September 3, 2016 at 11:16 AM Report #598607 Posted September 3, 2016 at 11:16 AM 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"
Rui Carlos Posted September 3, 2016 at 02:15 PM Report #598609 Posted September 3, 2016 at 02:15 PM 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? Rui Carlos Gonçalves
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now