Jump to content
Fórum Script Brasil

joanita

Membros
  • Posts

    150
  • Joined

  • Last visited

Everything posted by joanita

  1. ok, tenho este trexo de codigo que me recebe e mostra os erros após enviar o form, ou seja mostra o que falta preencher: (index.php) <?php // Se existir sessão iniciada. if(isset($_SESSION['erros'])){ // Exibe caso existam, todos os erros trazidos pela sessão do ficheiro "envia.php". $mostra_erros = $_SESSION['erros']; echo "<br><img src='estilos/erro.png' border='0'><br>Upsss!<br>"; for($i = ; $i < count($mostra_erros); $i++){ echo "<font class='erros'>$mostra_erros[$i]<br></font>"; } } // Termina a sessão. session_destroy(); echo "<br>"; ?> e tenho este no ficheiro envia.php que é responsavel por verificar e me enviar os erros após receber as infos do index.php <?php session_start(); // Inicia a sessão // Liga-se à base de dados. require_once 'ligar-bd.php'; // Verifica se o número de elementos contados é igual aos que se espera enviar. // (É UMA PROTEÇÃO IMPORTANTE PORQUE PERMITE VER SE É UMA PESSOA OU ALGUM SOFTWARE A ENVIAR O FORMULÁRIO). if( count($_POST) == 3 ){ // Limpa o lixo das variaveis antes de as guardar. $nome = filter_var($_POST['nome'], FILTER_SANITIZE_STRING); $categoria = filter_var($_POST['categoria'], FILTER_SANITIZE_STRING); $id_categoria = filter_var($_POST['id_categoria'], FILTER_SANITIZE_STRING); // Armazena todos os erros na variiável $erros para mais tarde poder mostra-los. $erros = array(); // Verifica se os campos obrigatórios estão selecionados ou preenchidos. // e caso o campo não esteja selecionado ou preenchido exibe os erros. if( $nome == "" ){ $erros[] = "Preencha o nome!"; } // Caso o valor da variável seja comparável com zero mostra o erro. if( $categoria == "0" ){ $erros[1] = "Escolha a categoria ou insira uma nova!"; } // Caso existam erros, cria uma sessão para transporta-los para qualquer lugar sempre que desejado. if( count($erros) > ){ $_SESSION['erros'] = $erros; // redireciona para o link echo '<meta http-equiv="refresh" content="0; url=index.php" />'; } } exit; ?> acontece que ele retorna bem os erros, so que se por exemplo eu não inserir ou selecionar nada e clicar em enviar, ele retorna os 2 erros do nome e categoria, se eu escrever um nome apenas e enviar ele não retorna o erro da categoria! e se escolher uma categoria apenas e enviar ele retorna bem o erro do nome... alem disso, como são 2 ficheiros diferentes, caso eu faça uma dessas opções e envie ele retorna apenas um erro e não mantem o que já tinha sido selecionado ou inserido antes de enviar, resumindo obriga-me a preencher e selecionar de novo. como poderia meter isto a funcionar bem?
  2. como assim? tenho o index.php com o form que depois redireciona para este envia.php que tem as instruções para enviar os dados, mas ainda está em faase de construção pois alterei o original... agora o que tenho é isso que postei. A ideia será enviar apenas após fazer isto tudo que te falei, ou seja, verificar as categorias e inserir nome e categorias... a estrutura do banco é: -- -- Estrutura da tabela `categorias` -- CREATE TABLE IF NOT EXISTS `categorias` ( `id` int(11) NOT NULL AUTO_INCREMENT, `idcategoria` int(11) NOT NULL, `categoria` varchar(50) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; -- -- Estrutura da tabela `produtos` -- CREATE TABLE IF NOT EXISTS `produtos` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) NOT NULL, `imagem` longtext NOT NULL, `id_categoria` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=73 ; e a do index atualmente é: <?php require_once 'ligar-bd.php'; require_once "funcoes.php"; require_once "estilos/estilos.css"; include "topo.php"; require_once "conta_total.php"; ini_set('default_charset','UTF-8'); ?> <html> <body> <center> <titulo>Adicionar Nova Entrada</titulo> <hr size=1 width=500 class="degrade"> <form action="envia.php" method="POST" enctype="multipart/form-data"> <table align="center" width="500px" border="0" cellpading="4" cellspacing="8" bgcolor="#f0f0f0"> <?php echo $_SESSION['erros']; ?> <tr> <td align="center"> <hr size=1 width=500 class="degrade"> <label for="nome">Nome:</label> <br> <input type="text" name="nome"> <br> <label for="categoria">Escolha a Categoria:</label> <br> <select name="categoria" id="categoria"> <option value='0' select='selected'>---</option> <?php $categorias = listaCategorias(); if( $categorias > ){ foreach($categorias as $categoria){ echo "<option value='{$categoria["id"]}'>{$categoria["categoria"]}</option>\r\n"; } } ?> </select> <br> ou insira uma nova... <br> <br> <label for="subcategoria">Nova Subcategoria ou Categoria:</label> <br> <input type="text" name="subcategoria"> <br> <label for="imagem">Adicione uma imagem:</label> <br> <input type="file" name="file"> <hr size=1 width=500 class="degrade"> <br> <input type="submit" value="Adicionar Entrada" class="button buttonfx buttonredondo"> <br> <br> </td> </tr> </table> </form> <?php include "rodape.php"; ?> </center> </body> </html> Atenção que o index infelizmente ainda me está a dar um erro de sessão que não estou a conseguir resolver (só para variar rsrsrsr) :D
  3. isso :) algo do género sim... mas estou meio baralhado de como fazer isso... o código que tenho é???? <?php require_once 'ligar-bd.php'; if( count($_POST) == 3 ){ $nome = filter_var($_POST['nome'], FILTER_SANITIZE_STRING); $categoria = filter_var($_POST['categoria'], FILTER_SANITIZE_STRING); $id_categoria = filter_var($_POST['id_categoria'], FILTER_SANITIZE_STRING); $erros = array(); if( $nome == "" ){ $erros[0] = "Preencha o nome!"; } if( $categoria == "0" ){ $erros[1] = "Escolha a categoria ou insira uma nova!"; } if( count($erros) > 0 ){ $_SESSION['erros'] = $erros; // redireciona para o link echo '<meta http-equiv="refresh" content="0; url=index.php" />'; exit; } } exit; ?>
  4. pensa comigo... o campo de cima (categoria) deveria mostrar todas as categorias e respetivas subcategorias caso existam... o campo de baixo deveria permitir apenas criar uma nova subcategoria ou categoria. deveria existir algo tipo um IF que verificasse se o campo categoria tinha alguma categoria/subcategoria selecionada e caso sim, usasse esse destino para a nova entrada e ao mesmo tempo p+ermitisse criar uma nova subcategoria dessa se fosse preciso, caso não existisse nada selecionado então mostraria uma mensagem a obrigar a selecionar uma categoria ou permitia criar uma nova. o que tem que ser obrigatório é ter uma categoria selecionada ou criar uma nova cat ou sub dessa,
  5. então mas para isso não é p+reciso o campo subcategoria porque as categorias e subcategorias deviam aparecer no select "categoria"... e isso é capaz de baralhar as pessoas
  6. ??? então mas isso assim não da, acho que não estas a perceber... os campos nome e imagem são obrigatórios, tal como uma categoria... seja ela criada de novo ou selecionada... logo não posso deixar apenas 2 campos de seleção um para a cat e outro para a sub, tem que permitir criar uma percebes? imagina que eu quero adicionar uma nova planta numa categoria que não existe ou subcategoria de uma categoria já existente...
  7. a duvida é que te4nho 2 campo ne? o catefgoria e por baixo o subcategoria (que tambem tem que dar para nele criar a categoria nova)... imagina tu podes escolher uma categoria das que já existe e criar uma subcategoria dessa categoria ou simplesmente usar a categoria existente ou ainda criar uma nova categoria no caso de nenhuma estar selecionada... nós já conseguimos meter o campo categoria a listar as categorias, agora falta o subcategoria funcionar
  8. perfeito :) será que podemos avançar mais com o resto podes ajudar?
  9. alterei o nome da tabela "teste" para "produtos"... faz mais sentido, assim ficamos com categorias e produtos
  10. excelente! esta a funcionar maravilhosamente... Stoma muito obrigado :) será que me podes ajudar no resto do código que falta? Isto é assim, eu estou a criar um banco de sementes organicas, onde dá para a pessoa inserir a semente que tem e meter por categoria, tem os campos (nome, categoria e subcategoria) imagina... tu metes o nome de uma semente e o código tem que ver se alguma categoria esta selecionada, se tiver uma selecionada adiciona a semente nessa ou permite criar uma subcategoria dessa categoria, caso não esteja nenhuma selecionada, o campo subcategoria tem que permitir criar uma nova categoria, mas nada como veres a funcionar neste link: http://www.rpublicidade.com/teste/index.php eu tenho 2 bases de dados (bancos como voces chamam no brasil) uma chamada teste com os dados da semente, outra chamada categorias com as categorias, assim: -- -- Estrutura da tabela `categorias` -- CREATE TABLE IF NOT EXISTS `categorias` ( `id` int(11) NOT NULL AUTO_INCREMENT, `idcategoria` int(11) NOT NULL, `categoria` varchar(50) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; -- -- Estrutura da tabela `teste` -- CREATE TABLE IF NOT EXISTS `teste` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nome` varchar(50) NOT NULL, `imagem` longtext NOT NULL, `id_categoria` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=73 ; da uma olhada no link para perceberes primeiro o que queria. Já coloco o que faz falta ainda fazer bom vamos por partes... a parte do select das categorias já ficou a funcionar, só uma coisa... (aparece um espaço no fim do select sem nada, esse espaço deveria aparecer no inicio do select para caso estivesse vazio como aparece, poder-mos criar outra nova categoria usando o campo subcategoria). Nesta parte falta ainda permitir criar nova categoria ou uma subcategoria da categoria selecionada, ou simplesmente não ser usado ficando apenas com a categoria selecionada. Abaixo o código inteiro atual do index.php <?php include "topo.php"; require_once "ligar-bd.php"; require_once "functions.php"; require_once "estilos/estilos.css"; require_once "conta_total.php"; ini_set('default_charset','UTF-8'); ?> <html> <body> <center> <titulo>Adicionar Nova Entrada</titulo> <hr size=1 width=500 class="degrade"> <form action="envia.php" method="POST" enctype="multipart/form-data"> <table align="center" width="500px" border="0" cellpading="4" cellspacing="8" bgcolor="#f0f0f0"> <tr> <td align="center"> <hr size=1 width=500 class="degrade"> <label for="nome">Nome:</label> <br> <input type="text" name="nome"> <br> <label for="categoria">Escolha a Categoria:</label> <br> <select name="categoria" id="categoria"> <?php $categorias = listaCategorias(); if( $categorias > ){ foreach($categorias as $categoria){ echo "<option value='{$categoria["id"]}'>{$categoria["categoria"]}</option>\r\n"; } } ?> </select> <br> ou insira uma nova... <br> <br> <label for="subcategoria">Nova Subcategoria ou Categoria:</label> <br> <input type="text" name="subcategoria"> <br> <label for="imagem">Adicione uma imagem:</label> <br> <input type="file" name="file"> <hr size=1 width=500 class="degrade"> <br> <input type="submit" value="Adicionar Entrada" class="button buttonfx buttonredondo"> <br> <br> </td> </tr> </table> </form> <?php include "rodape.php"; ?> </center> </body> </html> além disso, eu quando comecei o código fiz apenas uma tabela para tudo, depois é que me deram o concelho para fazer antes em duas, logo o resto dos ficheiros deixaram de funcionar (é uma questão de adaptar ás novas tabelas, mas ainda está por fazer...) mas vamos primeiro tratar isso das subcategorias.
  11. aparece no select escrito array e array de novo abaixo <?php // ############################## // FUNÇÃO QUE TRATA AS CATEGORIAS // ############################## function listaCategorias(){ // Na função a variável $mysqli não é reconhecida, por isso informamos que existe. global $mysqli; // Agora já reconhece a ligação à BD, já podemos executar o código. $sql = "SELECT id, categoria FROM categorias ORDER BY categoria ASC"; if(!$mysqli = $mysqli->query($sql)){ die('Erro ao consultar a base de dados: [' . $mysqli->error . ']'); } if( $mysqli->num_rows > ){ $rows = Array(); while($rows[] = $mysqli->fetch_assoc()){} return $rows; } } ?>
  12. tal como expliquei no primeiro post, tenho 2 files, um é o index.php e o outro o fuctions.php. ao inserir esse codigo antes do if nada da, o unico sitio que permite alguma resposta é antes do fuction, e aparece apenas NULL. Em qualquer outro lado não aparece nada e e mostra so meia pagina. functions.php <?php // ############################## // FUNÇÃO QUE TRATA AS CATEGORIAS // ############################## function listaCategorias(){ // Na função a variável $mysqli não é reconhecida, por isso informamos que existe. global $mysqli; // Agora já reconhece a ligação à BD, já podemos executar o código. $sql = "SELECT id, categoria FROM categorias ORDER BY categoria ASC"; if(!$mysqli = $mysqli->query($sql)){ die('Erro ao consultar a base de dados: [' . $mysqli->error . ']'); } if( $mysqli->num_rows > ){ $rows = $mysqli->fetch_all(MYSQLI_ASSOC); return $rows; }else{ return ; } } ?> e o index.php tem o seguinte select: <label for="categoria">Escolha a Categoria:</label> <br> <select name="categoria" id="categoria"> <?php $categorias = listaCategorias(); if( $categorias > ){ foreach($categorias as $id => $categoria){ echo '<option value="'.$id.'">'. $categoria .'</option>'."\r\n"; } } ?> </select> ERRO: [28-Apr-2016 20:10:29 Europe/Lisbon] PHP Fatal error: Call to undefined method mysqli_result::fetch_all() in .../functions.php on line 19 ou seja, a linha: $rows = $mysqli->fetch_all(MYSQLI_ASSOC); há e não fui eu que criei não
  13. mas assim ela da erro, esconde metade do cenário que deveria mostrar na pagina
  14. boa noite, tenho o seguinte código no index.php que chama o ficheiro functions.php: <label for="categoria">Escolha a Categoria:</label> <br> <select name="categoria" id="categoria"> <?php $categorias = listaCategorias(); if( $categorias > ){ foreach($categorias as $id => $categoria){ echo '<option value="'.$id.'">'. $categoria .'</option>'."\r\n"; } } ?> </select> mas ele em vez de retornar apenas os valores "categoria (que contém os nomes delas)" está a retornar apenas a primeira entrada, mostrando o ID e a Categoria... Devia mostrar apenas as categorias das várias entradas. functions.php <?php // ############################## // FUNÇÃO QUE TRATA AS CATEGORIAS // ############################## function listaCategorias(){ // Na função a variável $mysqli não é reconhecida, por isso informamos que existe. global $mysqli; // Agora já reconhece a ligação à BD, já podemos executar o código. $sql = "SELECT id, categoria FROM categorias ORDER BY categoria ASC"; if(!$mysqli = $mysqli->query($sql)){ die('Erro ao consultar a base de dados: [' . $mysqli->error . ']'); } if( $mysqli->num_rows > ){ $rows = $mysqli->fetch_assoc(); return $rows; }else{ return ; } } ?>
  15. 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`)
  16. Boa noite, precisava de criar onde tenho o select das categorias (pre-definidas no codigo), passar esses dados antes para a db em vez de os ter no codigo e no lugar deste select, colocar outro que fosse buscar esses dados ao db e os mostrasse no select e a frente um input que permitisse criar uma nova categoria ou no caso de já selecionada uma no select usar essa ou criar uma subcategoria dessa... ex: SELECT (vai ao db buscar as categorias existentes) INPUT (permite criar categorias novas ou caso se escolha no select uma permite criar uma subcategoria) [SELECT] + [INPUT] = [CATEGORIAS E SUBCATEGORIAS NO DB] o meu código atual é (index.php): <html> <body> <?php include "ligar-bd.php"; include "estilos/estilos.css"; ini_set('default_charset','UTF-8'); include "conta_total.php"; ?> <center> <titulo>Adicionar Nova Entrada</titulo> <hr size=1 width=500 class="degrade"> <form action="envia.php" method="POST" enctype="multipart/form-data"> <table align="center" width="500px" border="0" cellpading="4" cellspacing="8" bgcolor="#f0f0f0"> <tr> <td align="center"> <hr size=1 width=500 class="degrade"> Nome: <br> <input type="text" name="nome"> Categoria: <br> <select name="categoria"> <option>teste 1</option> <option>teste 2</option> </select> <br><br> Adicionar uma imagem: <br> <input type="file" name="file"> <hr size=1 width=500 class="degrade"> <br> <input type="submit" value="Adicionar Entrada" class="button buttonfx buttonredondo"> <br> <br> </td> </tr> </table> </form> <?php include "rodape.php"; ?> </center> </body> </html> depois tenho outro com os dados php para enviar (envia.php)
  17. como coloco isto a enviar as imagens para a pasta uploads em vez de pra root? <?php // LIGA-SE À BASE DE DADOS include('ligar-bd.php'); // INFORMA QUE VAI USAR UTF8 AO GRAVAR NA BASE DE DADOS $mysqli->set_charset('utf8'); // SE FOR PEDIDO UMA CONSULTA if(!$_GET[getfile]){ // SE ELA NÃO EXISTIR MOSTRA A MENSAGEM DE ERRO if ($_FILES["file"]["error"] > 0){ echo "Ups... falha no envio, tente novamente. ERRO: " . $_FILES["file"]["error"] . "<br>"; }else{ // 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); // OPÇÕES DO FORMULÁRIO $nome = filter_var($_POST['nome'], FILTER_SANITIZE_STRING); $categoria = filter_var($_POST['categoria'], FILTER_SANITIZE_STRING); // INSERE NA BASE DE DADOS $mysqli->query(" INSERT INTO teste( imagem, nome, categoria ) VALUES ( '" . $hex_string . "', '$nome', '$categoria' ) "); } }else{ // SELECIONA NA BASE DE DADOS A ÚLTIMA 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 ÚLTIMA ENTRADA $result->free(); echo $output_bin_string; } } } include "ultimo_envio.php"; ?>
  18. 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.
  19. tenho um ficheiro que envia um form para a base de dados e codifica a imagem com $hex_string = base64_encode($bin_string); depois tenho um php para eliminar a entrada da base de dados caso queira, mas acontece que ele elimina do banco mas deixa a imagem no servidor e quero que ele ao eliminar do banco remova tambem a imagem para não ocupar espaço no servidor. Como posso alterar o código pra fazer isso? o código é este: <?php // liga-se à base de dados include('ligar-bd.php'); // confirma se a variável "id" está selecionada if (isset($_GET['id']) && is_numeric($_GET['id'])){ // pega na variável "id" da URL $id = $_GET['id']; $imagem = $_GET['imagem']; // apaga a entrada da base de dados if ($stmt = $mysqli->prepare("DELETE FROM teste WHERE id = ? LIMIT 1")){ $stmt->bind_param("i",$id); $stmt->execute(); // DEVERIA PEGAR NO NOME GUARDADO EM base64 NO BANCO NO CAMPO "imagem", CONVERTER NO NOME REAL DA IMAGEM E INSERIR NO UNLINK ESSE NOME unlink($imagem); $stmt->close(); }else{ echo "ERRO: Impossível eliminar."; } $mysqli->close(); // redireciona após ter eliminado com sucesso header("Location: ver_todos.php"); }else{ header("Location: ver_todos.php"); } ?>
  20. a tua modelagem de categorias esta obsoleta ainda em mysql não esta não vi mal
  21. 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>
  22. Beraldo tenho a tabela teste com os campos (id, nome, imagem, catid, categoria)
  23. 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?
×
×
  • Create New...