Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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.