joanita Postado Abril 4, 2016 Denunciar Share Postado Abril 4, 2016 neste codigo estou a receber um erro que não consigo resolver... (Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in /home/index.php on line 23)alem disso mal abre a pagina grava-me logo o registo e exibe o anterior, quando so o deveria fazer apos enviar o form pra base de dados. <?php//LIGA-SE Á BASE DE DADOS include('ligar-bd.php');//SE FOR PEDIDO UMA CONSULTA if(!isset($_GET["getfile"])){//SE ELA NÃO EXISTIR MOSTRA A MENSAGEM DE ERRO if ($_FILES["file"]["error"] > 0){ echo "Erro: " . $_FILES["file"]["error"] . "<br>";//CASO CONTRÁRIO }else{//EXECUTA AÇÕES DE TRATAMENTO E CODIFICAÇÃO DAS IMAGENS move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); $bin_string = file_get_contents($_FILES["file"]["name"]); $hex_string = base64_encode($bin_string);//CARREGA TODAS AS OPÇÕES DO FORMULÁRIO $nome = $_POST['nome'];//INSERE OS DADOS NA BASE DE DADOS $mysqli->query(" INSERT INTO teste(imagem,nome) VALUES ('" . $hex_string . "','$nome') "); }//SE AINDA NADA FOI PEDIDO PARA SER MOSTRADO }else{//SELECIONA NA BASE DE DADOS A ULTIMA ENTRADA if ($result = $mysqli->query(" SELECT * FROM teste ORDER BY id DESC ")){ if($row = $result->fetch_assoc()){ $output_hex_string = $row["imagem"]; $output_bin_string = base64_decode($output_hex_string); header("Content-Type: image/png"); header("Content-Length: " . strlen($output_bin_string));//MOSTRA A ULTIMA ENTRADA $result->free(); echo $output_bin_string; } } } ?> <html> <body> <form action="" method="POST" enctype="multipart/form-data"> Nome: <input type="text" name="nome"> <br> Imagem: <input type="file" name="file"> <br> <input type="submit"> </form> <?php//MOSTRA OS RESULTADOS echo "<h2>Nome:<i> $nome </i></h2>"; ?> <img src="index.php?getfile=1"> </body> </html> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Abril 5, 2016 Denunciar Share Postado Abril 5, 2016 O erro diz que o parâmetro está vazio. Ou seja, $_FILES["file"]["name"] está sem valor Dâ print_r em $_FILES e veja se os valores estão vindo corretamente Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 joanita Postado Abril 5, 2016 Autor Denunciar Share Postado Abril 5, 2016 (editado) não... se estivesse não dava o erro, eu fiz print $_FILES; e aparece apenas escrito "Array"... com print_r $_FILES; aparece Parse error: syntax error, unexpected T_VARIABLE in /home/rpublici/public_html/teste/index.php on line 6 não sei se isso se deve ao script estar a gravar no banco um registo vazio mal se abre a pagina, mesmo antes de enviar alguma coisa Editado Abril 5, 2016 por joanita Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Abril 5, 2016 Denunciar Share Postado Abril 5, 2016 print_r($_FILES); Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 joanita Postado Abril 6, 2016 Autor Denunciar Share Postado Abril 6, 2016 (editado) dividi em 3 ficheiros e ficou bom, o index.php com o form, o envia.php com o php para enviar e o ultimo_envio.php para include do ultimo post. Gostaria mesmo é de criar um campo para categoria abaixo do Nome, coisa que ando á meses a tentar e ainda não consegui fazer as categorias :( Se me puderes ajudar agradeço! vê como ficou... index.php <?php include "estilos/estilos.css"; ?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <html> <body> <center> <h2>Adicionar Nova Entrada</h2> <form action="envia.php" method="POST" enctype="multipart/form-data"> <table align="center" width="300px" border="0" cellpading="4" cellspacing="8" bgcolor="#f0f0f0"> <tr><td align="center"> <hr size=1 width=300 class="degrade"> Nome: <br> <input type="text" name="nome"> <br> Adicionar uma imagem: <br> <input type="file" name="file"> <hr size=1 width=300 class="degrade"> <br> <input type="submit" value="Adicionar Entrada" class="button buttonfx buttonredondo"> <br> <br> </td></tr></table> </form> <hr size=1 width=300 class="listado"> </center> </body> </html> envia.php <?php include('ligar-bd.php'); if(!$_GET[getfile]){ if ($_FILES["file"]["error"] > 0){ echo "Ups... falha no envio, tente novamente. ERRO: " . $_FILES["file"]["error"] . "<br>"; }else{ move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); $bin_string = file_get_contents($_FILES["file"]["name"]); $hex_string = base64_encode($bin_string); $nome = filter_var($_POST['nome'], FILTER_SANITIZE_STRING); $mysqli->query(" INSERT INTO teste( imagem, nome ) VALUES ( '" . $hex_string . "', '$nome' ) "); } }else{ if ($result = $mysqli->query(" SELECT * FROM teste ORDER BY id DESC ")){ if($row = $result->fetch_assoc()){ $output_hex_string = $row["imagem"]; $output_bin_string = base64_decode($output_hex_string); header("Content-Type: image/png"); header("Content-Length: " . strlen($output_bin_string)); $result->free(); echo $output_bin_string; } } } include "ultimo_envio.php"; ?> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ultimo_envio.php <html> <body> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php echo " <center> <hr size=1 width=300 class='degrade'> Última entrada adicionada: <br> <i><b> $nome </b></i> <hr size=1 width=300 class='listado'> <a href='envia.php?getfile=1' target='blank''><img src='envia.php?getfile=1'></a> "; include "index.php"; ?> </center> </body> </html> Editado Abril 6, 2016 por joanita Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Abril 6, 2016 Denunciar Share Postado Abril 6, 2016 A forma mais simples é criar um input text para o nome da categoria e salvar o valor desse input no banco de dados. Dá pra aprimorar. Em vez do input, usar um <select> que busca as categorias no banco, caso haja uma lista pré-definida de categorias Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 joanita Postado Abril 6, 2016 Autor Denunciar Share Postado Abril 6, 2016 pois era isso que queria, criar um campo para escolher a categoria existente ou digitar a categoria nova, mas o meu problema parte muite de como tudo isso joga com o banco... criar o input é facil, o problema é depois as ligaçoes entre IDs de categorias/subcategorias com o id do $nome. Neste caso com o meu código que te mostrei acima, podes dar-me um exemplo visual de como farias? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 joanita Postado Abril 6, 2016 Autor Denunciar Share Postado Abril 6, 2016 Beraldo tenho a tabela teste com os campos (id, nome, imagem, catid, categoria) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Abril 6, 2016 Denunciar Share Postado Abril 6, 2016 Para modelar categorias e subcategorias, sugiro o seguinte: http://rberaldo.com.br/categorias-e-subcategorias-exemplo-de-modelagem/ Se for usar ID de categoria, é melhor criar um <select> com as categorias disponíveis. Depois basta receber o ID via $_POST e inseri-lo na tabela com um INSERT comum. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 joanita Postado Abril 6, 2016 Autor Denunciar Share Postado Abril 6, 2016 assim... ? isto parece-me um select comum... como posso depois permitir a inserção de novas categorias que não estejam pre-definidas (supondo que queres adicionar umproduto numa categoria nova não existente) Categoria: <br> <select name="categoria" id="catid"> <option>Aromáticas</option> <option>Malaguetas</option> <option>Legumes</option> <option>Árvores</option> <option>Sebes e Arbustos</option> <option>Flores</option> </select> Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 joanita Postado Abril 6, 2016 Autor Denunciar Share Postado Abril 6, 2016 a tua modelagem de categorias esta obsoleta ainda em mysql não esta não vi mal Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Abril 7, 2016 Denunciar Share Postado Abril 7, 2016 Um campo <select> não permite adicionar valores. Se quiser permitir a inserção de novas categorias, use um campo input text. Sobre a modelagem obsoleta, não entendi seu argumento. A modelagem do banco independe de SGBD. E uso MySQLi orientado a objetos no exemplo. O que acha que está obsoleto? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 joanita Postado Abril 7, 2016 Autor Denunciar Share Postado Abril 7, 2016 ola, não esta nada, pareceu-me estar ainda em msql antigo, mas vi mal desculpa. então mas voltando ao assunto, normalmente aparece um input para adicionar nova categoria com um select a frente para escolher uma categoria caso esta já exista e não queiramos criar uma nova. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Beraldo Postado Abril 7, 2016 Denunciar Share Postado Abril 7, 2016 Em casos assim, esse input text recebe o nome de uma nova categoria e o salva no banco via Ajax, atualizando o <select>, para que a categoria possa ser selecionada. É uma lógica um pouco mais avançada, mas não é muito complexa. Se você conhecer um pouco sobre Ajax, não terá grandes dificuldades Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 joanita Postado Abril 10, 2016 Autor Denunciar Share Postado Abril 10, 2016 Em 07/04/2016 at 17:54, Beraldo disse: Em casos assim, esse input text recebe o nome de uma nova categoria e o salva no banco via Ajax, atualizando o <select>, para que a categoria possa ser selecionada. É uma lógica um pouco mais avançada, mas não é muito complexa. Se você conhecer um pouco sobre Ajax, não terá grandes dificuldades olha aí Beraldo... <div class="formularioPainel"> <form action="" method="POST" enctype="multipart/form-data"> <label> <titulo>Selecione ou insira uma nova Categoria ou Subcategoria: </titulo> <br> <span>Categorias: </span> <select name="categoria"> <option>DEVIA LER E MOSTRAR AS ENTRADAS DO CAMPO "categoria" NA BASE DE DADOS "teste"</option> </select> </label> <br> <span>Insira a nova Categoria/Subcategoria: </span> <label> <input type="text" name="categoria" value=""/> </label> <input type="submit" value="Enviar" /> <input type="hidden" name="acao" value="adicionar_categoria" /> </form> </div> <?php // LIGA-SE Á BASE DE DADOS include('ligar-bd.php'); include('estilos/estilos.css'); // INFORMA QUE VAI USAR UTF8 AO GRAVAR NA BASE DE DADOS $mysqli->set_charset('utf8'); if(isset($_POST['acao']) && $_POST['acao'] == "adicionar_categoria"){ $categoria = $_POST['categoria']; // SE A CATEGORIA ESTIVER VAZIA MOSTRA A MENSAGEM if($categoria == ""){ echo "<script>alert('O campo categoria não pode ficar vazio!')</script>"; }else{ // SELECIONA A CATEGORIA NA BASE DE DADOS $seleciona = $mysqli->query("SELECT * FROM teste WHERE categoria = '$categoria'"); //SE A CATEGORIA EXISTIR NA BASE DE DADOS MOSTRA A MENSAGEM if(mysqli_num_rows($seleciona) == 1) { echo "<script>alert('Esta categoria já existe!')</script>"; }else{ // INSERE NA BASE DE DADOS $insere = $mysqli->query("INSERT INTO teste (categoria) VALUES('$categoria')"); echo "<script>alert('Adicionado com sucesso!')</script>"; } } } ?> e na minha tabela tenho estes campos: `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) CHARACTER SET utf8 NOT NULL, `imagem` longtext CHARACTER SET utf8 NOT NULL, `catid` int(11) NOT NULL, `categoria` varchar(50) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
joanita
neste codigo estou a receber um erro que não consigo resolver...
(Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in /home/index.php on line 23)
alem disso mal abre a pagina grava-me logo o registo e exibe o anterior, quando so o deveria fazer apos enviar o form pra base de dados.
<?php
//LIGA-SE Á BASE DE DADOS
include('ligar-bd.php');
//SE FOR PEDIDO UMA CONSULTA
if(!isset($_GET["getfile"])){
//SE ELA NÃO EXISTIR MOSTRA A MENSAGEM DE ERRO
if ($_FILES["file"]["error"] > 0){
echo "Erro: " . $_FILES["file"]["error"] . "<br>";
//CASO CONTRÁRIO
}else{
//EXECUTA AÇÕES DE TRATAMENTO E CODIFICAÇÃO DAS IMAGENS
move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
$bin_string = file_get_contents($_FILES["file"]["name"]);
$hex_string = base64_encode($bin_string);
//CARREGA TODAS AS OPÇÕES DO FORMULÁRIO
$nome = $_POST['nome'];
//INSERE OS DADOS NA BASE DE DADOS
$mysqli->query(" INSERT INTO teste(imagem,nome) VALUES ('" . $hex_string . "','$nome') ");
}
//SE AINDA NADA FOI PEDIDO PARA SER MOSTRADO
}else{
//SELECIONA NA BASE DE DADOS A ULTIMA ENTRADA
if ($result = $mysqli->query(" SELECT * FROM teste ORDER BY id DESC ")){
if($row = $result->fetch_assoc()){
$output_hex_string = $row["imagem"];
$output_bin_string = base64_decode($output_hex_string);
header("Content-Type: image/png");
header("Content-Length: " . strlen($output_bin_string));
//MOSTRA A ULTIMA ENTRADA
$result->free();
echo $output_bin_string;
}
}
}
?>
<html>
<body>
<form action="" method="POST" enctype="multipart/form-data">
Nome: <input type="text" name="nome">
<br>
Imagem: <input type="file" name="file">
<br>
<input type="submit">
</form>
<?php
//MOSTRA OS RESULTADOS
echo "<h2>Nome:<i> $nome </i></h2>";
?>
<img src="index.php?getfile=1">
</body>
</html>
Link para o comentário
Compartilhar em outros sites
14 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.