Para fazermos isso, vamos usar três páginas.
Na primeira, vamos criar um formulário básico primeiro, para trabalharmos com Bancos, dessa forma:
<form method="post" action="conclusao.php">
<p>Nome: <input type="text" name="tNome" id="cNome" size="35" maxlength="120" placeholder="Digite seu Nome" required autofocus/></p>
<p>E-mail: <input type="email" name="tMail" id="cMail" size="35" maxlength="65" placeholder="Coloque um E-mail Válido" required/></p>
<p>Mensagem:</p>
<textarea cols="40" rows="5" name="tMsg" id="cMsg" maxlength="500" placeholder="Sua Mensagem" required></textarea>
<input type="hidden" name="tData" id="cData" value="<?php echo date('Y-m-d') ?>"/>
<br/>
<input type="submit" value="Enviar"/>
<input type="reset" value="Limpar"/>
</form>
Lembrando que, em formulários, o action vai para a página onde tem os códigos, se for executado na mesma página, apenas deixe as aspas vazias.
PS: Note que no código acima, a data atual é exibida em uma supertag PHP.
No PHPMyAdmin, criaremos um database com um nome qualquer, por exemplo, "videoaulas", usamos esses comandos:
create database videoaulas
default character set utf8
default collate utf8_general_ci;
E também criaremos uma tabela, com esses comandos:
use videoaulas;
create table comentarios (
id int not null auto_increment,
nome varchar(120),
email varchar(50),
mensagem longtext,
data date,
primary key(id)
)
default charset = utf8;
Para ligarmos a página PHP com o banco de dados, criamos uma nova página com o nome dados.php, sem códigos HTML com esse dados:
$hostname = "localhost";
$username = "root";
$password = "";
$database = "videoaulas";
$conexao = mysqli_connect($hostname, $username, $password, $database) or die ("Falha na Conexão com o Banco de Dados");
// mysqli_connect() pega os dados das variáveis e fará a conexão com o PHPMyAdmin.
mysqli_set_charset($conexao, "utf8"); // Isso corrige acentuação
PS: Lembrando que no mysqli_connect(), as variáveis tem sempre que ter a mesma ordem, host (site), user (login), senha e database (banco).
Para entender, mysqli_connect()
fará a conexão do PHP com o banco MySQL, hostname é o nome do site, database é o nome do banco de dados no PHPMyAdmin, root é o nome de usuário (login) e password é a senha (que pode ou não ser vazia), e o mysqli_query()
executa os códigos com o banco.
O or die
é usado para sair e exibir alguma mensagem caso não consiga conexão, se não houver erro, ele continua a execução, o mysqli_set_charset()
ali é para corrigir erros de caracteres.
Na página que receberá os dados (no caso, conclusao.php), colocaremos antes de todo o HTML um bloco PHP como esses códigos:
include_once("dados.php"); // Incluí o outro script PHP.
$nome = $_POST["tNome"];
$mail = $_POST["tMail"];
$msg = $_POST["tMsg"];
$data = $_POST["tData"];
// Caso não queira colocar a data num input, podemos substituir a variável apenas por isso:
// $data = date("Y-m-d");
if($mail != "") {
$sql = "insert into comentarios (nome, email, mensagem, data) values ('$nome', '$mail', '$msg', '$data')";
$salvar = mysqli_query($conexao, $sql);
// A variável $sql salva os comandos numa string, mysqli_query() executa os dados das variáveis dentro do PHPMyAdmin.
}
$linhas = mysqli_affected_rows($conexao); // Mostra quantas linhas foram afetadas no banco.
mysqli_close($conexao); // Encerra a conexão.
Pra entender, a variável $sql
executará os comandos do banco de dados, o $linhas
pegará o número de linhas afetadas no banco (no caso, 0 ou 1), o mysqli_close()
fecha a conexão.
PS: Lembre-se que os comandos do Insert Into tem que estar todos na mesma ordem.
Lembrando que para filtrar os códigos, usamos htmlspecialchars()
ou htmlentities()
(com algumas diferenças entre eles) para evitar que o site seja invadido com códigos maliciosos, isset()
para ver se tem algum caractere inserido, e o trim()
para retirar espaços desnecessários antes e depois do texto, com operadores ternários, por exemplo:
$nome = isset($_POST["tNome"]) ? htmlspecialchars(trim($_POST["tNome"]), ENT_QUOTES) : "";
$mail = isset($_POST["tMail"]) ? htmlspecialchars(trim($_POST["tMail"]), ENT_QUOTES) : "";
$msg = isset($_POST["tMsg"]) ? htmlspecialchars(trim($_POST["tMsg"]), ENT_QUOTES) : "";
$data = isset($_POST["tData"]) ? htmlspecialchars(trim($_POST["tData"]), ENT_QUOTES) : "";
Na página de conclusão, podemos abrir uma supertag PHP no corpo do site, para exibir se a mensagem foi enviada, assim:
if($linhas == 1) {
echo "Sua Mensagem foi Enviada!";
}
else if($mail == "") {
echo "Página Indisponível no Momento!";
}
else {
echo "Falha no Envio, Tente Novamente!";
}
Se quisermos que, após a execução dos dados, ele volte para determinada página, podemos usar o header
, dessa forma, no final do código da segunda página, no lugar do mysqli_close(), no final do código:
header("location: index.php");
Para exibirmos as mensagens do banco, usamos esse código, na página desejada (no exemplo criaremos uma página pra consultas, consultas.php), no começo dela, antes do HTML:
include_once("dados.php");
$sql = "select * from comentarios order by data desc"; // Coloca os comandos numa string.
$coment = mysqli_query($conexao, $sql); // Executa os dados das variáveis no MySQL.
$row = mysqli_fetch_assoc($coment); // Coloca os dados num array e retorna resultados.
$total = mysqli_num_rows($coment); // Consulta se ainda existem dados.
PS: O Desc no caso é "descendente".
E no corpo da página consultas, colocamos esse código (podendo ter outras tags HTML para uma exibição melhor):
echo "<fieldset>";
echo "<legend>" . $row["id"] . "</legend>";
echo "<p>" . $row["nome"] . "</p>";
echo "<p>" . $row["email"] . "</p>";
echo "<pre>" . $row["mensagem"] . "</pre>";
echo "<p>" . $row["data"] . "</p>";
echo "</fieldset>";
PS: Lembrando que nesse caso, vai os nomes da tabela no MySQL, não dos names do HTML.
Mas até aí, enfrentamos dois problemas, o formato que a data é exibida (formato americano), e que só exibe o primeiro contato.
Para corrigir o problema da Data, colocamos apenas isso no lugar do $row["Data"]
:
date("d-m-Y", strtotime($row["data"]))
A função strtotime()
é usada para manipular datas. Mudando o traço, podemos mudar o separador (por exemplo, (d/m/Y).
E para exibir os dados, apenas coloque tudo num do while, dessa forma:
do {
echo "<fieldset>";
echo "<legend>" . $row["id"] . "</legend>";
echo "<p>" . $row["nome"] . "</p>";
echo "<p>" . $row["email"] . "</p>";
echo "<pre>" . $row["mensagem"] . "</pre>";
echo "<p>" . $row["data"] . "</p>";
echo "</fieldset>";
}
while($row = mysqli_fetch_assoc($coment));
PS: Para não exibir os dados das tags HTML sem existir algum cadastro, podemos colocar tudo num if, dessa forma:
if($total > 0) {
do {
echo "<fieldset>";
echo "<legend>" . $row["id"] . "</legend>";
echo "<p>" . $row["nome"] . "</p>";
echo "<p>" . $row["email"] . "</p>";
echo "<pre>" . $row["mensagem"] . "</pre>";
echo "<p>" . $row["data"] . "</p>";
echo "</fieldset>";
}
while($row = mysqli_fetch_assoc($coment));
}
else {
echo "<h3>Não Existe Mensagens no Banco de Dados.</h3>";
}
Para excluir bancos de dados, podemos inserir algum link ou botão que direcione para uma página para isso, na própria página de consultas.
Como exemplo, colocaremos isso no código PHP, dentro do do while, assim:
echo "<p><a href='excluir.php?id=" . $row["id"] . "'>Excluir</a></p>";
Na página de exclusão, colocamos apenas isso, sem HTML:
include_once("dados.php");
$id = (int)htmlspecialchars($_GET["id"], ENT_QUOTES); // Pegará dados da URL, por isso é GET, NÃO é o id do banco
$sql_del = "delete from comentarios where id = '$id'";
$excluir = mysqli_query($conexao, $sql_del);
header("location: consultas.php");
Vamos criar uma nova página com um formulário igual ou parecido com o principal, para edição (o reset não funcionará como limpar, nesse caso, a data pode ser suprimida, nesse exemplo).
Na página de consultas, colocaremos isso no PHP:
echo "<p><a href='editar.php?id=" . $row["id"] . "'>Editar</a></p>";
Voltando na página de edição, colocaremos antes do HTML isso:
include_once("dados.php");
$id = (int)htmlspecialchars($_GET["id"], ENT_QUOTES); // O único que pegará dados da URL, por isso é GET.
$sql = "select * from comentarios where id = '$id'"; // Joga os comandos do MySQL numa string.
$coment = mysqli_query($conexao, $sql); // Executa dados no MySQL
$row = mysqli_fetch_assoc($coment); // Coloca os dados num array e retorna resultados.
$total = mysqli_num_rows($coment); // Consulta se ainda existem dados.
E mostraremos os values referentes às tabelas no Banco, com PHP, nos inputs, dessa forma:
value="<?php echo $row['nome'] ?>"
value="<?php echo $row['email'] ?>"
PS: No textarea basta apenas colocar a supertag PHP entre as tags.
Para funcionar, vamos usar também dentro do formulário um input hidden pra passar o IP, dessa forma
<input type="hidden" name="tId" id="cId" value="<?php echo $row['id'] ?>"/>
No caso, o action vai ser numa página PHP vazia (sem HTML), denominada atualizar, esse é o código dela:
include_once("dados.php");
$id = isset($_POST["tId"]) ? (int)htmlspecialchars($_POST["tId"]), ENT_QUOTES) : 0; // Esse pegará dado do Input Hidden.
$nome = isset($_POST["tNome"]) ? htmlspecialchars(trim($_POST["tNome"]), ENT_QUOTES) : "";
$mail = isset($_POST["tMail"]) ? htmlspecialchars(trim($_POST["tMail"]), ENT_QUOTES) : "";
$msg = isset($_POST["tMsg"]) ? htmlspecialchars(trim($_POST["tMsg"]), ENT_QUOTES) : "";
if($mail != "") {
$sql_atu = "update comentarios set nome = '$nome', email = '$mail', mensagem = '$msg' where id = '$id'";
$atualizar = mysqli_query($conexao, $sql_atu);
}
header("location: consultas.php");