Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Como fazer para o campo data funcionar?

Na minha tabela eu tenho um campo nascimento, como faço para que ele pegue o DD-MM-AAAA digitado no formulário de contato e grave no banco de dados, veja:

http://prntscr.com/jv4yb0

Meu código do formulário de contato

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
        <link rel="stylesheet" type="text/css" href="css/estilo.css">
    </head>

<body>
    <div class='container'>
        <?php
        $nome = $_GET["nome"];
        $sobre_nome = $_GET["sobre_nome"];
        $email = $_GET["email"];
        $telefone = $_GET["telefone"];
        $nascimento = $_GET["nascimento"];
        $conexao = mysqli_connect('localhost', 'root', '', 'infomix_schema');        
        $query = "insert into infomix (nome, sobre_nome, email, telefone, nascimento) values ('{$nome}', '{$sobre_nome}', '{$email}', {$telefone}, {$nascimento})";
        mysqli_query($conexao, $query);
        mysqli_close($conexao);
        ?>
<p class="alert-success resultado"> Dados <?php echo $nome; ?>, <?php echo $sobre_nome; ?>, <?php echo $email; ?>, <?php echo $telefone; ?>, <?php echo $nascimento; ?> enviados com sucesso</p>
    </div>
</body>
</html>

Agradeço

10 respostas

Digire no google: "gravando data formatada com php"

