Para realizar o upload de arquivos, precisaremos usar um código específico, que entrará na inserir-portfolio-processo.php, no lugar do $img $_REQUEST[], descrito abaixo:
$up["pasta"] = "../../img/"; // Pasta de Destino, não esqueça da última barra.
$up["tamanho"] = 1024 * 1024 * 2; // Tamanho limite em bytes (no caso 2 MB).
$up["extensoes"] = array("jpg", "jpeg", "png", "gif"); // Formatos permitidos.
$up["renomeia"] = true; // Muda o nome da imagem enviada, útil pra evitar conflitos de nomes.
$extensao = strtolower(end(explode(".", $_FILES["tImg"]["name"]))); // Pega a extensão do arquivo.
// O condicional abaixo mostra erro no caso do arquivo estiver em formato errado:
// No código abaixo, deverá estar com "idêntico":
if(array_search($extensao, $up["extensoes"]) === false){
header("location: ../inserir-portifolio.php?env=erro-extensao");
exit; // O Exit termina a execução do script.
}
else if($up["tamanho"] < $_FILES["tImg"]["size"]) {
header("location: ../inserir-portifolio.php?env=erro-tamanho");
exit;
}
else if($up["renomeia"] == true){
switch($_FILES["tImg"]["type"]) {
case "image/gif":
$tipo = ".gif";
break;
case "image/png":
$tipo = ".png";
break;
default:
$tipo = ".jpeg";
break;
}
$nome_final = time() . $tipo; // Pega o horário atual e coloca no arquivo. A variável tipo converte os tipos.
}
else {
$nome_final = $_FILES["tImg"]["name"];
}
// Outra condição, que fará o upload.
if(move_uploaded_file($_FILES["tImg"]["tmp_name"], $up["pasta"] . $nome_final)) {
// Pega o arquivo, faz o upload, o move pega os nomes e tipos temporários, e vai jogar na pasta com o nome final.
// Fica vazio mesmo.
}
else {
header("location: ../inserir-portifolio.php?env=erro-imagem");
exit;
}
PS: Como a variável $img foi suprimida, no array da função inserir, devemos substituir ela pelo $nome_final, no caso.
No formulário HTML, além do action, temos que colocar o parâmetro enctype="multipart/form-data"
para upar arquivos.
Na página HTML do portfólio, coloque entre isso, logo abaixo do primeiro ENDIF:
<?php if($env == "erro-extensao"): ?>
<section class="info">
<h1>Só Envie Imagens com Extensões jpg, jpeg, png ou gif!</h1>
</section>
<?php endif; ?>
<?php if($env == "erro-tamanho"): ?>
<section class="info">
<h1>Só Envie Imagens com até 2 MB!</h1>
</section>
<?php endif; ?>
<?php if($env == "erro-imagem"): ?>
<section class="info">
<h1>Não foi Possível Enviar o Arquivo!</h1>
</section>
<?php endif; ?>
Com isso, os arquivos serão guardados numa pasta, já convertidos em JPEG, caso não sejam nos formatos PNG e GIF, e os nomes irão para o banco de dados.
PS: Não esqueça de criar a pasta img na raiz do site.
Na pasta função, dentro de admin, salve um novo arquivo igual ao funcao-inserir, com o nome funcao-atualizar, mas com algumas diferenças, como podem ver:
include_once "../../conexao/conexao.php";
include_once "../../conexao/fecha-conexao.php";
function atualizar($coluna, $valor, $tabela, $where) { // Muda a função e tem uma nova variável.
// Verificaremos se existem arrays.
if(is_array($coluna) && is_array($valor)) {
// Verifica se tem a mesma quantidade de valores
if(count($coluna) == count($valor)) {
$valor_coluna = NULL; // Muda, colocando mais uma variável.
// Muda adicionando uma estrutura FOR:
for($i = 0; $i < count($coluna); $i++) {
$valor_coluna .= "{$coluna[$i]} = '{$valor[$i]}',";
}
// Tirando a vírgula da última posição:
$valor_coluna = substr($valor_coluna, 0, -1);
// Montar SQL (Muda também).
$atualizar = "update $tabela set $valor_coluna $where";
// Muda a forma de montar SQL.
}
else {
return false;
}
}
else {
// Montar SQL (Muda também).
$atualizar = "update $tabela set $coluna = '$valor' $where";
}
// Mostra se conectou (é outro if).
if($conexao = conectaSite()) {
// Atualizou?
if(mysqli_query($conexao, $atualizar)) { // Mudar variável
fechaConexao($conexao); // Função de outro arquivo.
return true;
}
else {
echo "Query Inválida";
return false;
}
}
else {
return false;
}
}
Lembrando que a Empresa seria "criada" pelo update, ou seja, o campo vai ter que ser criado previamente, o $where seria referente ao ID do banco de dados.
Vamos fazer um teste no teste.php, com esse código, para ver se funciona, se ele vai modificar o registro previamente criado na tabela empresa:
include "funcao-atualizar.php";
atualizar(array("nome", "fone", "email"), array("PontoCom", "33333-3333", "contato@ponto.com"), "empresa", "where id = 1");
Tente executar mudando os dados dos campos.
Dentro da pasta função, em admin, crie um novo PHP com o nome funcao-select.php, sem HTML. Veja abaixo:
include_once "../../conexao/conexao.php";
include_once "../../conexao/fecha-conexao.php";
function select($tabela, $coluna = "*", $where = NULL, $ordem = NULL, $limite = NULL) {
// Adicionado SQL pra consulta:
$sql = "select $coluna from $tabela $where $ordem $limite";
if($conexao = conectaSite()) {
// Conseguiu consultar?
if($query = mysqli_query($conexao, $sql)) {
// Encontrou algo?
if(mysqli_num_rows($query) > 0) {
$res_totais = array();
while($res = mysqli_fetch_assoc($query)) {
$res_totais[] = $res;
}
// Fecha conexão.
fechaConexao($conexao);
return $res_totais;
}
else {
return false;
}
}
else {
return false;
}
}
else {
return false;
}
}
Para fazer o teste, poste isso:
include "funcao-select.php";
$consulta = select("sites_relacionados", "*", "where id < 10", "order by id asc", "limit 3");
// Se quiser, tire ou mude algumas partes, mas deixe "sites_relacionados".
if($consulta == true) {
for($i = 0; $i < count($consulta); $i++) {
echo $consulta[$i]["id"] . "<br/>";
echo $consulta[$i]["nome"] . "<br/>";
echo $consulta[$i]["link"] . "<br/><br/>";
}
}
else {
echo "Nenhum Resultado na Consulta";
}
Pegue a página tm.php, e copie ela em outro PHP na pasta Admin, com o nome sites-relacionados, e muda o nome do h1 para Sites Relacionados.
Antes do HTML, coloque isso entre a supertag PHP:
include "funcao/funcao-select.php";
$consulta = select("sites_relacionados", "*", NULL, "order by nome asc");
PS: Para funcionar, volte no arquivo funcao-select.php e retire o caminho de volta de uma das pastas pra não dar erro, de modo que ele fique assim:
include_once "../conexao/conexao.php";
include_once "../conexao/fecha-conexao.php";
Voltando ao sites-relacionados, crie uma estrutura DIV assim, com blocos PHP:
<div class="tabela">
<div class="linha">
<div class="coluna">Nº</div>
<div class="coluna">Título</div>
<div class="coluna">Link</div>
<div class="coluna">Editar/Excluir</div>
</div>
<div class="linha">
<div class="coluna"><?php echo $i + 1 ?></div>
<div class="coluna"><?php echo $consulta[$i]["nome"] ?></div>
<div class="coluna"><?php echo $consulta[$i]["link"] ?></div>
<div class="coluna"><?php ?></div>
</div>
</div>
PS: Não confunda o Nº da tabela com a ID do banco.
Você agora colocará entre as duas tags div, antes do segundo class linha, você coloca uma estrutura de repetição:
if($consulta == true) {
for($i = 0; $i < count($consulta); $i++) {
E após o segundo div, você abre um bloco PHP apenas para fechar as duas chaves (sobre o for e o if) e colocar o else.
}
}
else {
echo "Nenhum Dado Encontrado!";
}
PS: Para os sites não invadirem o espaço, vá no arquivo CSS e adicione overflow: hidden em div.coluna
No último DIV de class coluna, faremos os botões de editar e excluir, dessa forma, com blocos PHP para passar os parâmetros pela URL:
<div class="coluna"><a href="editar-sites.php?id=<?php echo $consulta[$i]['id'] ?>">Editar</a></div>
Faça o mesmo com o excluir e em outras partes do site.