Adore 1 Denunciar post Postado Novembro 22, 2015 Boas maltaEstou 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
paulorogeriojr 1 Denunciar post Postado Novembro 22, 2015 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
Adore 1 Denunciar post Postado Novembro 23, 2015 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
paulorogeriojr 1 Denunciar post Postado Novembro 23, 2015 Tudo ótimo Adore, Diga-me, retornou o mesmo erro de antes? "Erro, não possível inserir no banco de dados" Compartilhar este post Link para o post Compartilhar em outros sites
Adore 1 Denunciar post Postado Novembro 23, 2015 Yap :(Continua a surgir o mesmo erro! Compartilhar este post Link para o post Compartilhar em outros sites
Adore 1 Denunciar post Postado Novembro 23, 2015 o nome da BD é "projectopw" e a tabela lá existente tem o nome de "utilizadores"username "root" e sem password Compartilhar este post Link para o post Compartilhar em outros sites
paulorogeriojr 1 Denunciar post Postado Novembro 23, 2015 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
Adore 1 Denunciar post Postado Novembro 23, 2015 :DEstá 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
paulorogeriojr 1 Denunciar post Postado Novembro 23, 2015 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
Adore 1 Denunciar post Postado Novembro 23, 2015 Desculpa a pergunta estupida! :PMas adiciono essa linha em que parte msn?! :s Compartilhar este post Link para o post Compartilhar em outros sites
paulorogeriojr 1 Denunciar post Postado Novembro 23, 2015 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
Adore 1 Denunciar post Postado Novembro 23, 2015 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 registoE 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
paulorogeriojr 1 Denunciar post Postado Novembro 23, 2015 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
Adore 1 Denunciar post Postado Novembro 23, 2015 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
paulorogeriojr 1 Denunciar post Postado Novembro 23, 2015 Bom, ta ai tudo inclusive a tabelaSQL:(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
Adore 1 Denunciar post Postado Novembro 23, 2015 Olá bom diaDesculpa, mas ontem acabei por adormecer! :sAcabei 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
Adore 1 Denunciar post Postado Novembro 23, 2015 Olá novamente!Esquece a msg anterior! Já consegui! Estava a invocar no ficheiro html o php errado! :p Compartilhar este post Link para o post Compartilhar em outros sites
paulorogeriojr 1 Denunciar post Postado Novembro 23, 2015 Olá novamente! Esquece a msg anterior! Já consegui! Estava a invocar no ficheiro html o php errado! :P Problema resolvido Então? Compartilhar este post Link para o post Compartilhar em outros sites
Adore 1 Denunciar post Postado Novembro 24, 2015 Olá bom dia PauloenoattTudo bem? Peço desculpa pela demora :sNã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! :pMuito obrigado mais uma vez pela grande ajuda Compartilhar este post Link para o post Compartilhar em outros sites
renpanvil 7 Denunciar post Postado Novembro 24, 2015 É 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