Problema ao enviar dados de um form para outra pagina que salva os dados no banco

Seguinte, o título já diz tudo!

  <form class="form-horizontal" method="POST">
<div class="form-group">
  <label class="control-label col-sm-2">#ID:</label>
  <div class="col-sm-10" style="max-width: 30%">
    <input type="text" class="form-control" placeholder="ID" name="ID">
  </div>
</div>
<div class="form-group" style="max-width: 35%">
  <label class="control-label col-sm-2">Nome:</label>
  <div class="col-sm-10">          
    <input type="text" class="form-control" placeholder="Nome do funcionário" name="nome">
  </div>
</div>

    <div class="form-group" style="max-width: 35%">
  <label class="control-label col-sm-2">RG:</label>
  <div class="col-sm-10">          
    <input type="text" class="form-control" placeholder="RG" name="RG">
  </div>
</div>

    <div class="form-group" style="max-width: 35%">
  <label class="control-label col-sm-2">CPF:</label>
  <div class="col-sm-10">          
    <input type="text" class="form-control" placeholder="CPF" name="CPF">
  </div>
</div>

        <div class="form-group" style="max-width: 35%">
  <label class="control-label col-sm-2">Telefone:</label>
  <div class="col-sm-10">          
    <input type="text" class="form-control" placeholder="Telefone" name="fone">
  </div>
</div>

            <div class="form-group" style="max-width: 100%">
  <label class="control-label col-sm-2">Data de admissão:</label>
  <div class="col-sm-10">          
    <input type="text" class="form-control" placeholder="Data" name="date_add" style="max-width: 30%">
  </div>
</div>

<div>        
  <div class="col-sm-offset-2 col-sm-10">
    <a href="add/Fadd.php" class="btn btn-elegant">SALVAR</a>
  </div>
</div>

Agora vai o codigo que salva no banco

<?php
        $servername = "localhost";
        $username = "root";
        $password = "";
        $dbname = "db_hospital";

 $id=@$_POST['ID'];
 $nome=@$_POST['nome'];
 $rg=@$_POST['RG'];
 $cpf=@$_POST['CPF'];
 $telefone=@$_POST['fone'];
 $date_add=@$_POST['date_add'];

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = “INSERT INTO funcionario (id,nome,rg,cpf,telefone,date_add)
VALUES (’$id’,’$nome’,’$rg’,’$cpf’,’$telefone’,’$date_add’)”;

if ($conn->query($sql) === TRUE) {
echo “Registro criado com sucesso”;
header(“location: …/Funcionarios.php”);
} else {
echo "Error: " . $sql . “
” . $conn->error;
}
$conn->close();
?>

O problema é que não salva nada no banco, campos de texto ficam vazios e campos de numero são preenchidos com 0
E agora?

Só atualizando aqui, tentei colocar o method post em todos os inputs e não foi. Outra coisa é que ele pega só se colocar o action no form. Porém, há um problema, vou colocar mais 2 botões pra editar e excluir, e não vai ficar legal fazer outros dois forms. alguém tem alguma ideia?

Não precisava você abrir outro tópico a respeito, bastava usar o mesmo anterior, mas enfim…

Primeiro troque o POST maiúsculo por minúsculo…

<form class="form-horizontal" method="post">

Segundo, evite omitir os erros que o php pode lançar retirando o arroba @ do $_POST…

$id=$_POST['ID'];
...

Terceiro: sempre que uma página receber dados via post sugiro…

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') { // aqui sim POST é maiúsculo...
    // todo php vai aqui...
}

E por fim, dica de segurança e boas práticas: evite concatenar dados com seu sql…

$sql = "INSERT INTO funcionario (id,nome,rg,cpf,telefone,date_add) VALUES (’$id’,’$nome’,’$rg’,’$cpf’,’$telefone’,’$date_add’)";

Está muito facíl de ser “injetado”, ao invés disso procure usar prepared statements

