Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adore

Inserir dados na BD através de formulário

Recommended Posts

Boas malta
Estou a começar a desenvolver um projecto para uma loja online com produtos diversos, e estou a ter dificuldades em criar um formulário que permita adicionar info a uma base de dados já criada.

<?php
    //verifica se existe conexão com bd, caso não tenta criar uma nova
    include_once 'mysql.connect.php';
    $ligacao = mysql_connect(MYSQL_SERVER, MYSQL_USERNAME, MYSQL_PASSWORD) //porta, usuário, senha
    or die("Erro na conexão com banco de dados"); //caso não consiga conectar mostra a mensagem de erro mostrada na conexão
     
    $select_db = mysql_select_db("projectopw"); //seleciona o banco de dados
    //     
    //Abaixo atribuímos os valores provenientes do formulário pelo método POST
    $nome = isset($_POST['nome']) ? $_POST['nome'] : ''; 
    $username = isset($_POST['username']) ? $_POST['username'] :'';
    $password = isset($_POST['password']) ? $_POST['password'] :'';
    $email = isset($_POST['email']) ? $_POST['email'] :'';
    $morada = isset($_POST['morada']) ? $_POST['morada'] :'';
    $contacto = isset($_POST['contacto']) ? $_POST['contacto'] :'';
    $nif = isset($_POST['nif']) ? $_POST['nif'] :'';
     
    $string_sql = "INSERT INTO utilizadores (nome,username,password,email,morada,contacto,nif,id) VALUES ('$nome','$username','$password',$email','$morada','$contacto','$nif',null)"; //String com consulta SQL da inserção
     
    mysql_query($string_sql,$ligacao); //Realiza a consulta
     
    if(mysql_affected_rows() == 1){ //verifica se foi afetada alguma linha, nesse caso inserida alguma linha
        echo "<p>Cadastro feito com sucesso</p>";
        echo '<a href="registo.html">Voltar para formulário de registo</a>'; //Apenas um link para retornar para o formulário de cadastro
    } else {
        echo "Erro, não possível inserir no banco de dados";
    }
     
    mysql_close($ligacao); //fecha conexão com banco de dados 
?>

Após a execução deste código surge não é feita qualquer alteração na BD, surgindo o erro associado: "Erro, não possível inserir no banco de dados"

O formulário HTML que deverá permitir introduzir os dados é:

<html>
    <head>
        <title>Registo</title>
    </head>
    <body>
        <h3>Formulario de registo</h3>
        <form action="index.php" method="post">
            Nome: <input type="text" name="nome" />
            <br />
            Username: <input type="text" name="username" />
            <br />
            Password: <input type="password" name="password" />
            <br />
            Email: <input type="text" name="email" />
            <br />
            Morada: <input type="text" name="morada" />
            <br />
            Contacto: <input type="text" name="contacto" id="number" SIZE=9 MAXLENGTH=9 />
            <br />
            N.Contribuinte: <input type="text" name="nif" id="number" SIZE=9 MAXLENGTH=9 />
            <br />
            <input type="submit" value="Registar" />
        </form>
    </body>
</html>

(nunca programei em PHP!)
Alguém me consegue ajudar?
Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Adore, tudo bom?

 

Seu erro é o que chamamos de "Erro de Sintaxe", ou seja, é um erro de digitação, dependendo do seu nível de experiencia como programador fica fácil encontrar e resolver esse tipos de erro veja:

$string_sql = "INSERT INTO utilizadores (nome,username,password,email,morada,contacto,nif,id) VALUES ('$nome','$username','$password',$email','$morada','$contacto','$nif',null)

Lá em $email, faltou abrir e fechar aspas simples, para o script entender que era uma variável a ser inserida no BD.

 

É só colocar da seguinte forma, que o erro de syntax estará resolvido:

$string_sql = "INSERT INTO utilizadores (nome,username,password,email,morada,contacto,nif,id) VALUES ('$nome','$username','$password','$email','$morada','$contacto','$nif',null)

Compartilhe conosco se deu certo! :)

 

 

Abs: Você não esta filtrando os dados não? Pode ser perigoso que algum hacker invada o Banco de dados com SQL Injection, etc..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Pauloenoatt, tudo bem obrigado e ctg?
Muito obrigado pela rápida resposta :)
Pois, grande falha a minha :) mas msm assim, após tentar inserir um novo utilizador através do formulário, ao actualizar a BD, ela permanece na msn, com os msn utilizadores!

(para já não estou preocupado com a segurança da BD pois é para um trabalho académico ;) )

Muito obrigado mais uma vez

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fique tranquilo, eu gosto de debugar e programar pra mim é uma diversão, uma terapia. rs

 

Bom, vamos lá vamos ver se o bug é na query, para isso tente mudar a query para algo simples, como:

$string_sql = "INSERT INTO utilizadores (nome) VALUES ('nome')";

