Ir para conteúdo

Arquivado

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

robgeek

Como mandar um texto obtido por uma tag para um bd usando PHP?

Recommended Posts

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

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

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

1. Sim, o fórum usa ajax em muitas coisas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

×

Informação importante

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