$sql = "INSERT INTO funcionario (id,nome,rg,cpf,telefone,date_add) VALUES (?,?,?,?,?,?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('isssss', $id, $nome, $rg, $cpf, $telefone, $date_add);
// isssss == integer, string, string, string, date_add nesse caso é string...
$insertOK = $stmt->execute(); // já retorna TRUE/FALSE
$error = $conn->error; // se não teve erro, fica vazio...
$stmt->close(); // linha importante
$conn->close(); // sempre bom fechar antes do header location...

if ($insertOK) {
    echo 'Registro criado com sucesso';
    header("location: …/Funcionarios.php");
} else {
    echo "Error: $sql $error"; // forma direta de imprimir vars em php...
}
?>

Com relação ao botão de edição, geralmente é a mesma coisa que fazer um insert, mudando apenas que um cadastro editado terá um id e um novo não (depende da regra obviamente), no seu caso como id é um input text, imagino que o usuário vai informá-lo, você pode usar a mesma lógica acima testando seu id por exemplo, caso seja nulo, vazio ou zero, você insere, caso não, você atualiza, o bind_param vai mudar sua ordem de variáveis conforme sua lógica ok?

A parte do botão de excluir você pode deixar um button simples com isso:

<input type="button" value="Excluir" onclick="window.location.href='apaga.php?id='+document.getElementById('ID').value">

Seu input name=“ID” precisa ter um id=“ID” nesse caso…

E nessa página apaga.php criar a lógica para deletar o registro da base… é apenas uma ideia, já que você fugiu um pouco do habitual em sistemas web, que é listar os cadastros primeiro numa tabela, deixando opções de editar, excluir através de links, etc… onde se o usuário escolhe editar, manda para página específica, deletar idem, cadastro novo também manda para um form novo ou abre um popup (janela modal com formulário) etc… enfim, ideias e recursos não faltam, cabe você adaptar as suas necessidades… sucesso!

Desculpa os erros amigo, sou novo na programação web e é pra um trabalho acadêmico.

E fiquei numa duvida, o que você quis dizer com esse isss em:

?

Não tem que pedir desculpas a ninguém, apenas estou frisando os pontos que você precisa corrigir, se está usando @ por exemplo, significa que pode ter copiado código pronto da net (afinal de onde você teria ideia de usá-lo sem saber sua real utilidade não é mesmo?) e há muitos exemplos “sujos” e como você está aprendendo, nada melhor que já começar usando boas práticas, sabendo os pontos fracos e o melhor sem “vícios de programação”, a prova disso por exemplo:

$id = $_POST['ID'];
...

Está em desuso devido a falta de segurança que possui, pois não foi filtrado ou validado nada, melhor trocar para…

$id = filter_input(INPUT_POST, 'ID', FILTER_VALIDATE_INT);
...

Isso é um vício de programação e você aprendendo errado dessa forma, vai levar para produção quando se profissionalizar pegou? Vai aproveitando para separar o joio do trigo…

Respondi nos comentários…

// isssss == integer, string, string, string, date_add nesse caso é string...

A documentação que te passei no link explica a respeito, onde estiver i significa que a variável correspondente no caso o $id é do tipo inteiro, quando for moeda/dinheiro por exemplo significa d de double, s de string e b de blob/binário… a sequência diz que o primeiro é inteiro, os outros são strings inclusive o $date_add que no seu banco pode ser date/datetime mas na hora de gravar é string também…

E quanto aos toques que te dei, se seu professor não indicar esses pontos (a questão do $_POST puro por exemplo), guarde-os pra si e leve para a vida, talvez por falta de conhecimento seu professor não lhe passou (ou pretende passar futuramente) e até pode virar assunto em sala de aula… bons estudos!

fiz como me orientou, porém continua com o mesmo problema. Os dados da página de adicionar (Funcionarios.php) não vão para a pagina que insere no banco (Fadd.php).

só envia os dados pra outra página se eu fizer dessa forma que falei lá em cima… Tentei enviar por link, por código em javascript (onclick) e nada deu certo. Action direto no botão não acontece nada, nem sai da página.

Alguém tem alguma solução?