Se inserir significa que o problema é na query, se não o problema pode ser que seja na conexão, dai caso seja localhost mande-me os dados do arquivo mysql.connect.php que você incluiu lá.

 

Ou caso não seja localhost mande-me pelo menos a estrutura para eu ver se nao tem erro nas constantes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

:D
Está a começar a melhorar... já não deu erro, "Cadastro feito com sucesso", no entanto foram adicionados num único acesso dois utilizadores!
Se for através do formulário html nada acontece! :s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, isso é ótimo achamos o erro! :)

Ele esta na string que da a query

 

Vamos ver as variáveis do formulário, tente cadastrar pelo formulario, mas agora adicione essa linha para mostrar elas antes da query:

echo '$nome' . ' - ' . '$username' . ' - ' . '$password'. ' - ' . '$email'. ' - ' . '$morada'. ' - ' . '$contacto'. ' - ' . '$nif'. ' - ' . 'null';

Agora preenchar o formulário e vamos ver no que da. Esse tipo de erro foi muito comum comigo quando eu comecei com PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fique tranquilo, nenhuma pergunta é estupida, rs

Depois dessa parte:

 //Abaixo atribuímos os valores provenientes do formulário pelo método POST
    $nome = isset($_POST['nome']) ? $_POST['nome'] : ''; 
    $username = isset($_POST['username']) ? $_POST['username'] :'';
    $password = isset($_POST['password']) ? $_POST['password'] :'';
    $email = isset($_POST['email']) ? $_POST['email'] :'';
    $morada = isset($_POST['morada']) ? $_POST['morada'] :'';
    $contacto = isset($_POST['contacto']) ? $_POST['contacto'] :'';
    $nif = isset($_POST['nif']) ? $_POST['nif'] :'';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Através do formulário, nada fez! Voltou para a página "index.php"

através do "registar.php" surgiu:

$nome - $username - $password - $email - $morada - $contacto - $nif - null$nome - $username - $password - $email - $morada - $contacto - $nif - null

Cadastro feito com sucesso

Voltar para formulário de registo

E dos deste último foram adicionados novamente dois registos na BD apenas com a coluna "nome" preenchida, em ambos os registos tb com a palavra/utilizador "nome"!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, realmente aspas simples vai é mostrar a variável, rs. Enfim, eu criei um projeto no meu localhost igual o seu esta funcionando perfeitamente para inserir o nome veja:

 

HTML (registro.html)

<html>
    <head>
        <title>Registo</title>
    </head>
    <body>
        <h3>Formulario de registo</h3>
        <form action="index.php" method="post">
            Nome: <input type="text" name="nome" />
            <br />
            Username: <input type="text" name="username" />
            <br />
            Password: <input type="password" name="password" />
            <br />
            Email: <input type="text" name="email" />
            <br />
            Morada: <input type="text" name="morada" />
            <br />
            Contacto: <input type="text" name="contacto" id="number" SIZE=9 MAXLENGTH=9 />
            <br />
            N.Contribuinte: <input type="text" name="nif" id="number" SIZE=9 MAXLENGTH=9 />
            <br />
            <input type="submit" value="Registar" />
        </form>
    </body>
</html>

PHP (index.php)

<?php
	//Conexão Simples
	$ligacao = mysql_connect('localhost','root','');
	$select_db = mysql_select_db('projectopw');

     
    //Abaixo atribuímos os valores provenientes do formulário pelo método POST
    $nome = isset($_POST['nome']) ? $_POST['nome'] : ''; 
    $username = isset($_POST['username']) ? $_POST['username'] :'';
    $password = isset($_POST['password']) ? $_POST['password'] :'';
    $email = isset($_POST['email']) ? $_POST['email'] :'';
    $morada = isset($_POST['morada']) ? $_POST['morada'] :'';
    $contacto = isset($_POST['contacto']) ? $_POST['contacto'] :'';
    $nif = isset($_POST['nif']) ? $_POST['nif'] :'';
     
    $string_sql = "INSERT INTO utilizadores (nome) VALUES ('$nome')"; //String com consulta SQL da inserção
     
    mysql_query($string_sql,$ligacao); //Realiza a consulta
     
    if(mysql_affected_rows() == 1){ //verifica se foi afetada alguma linha, nesse caso inserida alguma linha
        echo "<p>Cadastro feito com sucesso</p>";
        echo '<a href="registo.html">Voltar para formulário de registo</a>'; //Apenas um link para retornar para o formulário de cadastro
    } else {
        echo "Erro, não possível inserir no banco de dados";
    }
     
    mysql_close($ligacao); //fecha conexão com banco de dados 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

No php experimentei eliminar um a um, mas só não dá erro quando fica apenas o "nome". Tentei através do formulário(html) e inseri apenas o nome, e nada acontece! Terá a ver com a configuração da base de dados?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, ta ai tudo inclusive a tabela

