robgeek 0 Denunciar post Postado Novembro 21, 2014 Boa noite! Gostaria de saber como posso fazer para pegar um texto de uma tag"textarea" e mandar para um banco de dados em php. Eu sei que eu poderia enviar o texto via POST ou GET, mas o problema é que quando eu faço isso, sem querer, eu chamo um outro arquivo que eu coloco no atributo "action" da tag "form" e eu não quero chamar este arquivo, eu só quero mandar o texto que eu digitei na tag "textarea" para um bd. No exemplo abaixo eu uso uma tabela que eu criei no mysql onde uma das colunas se chama Texto <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Uma Página HTML5 Básica</title> </head> <body> <?php echo "<form action=\"teste.html\" method=\"get\"> <textarea tabindex=\"4\" wrap=\"soft\" rows=\"4\" cols=\"48\" name=\"com\"></textarea> <input type=\"submit\" tabindex=\"6\" value=\"Ok\"></input> </form>"; $texto = //Queria colocar aqui o texto da tag acima para mandar para o bd. /*****************************************************************/ $server = mysql_connect("localhost", "root", "minhasenha") or die( mysql_error( ) ); mysql_select_db("meubd", $server); $query = " INSERT INTO tabela(Texto) VALUES(\"texto de teste!\") "; mysql_query($query, $server); /*****************************************************************/ $query = " SELECT Texto FROM tabela "; $result = mysql_query($query, $server); while($linha = mysql_fetch_array($result)) { echo "<hr>"; echo $linha['Texto'] . "<br>"; } ?> </body> </html> Como posso fazer isso? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Martyns 3 Denunciar post Postado Novembro 21, 2014 a sua é resposta é uma só palavra: AJAX. Se quiser saber mais sobre AJAX, tenho um tutorial: http://hmtutoriais.blogspot.com.br/2014/11/aprenda-AJAX.html com vídeo e tudo. Mas vamos ao seu caso: Você fará outro arquivo php, mas ao invés de acessá-lo pelo method no formulário, vai fazer assim no jQuery: $(window).load(function(){ $("#submit_form").click(function( ev ){ ev.preventDefault(); d = $("form textarea").val(); if(d != "" && d != null){ $.ajax({ url:'arquivo_que_registra.php', type: 'post', data: {dados : d}, // aqui os dados por POST separado por vírgula no formato ÍNDICEPOST : VALOR success: function( data ){ // se houver sucesso na requisição, traz todo o conteúdo de <body> da página em url pelo parâmetro DATA (pode ser qualquer um) }, error: function(){ //função caso houver erro na requisição alert("Desenvolvedor, Erro no AJAX!"); } }); }else { alert("Você não preencheu o campo!"); } }); }); assim, ao clicar no botão submit, ev.preventDefault() faz com que a ação de enviar os dados seja cancelada. Depois ele pega o valor dessa textarea, verifica se não está vazio e manda, via AJAX usando o método POST para o arquivo arquivo_que_registra.php nesse exemplo. Neste arquivo, você pega por POST e registra no banco. A página não é recarregada. Os dados são salvos e o parâmetro da função de success traz o HTML retornado em <body>(padrão) da página destino :) Tem mais: aprenda a usar o mysqli ou PDO para conexão mysql, já que mysql será depreciada em breve. E não se esqueca disso na <head>: <script type="text/javascript" src="//code.jquery.com/jquery.min.js"></script> e de colocar o código jQuery acima dentro das tags <script></script> e depois de chamar. Agora seu código todo: index.php (ou html) <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Uma Página HTML5 Básica</title> <script type="text/javascript" src="//code.jquery.com/jquery.min.js"></script> <script> $(window).load(function(){ $("#submit_form").click(function( ev ){ ev.preventDefault(); d = $("form textarea").val(); if(d != "" && d != null){ $.ajax({ url:'arquivo_que_registra.php', type: 'post', data: {dados : d}, // aqui os dados por POST separado por vírgula no formato ÍNDICEPOST : VALOR success: function( data ){ // se houver sucesso na requisição, traz todo o conteúdo de <body> da página em url pelo parâmetro DATA (pode ser qualquer um) $("div#retorno").html(data); }, error: function(){ //função caso houver erro na requisição alert("Desenvolvedor, Erro no AJAX!"); } }); }else { alert("Você não preencheu o campo!"); } }); }); </script> </head> <body> <form action="" method=""> <textarea tabindex="4" wrap="soft" rows="4" cols="48" name="com"></textarea> <input type="submit" id="submit_form" tabindex="6" value="Ok"></input> </form> <div id="retorno"> </div> </body> </html> arquivo_que_registra.php <?php $texto = $_POST['dados']; /*****************************************************************/ $server = mysqli_connect("localhost", "root", "minhasenha", "meubd") or die( mysqli_connect_error( ) ); $query = " INSERT INTO tabela(`Texto`) VALUES($texto) "; $texto = mysqli_real_escape_string($server,$texto); //para previnir SQL Injection mysqli_query($server, $query); /*****************************************************************/ $query = " SELECT Texto FROM `tabela` "; $result = mysqli_query($server, $query); while($linha = mysqli_fetch_array($result)) { echo "<hr>"; echo $linha['Texto'] . "<br>"; } ?> se não se incomodar, alterei o modo de conexão de mysql para mysqli. Se não quiser, só mudar de novo ;) se tiver erros, avise, pq eu não testei kkkkkkk Compartilhar este post Link para o post Compartilhar em outros sites
robgeek 0 Denunciar post Postado Novembro 21, 2014 Nossa! Não esperava uma resposta tão completa. Primeira vez que vejo algo assim. Muito obrigado, cara! 1- Este fórum funciona assim? Com este método de postagem? 2- Você pode me indicar mais materiais para segurança como o método que você usou para evitar sql injection, onde consigo mais dicas de segurança como você me deu? Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Novembro 22, 2014 1. Sim, o fórum usa ajax em muitas coisas. Compartilhar este post Link para o post Compartilhar em outros sites
robgeek 0 Denunciar post Postado Novembro 27, 2014 Bem, eu ainda não pude olhar o código do Martyns pois estou em final de semestre e estou fazendo alguns outros trabalhos, mas hoje tive uma folga e resolvi tentar uma outra solução, que não deu certo. Eu pensei - Porque eu não posso mandar para mim mesmo o conteúdo via POST? Vejam o que fiz: <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8"> <title>Uma Página HTML5 Básica</title> </head> <body> <!-- Pega o que for digitado pelo usuário e manda para a variável $post--> <form action="teste.html" method="post"> <textarea tabindex="4" wrap="soft" rows="4" cols="48" name="com"></textarea> <input type="submit" tabindex="6" value="Post"> </form> <?php $servidor = "localhost"; $usuario = "root"; $senha = "minhasenha"; $banco = "bancodedados"; // Conecta-se ao banco de dados Mysql. $server = new mysqli($servidor, $usuario, $senha, $banco) or die( mysqli_connect_error( ) ); // Pega o que foi digitado pelo usuário e passa para $post. $post = $_POST['com']; // Para prevenir sql injection. $post = mysqli_real_escape_string($server, $post); // Consulta de inserção no banco de dados. $consulta = " INSERT INTO tabela(Texto) VALUES($post) "; // Executando a query de consulta. mysqli_query($server, $consulta); // Consulta de leitura no banco de dados. $consulta = " SELECT Texto FROM tabela "; // Executando a query de consulta. $result = mysqli_query($server, $consulta); // Mostra os dados na tela. while( $linha = mysqli_fetch_array($result) ) { echo "<hr>"; echo $linha['Texto'] . "<br>"; } ?> </body> </html> Parece bem mais simples, mas estou recebendo a seguinte mensagem de erro: Undefined index: com in /opt/lampp/htdocs/webtest/teste.html on line 24 Linha 24, para mim, é onde tem o seguinte: "$post = $_POST['com'];" mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in /opt/lampp/htdocs/webtest/teste.html on line 46 Linha 46, para mim, é onde tem o seguinte: "while( $linha = mysqli_fetch_array($result) ) {" 1- Como posso resolver isso?2- Por que essa não é uma boa solução? Presumo que se fosse, o Martyns teria sugerido, já que ele parece entender muito do assunto e o moderador teria confirmado. Compartilhar este post Link para o post Compartilhar em outros sites