Olá Shellen, use a função date_create_from_format (http://php.net/date_create_from_format) para criar um objeto DateTime de uma string com a data desejada.

Com o objeto DateTime (http://php.net/manual/en/class.datetime.php) você pode usar o método format para imprimir a data no formato que deseja salvar no banco.

Exemplo:

/* aqui pode ser seu $_POST['data'] */
$string = '14-06-2018';

$data = date_create_from_format('d-m-Y', $string);

echo $data->format('Y-m-d H:i:s');

Olá boa noite,

Nossa ainda não to entendendo como fazer esse processo da data to apanhando, tem como mostrar como fazer no meu código, por favor?

<!--https://www.hardware.com.br/comunidade/data-duvida/902709/-->
<?php include("cabecalho.php")?>
        <?php
        function insereContato ($conexao, $nome, $sobre_nome, $email, $telefone, $nascimento){
            $query = "insert into infomix (nome, sobre_nome, email, telefone, nascimento) values ('{$nome}', '{$sobre_nome}', '{$email}', {$telefone}, {$nascimento})";
            return mysqli_query($conexao, $query);
        }

        $nome = $_GET["nome"];
        $sobre_nome = $_GET["sobre_nome"];
        $email = $_GET["email"];
        $telefone = $_GET["telefone"];
        $nascimento = $_GET["nascimento"];
        $conexao = mysqli_connect('localhost', 'root', '', 'infomix_schema');        

        //condição para saber se todos os campos foram digitados
        if (insereContato($conexao, $nome, $sobre_nome, $email, $telefone, $nascimento)) {// abre if ?> <!--fecha php-->

        <p class="text-success resultado"> Dados <?php echo $nome; ?>, <?php echo $sobre_nome; ?>, <?php echo $email; ?>, <?php echo $telefone; ?>, <?php echo $nascimento; ?> enviados com sucesso</p>

        <?php } else { 
            $msg = mysqli_error($conexao); 
            ?>
            <p class="text-danger resultado"> Dados não enviado faltou informar campo: <?= $msg ?> </p>
        <?php    

        }

        mysqli_close($conexao);
        ?>
<?php include("rodape.php")?>

Realmente estou com dificuldade =/

Deste já agradeço

Depois da variável conexão você da um espaço e coloca este código,

Eu não testei mas teste este primerio

$nascimento = date_create_from_format('dd-mm-YYYY', $nascimento);

se não funcionar faça este aqui embaixo

$data = date_create_from_format('dd-mm-YYYY', $nascimento);

$nascimento = $data;

Obrigada pelo retorno, fiz o que me passou, veja como ficou:

<!--https://www.hardware.com.br/comunidade/data-duvida/902709/-->
<?php include("cabecalho.php")?>
        <?php
        function insereContato ($conexao, $nome, $sobre_nome, $email, $telefone, $nascimento){
            $query = "insert into infomix (nome, sobre_nome, email, telefone, nascimento) values ('{$nome}', '{$sobre_nome}', '{$email}', {$telefone}, {$nascimento})";
            return mysqli_query($conexao, $query);
        }

        $nome = $_POST["nome"];
        $sobre_nome = $_POST["sobre_nome"];
        $email = $_POST["email"];
        $telefone = $_POST["telefone"];
        $nascimento = $_POST["nascimento"];
        $conexao = mysqli_connect('localhost', 'root', '', 'infomix_schema');        

        $data = date_create_from_format('dd-mm-YYYY', $nascimento);

        $nascimento = $data;
        //condição para saber se todos os campos foram digitados
        if (insereContato($conexao, $nome, $sobre_nome, $email, $telefone, $nascimento)) {// abre if ?> <!--fecha php-->

        <p class="text-success resultado"> Dados <?php echo $nome; ?>, <?php echo $sobre_nome; ?>, <?php echo $email; ?>, <?php echo $telefone; ?>, <?php echo $nascimento; ?> enviados com sucesso</p>

        <?php } else { 
            $msg = mysqli_error($conexao); 
            ?>
            <p class="text-danger resultado"> Dados não enviado faltou informar campo: <?= $msg ?> </p>
        <?php    

        }

        mysqli_close($conexao);
        ?>
<?php include("rodape.php"); ?>

Mesmo preenchendo todos os campos da o erro http://prntscr.com/jviwf8

Testei com os dois e o erro é o mesmo.

Que dificuldade, estou apanhando =/ complicado...

A formatação da data não tem haver com a mensgem de erro..., ela está informando sobre a instrução SQL, dados não enviados faltou informar campo.

coloque no insert a variavel nascimento e telefone com aspas simples também.

Shellen, vamos por parte!

Do jeito, que montasse o formulário não pegará mesmo. Criasse os campos para receberem via método POST, para isso funcionar, precisará criar um formulário bonitinho, com input's e devidamente nomes correspondentes...

Eu ajustei o seu formulário, para conseguires compreender, recebendo os dados, a partir de variáveis.

Importante lembrar, que ao salvar datas no banco de dados, não será salva no padrão brasileiro: 15/06/18. E sim no padrão americano.

Por aí no google, stackoverflow, github haverá classes com diversas funções prontas, que outros programadores criaram para facilitar essa conversão, e entre outras peculiares do nosso país.

Então utilizei uma função das várias, que existe no PHP, strtotime e a classe DATE, que é bem extensa e tem várias opções de customizações. Dar uma olhadinha.

http://php.net/manual/pt_BR/function.strtotime.php

http://php.net/manual/pt_BR/function.date.php

Segue o ajuste, que fiz no código... retirei algumas coisas, para facilitar o entendimento.

<?php

        function insereContato ($conexao, $nome, $sobre_nome, $email, $telefone, $nascimento){
            $query = "insert into infomix (nome, sobre_nome, email, telefone, nascimento) values ('{$nome}', '{$sobre_nome}', '{$email}', '{$telefone}', '{$nascimento}')";
            return mysqli_query($conexao, $query);
        }


        $nome = "meunome";
        $sobre_nome = "sobrenome";
        $email = "email@dominio.com";
        $telefone = "9999-9999";
        $data= "15-06-2018";
        $nascimento = date('Y-m-d', strtotime($data));
        $conexao = mysqli_connect('localhost', 'root', '', 'infomix_schema'); 



        if (insereContato($conexao, $nome, $sobre_nome, $email, $telefone, $nascimento)) { ?> 

        <p class="text-success resultado"> Dados enviados com sucesso</p>

        <?php } else { 
            $msg = mysqli_error($conexao); 
            ?>
            <p class="text-danger resultado"> Erro no envio! <?= $msg ?> </p>
        <?php    

        }

        mysqli_close($conexao);
        ?>

Espero ter ajudado! Att, Edynilson Silva.

Edynilson boa noite.

Acabei de testar e funcionou porém no banco de dados só pega a informação contida no campo:


        $nome = "meunome";
        $sobre_nome = "sobrenome";
        $email = "email@dominio.com";
        $telefone = "9999-9999";
        $data= "15-06-2018";
        $nascimento = date('Y-m-d', strtotime($data));

Neste caso, conseguiria voltar a pegar pelo método post?

Montado com o método post ficaria assim?

        $nome = $_POST["nome"];
        $sobre_nome = $_POST["sobre_nome"];
        $email = $_POST["email"];
        $telefone = $_POST["telefone"];
        $nascimento = $_POST["nascimento"];
        $data= "15-06-2018";
        $nascimento =  $_POST date('Y-m-d', strtotime($data));

Seria algo desse tipo?

Já tenho o formulário com os campos, veja:

                        <form action="testeData.php" method="post">
                            <div class="form-group">
                            <label for="contato-nome">Nome:</label>
                                <input type="text" class="form-control" id="contato-nome" placeholder="Seu nome" name="nome">
                            </div>
                            <div class="form-group">
                            <label for="sobre_nome">Sobrenome:</label>
                                <input type="text" class="form-control" id="sobre_nome" placeholder="Seu sobrenome" name="sobre_nome">
                            </div>

                            <div class="form-group">
                            <label for="contato-email">E-mail: </label>
                                <div class="input-group">
                                    <div class="input-group-addon">@</div>
                                    <input type="email" class="form-control" id="contato-email" placeholder="email@provedor.com" name="email">
                                </div>
                            </div>
                            <div class="form-group">
                            <label for="telefone">Telefone:</label>
                                <input type="tel" class="form-control" id="telefone" placeholder="(XX) X XXXX-XXXX" name="telefone">
                            </div>                
                            <div class="form-group">
                            <label for="nascimento">Data de Nascimento:</label>
                                <input type="datetime" class="form-control" id="nascimento" placeholder="DD/MM/AAAA" name="nascimento">
                            </div> 
                        <button type="submit" class="btn btn-primary">Enviar</button>

Mas agora o campo data está certo \o/

Estou caminhando, agora é apenas ajustar para inserir corretamente no campo o que o user digitar.

Olá Shellen, boa noite! Exatamente, só no POST da nascimento, que faltou ocultar parte do código.

Como você quer capturar diretamente do input do nascimento, você pode atribuir o POST dentro da função, ao invés da variável $data, havia colocado apenas para testar.

Ficará assim...

       $nome = $_POST["nome"];
        $sobre_nome = $_POST["sobre_nome"];
        $email = $_POST["email"];
        $telefone = $_POST["telefone"];
        $nascimento = date('Y-m-d', strtotime($_POST["nascimento"]));
        $conexao = mysqli_connect('localhost', 'root', '', 'infomix_schema');

Quanto ao formulário, cometeu um pequeno erro, você quer capturar apenas o ano no type do input, coloca date, o datetime como nome sugere, captura também a hora.

 <input type="date" class="form-control" id="nascimento" placeholder="DD/MM/AAAA" name="nascimento">

Com essas duas alterações, seu código funcionará corretamente, assim, capturando a data inserida pelo usuário.

solução!

Edynilson Silva muito obrigada pela ajuda deu certinho aqui.

Acabei de testar e o campo de data foi preenchido no banco de dados =)

Obrigada pela paciência e pela explicação.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software