SQL:(Cola na aba "SQL", dentro do phpmyadmin)

CREATE TABLE IF NOT EXISTS `NOMEDATABELAQUEVOCEQUER` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(255) NOT NULL,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `morada` varchar(255) NOT NULL,
  `contacto` varchar(255) NOT NULL,
  `nif` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

HTML:(registro.html)

<html>
    <head>
        <title>Registo</title>
    </head>
    <body>
        <h3>Formulario de registo</h3>
        <form action="index.php" method="post">
            Nome: <input type="text" name="nome" />
            <br />
            Username: <input type="text" name="username" />
            <br />
            Password: <input type="password" name="password" />
            <br />
            Email: <input type="text" name="email" />
            <br />
            Morada: <input type="text" name="morada" />
            <br />
            Contacto: <input type="text" name="contacto" id="number" SIZE=9 MAXLENGTH=9 />
            <br />
            N.Contribuinte: <input type="text" name="nif" id="number" SIZE=9 MAXLENGTH=9 />
            <br />
            <input type="submit" value="Registar" />
        </form>
    </body>
</html>

PHP (index.php)

<?php
	//Conexão Simples
	$ligacao = mysql_connect('localhost','root','');
	$select_db = mysql_select_db('projectopw'); //Nome da sua base de dados

     
    //Abaixo atribuímos os valores provenientes do formulário pelo método POST
    $nome = isset($_POST['nome']) ? $_POST['nome'] : ''; 
    $username = isset($_POST['username']) ? $_POST['username'] :'';
    $password = isset($_POST['password']) ? $_POST['password'] :'';
    $email = isset($_POST['email']) ? $_POST['email'] :'';
    $morada = isset($_POST['morada']) ? $_POST['morada'] :'';
    $contacto = isset($_POST['contacto']) ? $_POST['contacto'] :'';
    $nif = isset($_POST['nif']) ? $_POST['nif'] :'';
     
    $string_sql = "INSERT INTO utilizadores (nome,username,password,email,morada,contacto,nif) VALUES ('$nome','$username','$password','$email','$morada','$contacto','$nif') "; //String com consulta SQL da inserção
     
    mysql_query($string_sql,$ligacao); //Realiza a consulta
     
    if(mysql_affected_rows() == 1){ //verifica se foi afetada alguma linha, nesse caso inserida alguma linha
        echo "<p>Cadastro feito com sucesso</p>";
        echo '<a href="registo.html">Voltar para formulário de registo</a>'; //Apenas um link para retornar para o formulário de cadastro
    } else {
        echo "Erro, não possível inserir no banco de dados";
    }
     
    mysql_close($ligacao); //fecha conexão com banco de dados 

?>

Ta funcionando perfeitamente o unico erro é que era a query que voce estava escrevendo nao batia com a tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá bom dia
Desculpa, mas ontem acabei por adormecer! :s

Acabei agr de fazer um "copy -> paste" do código acima, mas o problema mantem-se! Através do formulário "registo.html", nada é adicionado à BD. Se executar/aceder "registar.php" são adicionadas duas entradas/registos à BD! Não consigo perceber onde está o problema, e o motivo pelo qual são criados dois registos!

Muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá bom dia Pauloenoatt
Tudo bem? Peço desculpa pela demora :s
Não tive tempo/hipótese de testar bem ainda, mas creio que estar a funcionar bem ;) em relação à opção inversa, remover dados, não será muito diferente disto pois não? Será uma das próximas opções a desenvolver.
Ainda faltam muitas funções/opções para terminar o trabalho, mas se for necessário eu volto a chatear! :p


Muito obrigado mais uma vez pela grande ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

É sempre bom ver que vocês estão conseguindo se ajudar galera mas vamos lembrar que as funções mysql_ estão obsoletas desde 2006 e estamos fazendo um grande esforço para que vocês criem sempre código com qualidade. Por isso é importante lembrar de sempre pedir a utilização da biblioteca PDO ou mysqli_ que são as mais modernas, a partir do PHP 7 as funções mysql_ não vão mais funcionar então fiquem ligados e se mantenham atualizados.

 

Segue baixo exemplos de conexão em PDO

<?php

//conexão com o bd, pode ser qlq bd seja mysql ou postgre
try {
	$db = new PDO($host, $usuario, $senha,array( PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8' ));
	$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
	if($e->getCode() == 1049){
		echo "Banco de dados errado.";
	}else{
		echo $e->getMessage();
	}
}

?>

Agora a consulta e impressão dos dados

<?php

    try {
        $sql = $db->prepare("SELECT * FROM sua_tabela");
        $sql->execute();
    } catch (PDOException $e) {
        echo $e->getMessage();
    }

    $registro = $sql->fetch(PDO::FETCH_OBJ);

    //IMPRIMINDO
    $registro->nome_do_campo;

?>

Qualquer dúvida podem perguntar

 

Até

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.